puppet_metadata 4.6.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/puppet_metadata/aio.rb +26 -29
- data/lib/puppet_metadata/github_actions.rb +27 -22
- data/lib/puppet_metadata/metadata.rb +29 -11
- data/lib/puppet_metadata/operatingsystem.rb +45 -2
- metadata +5 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 524caad31fa4d4d85cf6df58f43ec003b8267abb0bef9974e336753c88160f29
|
4
|
+
data.tar.gz: 1bc931eeee6247d0308b1fad5fc4fd01dbe6ab3615129c24a0f7e9caa0b58493
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9973f6d3d9611f28ed44dda6e23d2b21b214f956c262efae86b2f3e52c0f95882a0c2de07bea7c9fa3d17a18ae8586980023eb10e3ccf6c204eaf8ce1674d656
|
7
|
+
data.tar.gz: 33553b19365fcb4c8ab8647af3b8d722bc77be30acd36dbb02ab1bb666758e9e4a20b27325d4609971b45d5d956fc8e5c19135da5338e7f58596fc11f186bf2a
|
data/lib/puppet_metadata/aio.rb
CHANGED
@@ -9,24 +9,14 @@ module PuppetMetadata
|
|
9
9
|
'Scientific' => 'RedHat',
|
10
10
|
}.freeze
|
11
11
|
|
12
|
-
|
12
|
+
PUPPET_BUILDS = {
|
13
13
|
# RPM-based
|
14
14
|
'RedHat' => {
|
15
|
-
'
|
16
|
-
'
|
17
|
-
'
|
18
|
-
'8' => 5..8,
|
19
|
-
'9' => 6..8,
|
15
|
+
'7' => 7..8,
|
16
|
+
'8' => 7..8,
|
17
|
+
'9' => 7..8,
|
20
18
|
},
|
21
19
|
'Fedora' => {
|
22
|
-
'26' => [5],
|
23
|
-
'27' => 5..6,
|
24
|
-
'28' => 5..6,
|
25
|
-
'29' => 5..6,
|
26
|
-
'30' => 5..7,
|
27
|
-
'31' => 5..7,
|
28
|
-
'32' => 6..7,
|
29
|
-
'34' => 6..7,
|
30
20
|
'36' => 7..8,
|
31
21
|
'40' => 7..8,
|
32
22
|
},
|
@@ -37,38 +27,45 @@ module PuppetMetadata
|
|
37
27
|
},
|
38
28
|
# deb-based
|
39
29
|
'Debian' => {
|
40
|
-
'
|
41
|
-
'8' => 5..6,
|
42
|
-
'9' => 5..7,
|
43
|
-
'10' => 5..8,
|
44
|
-
'11' => 6..8,
|
30
|
+
'11' => 7..8,
|
45
31
|
'12' => 7..8,
|
46
32
|
},
|
47
33
|
'Ubuntu' => {
|
48
|
-
'
|
49
|
-
'
|
50
|
-
'18.04' => 5..8,
|
51
|
-
'20.04' => 6..8,
|
52
|
-
'22.04' => 6..8,
|
34
|
+
'20.04' => 7..8,
|
35
|
+
'22.04' => 7..8,
|
53
36
|
'24.04' => 7..8,
|
54
37
|
},
|
55
38
|
}.freeze
|
56
39
|
|
40
|
+
OPENVOX_BUILDS = PUPPET_BUILDS.merge({
|
41
|
+
'RedHat' => {
|
42
|
+
'7' => 7..8,
|
43
|
+
'8' => 7..8,
|
44
|
+
'9' => 7..8,
|
45
|
+
'10' => 7..8,
|
46
|
+
},
|
47
|
+
'Debian' => {
|
48
|
+
'11' => 7..8,
|
49
|
+
'12' => 7..8,
|
50
|
+
'13' => [8],
|
51
|
+
},
|
52
|
+
}).freeze
|
53
|
+
|
57
54
|
PUPPET_RUBY_VERSIONS = {
|
58
|
-
4 => '2.1',
|
59
|
-
5 => '2.4',
|
60
|
-
6 => '2.5',
|
61
55
|
7 => '2.7',
|
62
56
|
8 => '3.2',
|
63
57
|
}.freeze
|
64
58
|
|
59
|
+
OPENVOX_RUBY_VERSIONS = PUPPET_RUBY_VERSIONS
|
60
|
+
|
65
61
|
class << self
|
66
62
|
def find_base_os(os)
|
67
63
|
COMPATIBLE.fetch(os, os)
|
68
64
|
end
|
69
65
|
|
70
|
-
def has_aio_build?(os, release, puppet_version)
|
71
|
-
|
66
|
+
def has_aio_build?(os, release, puppet_version, requirement)
|
67
|
+
builds = (requirement == 'openvox') ? OPENVOX_BUILDS : PUPPET_BUILDS
|
68
|
+
builds.dig(find_base_os(os), release)&.include?(puppet_version)
|
72
69
|
end
|
73
70
|
end
|
74
71
|
end
|
@@ -16,7 +16,6 @@ module PuppetMetadata
|
|
16
16
|
# @return [Hash[Symbol, Any]] The outputs for Github Actions
|
17
17
|
def outputs(at = nil)
|
18
18
|
{
|
19
|
-
puppet_major_versions: puppet_major_versions,
|
20
19
|
puppet_unit_test_matrix: puppet_unit_test_matrix,
|
21
20
|
puppet_beaker_test_matrix: puppet_beaker_test_matrix(at),
|
22
21
|
}
|
@@ -24,23 +23,29 @@ module PuppetMetadata
|
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
def
|
28
|
-
metadata.
|
29
|
-
|
26
|
+
def beaker_major_versions
|
27
|
+
metadata.requirements_with_major_versions.flat_map do |requirement, versions|
|
28
|
+
versions.sort.reverse.filter_map do |version|
|
29
|
+
next if requirement_name_version_below_minimum?(version)
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
label = (requirement == 'openvox') ? 'OpenVox' : requirement.capitalize
|
32
|
+
|
33
|
+
{
|
34
|
+
name: "#{label} #{version}",
|
35
|
+
value: version,
|
36
|
+
collection: "#{requirement}#{version}",
|
37
|
+
requirement: requirement,
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
def puppet_unit_test_matrix
|
40
|
-
metadata.
|
44
|
+
majors = metadata.requirements_with_major_versions.first[1]
|
45
|
+
majors.sort.reverse.map do |puppet|
|
41
46
|
ruby = PuppetMetadata::AIO::PUPPET_RUBY_VERSIONS[puppet]
|
42
47
|
next unless ruby
|
43
|
-
next if
|
48
|
+
next if requirement_name_version_below_minimum?(puppet)
|
44
49
|
|
45
50
|
{
|
46
51
|
puppet: puppet,
|
@@ -50,17 +55,17 @@ module PuppetMetadata
|
|
50
55
|
end
|
51
56
|
|
52
57
|
def beaker_os_releases(at = nil)
|
53
|
-
majors =
|
54
|
-
|
58
|
+
majors = beaker_major_versions
|
55
59
|
distro_puppet_version = {
|
56
60
|
name: 'Distro Puppet',
|
57
61
|
value: nil, # We don't know the version and since it's rolling, it can be anything
|
58
62
|
collection: 'none',
|
63
|
+
requirement: 'puppet',
|
59
64
|
}
|
60
|
-
|
61
65
|
metadata.operatingsystems.each do |os, releases|
|
62
66
|
case os
|
63
67
|
when 'Archlinux', 'Gentoo'
|
68
|
+
# both currently only ship puppet, not openvox yet
|
64
69
|
yield [os, 'rolling', distro_puppet_version]
|
65
70
|
else
|
66
71
|
releases&.each do |release|
|
@@ -78,7 +83,7 @@ module PuppetMetadata
|
|
78
83
|
end
|
79
84
|
|
80
85
|
majors.each do |puppet_version|
|
81
|
-
if AIO.has_aio_build?(os, release, puppet_version[:value])
|
86
|
+
if AIO.has_aio_build?(os, release, puppet_version[:value], puppet_version[:requirement])
|
82
87
|
yield [os, release, puppet_version]
|
83
88
|
elsif PuppetMetadata::OperatingSystem.os_release_puppet_version(os, release) == puppet_version[:value]
|
84
89
|
yield [os, release, distro_puppet_version.merge(value: puppet_version[:value])]
|
@@ -92,15 +97,15 @@ module PuppetMetadata
|
|
92
97
|
def puppet_beaker_test_matrix(at)
|
93
98
|
matrix_include = []
|
94
99
|
|
95
|
-
beaker_os_releases(at) do |os, release,
|
96
|
-
next if
|
100
|
+
beaker_os_releases(at) do |os, release, implementation|
|
101
|
+
next if requirement_name_version_below_minimum?(implementation[:value])
|
97
102
|
|
98
|
-
setfile = os_release_to_beaker_setfile(os, release,
|
103
|
+
setfile = os_release_to_beaker_setfile(os, release, implementation[:collection])
|
99
104
|
next unless setfile
|
100
105
|
|
101
|
-
name = "#{
|
106
|
+
name = "#{implementation[:name]} - #{setfile[1]}"
|
102
107
|
env = {
|
103
|
-
'BEAKER_PUPPET_COLLECTION' =>
|
108
|
+
'BEAKER_PUPPET_COLLECTION' => implementation[:collection],
|
104
109
|
'BEAKER_SETFILE' => setfile[0],
|
105
110
|
}
|
106
111
|
|
@@ -123,7 +128,7 @@ module PuppetMetadata
|
|
123
128
|
matrix_include
|
124
129
|
end
|
125
130
|
|
126
|
-
def
|
131
|
+
def requirement_name_version_below_minimum?(version)
|
127
132
|
return false unless version && options[:minimum_major_puppet_version]
|
128
133
|
|
129
134
|
Gem::Version.new(version) < Gem::Version.new(options[:minimum_major_puppet_version])
|
@@ -20,6 +20,8 @@ module PuppetMetadata
|
|
20
20
|
|
21
21
|
# An abstraction over Puppet metadata
|
22
22
|
class Metadata
|
23
|
+
SUPPORTED_REQUIREMENTS = ['openvox', 'puppet'].freeze
|
24
|
+
|
23
25
|
attr_reader :metadata
|
24
26
|
|
25
27
|
# @param [Hash[String, Any]] metadata
|
@@ -137,21 +139,27 @@ module PuppetMetadata
|
|
137
139
|
matches?(requirements[name], version)
|
138
140
|
end
|
139
141
|
|
142
|
+
def requirements_with_major_versions
|
143
|
+
SUPPORTED_REQUIREMENTS.filter_map do |requirement|
|
144
|
+
majors = major_versions(requirement)
|
145
|
+
[requirement, majors] unless majors.empty?
|
146
|
+
end.to_h
|
147
|
+
end
|
148
|
+
|
140
149
|
# @return [Array[Integer]] Supported major Puppet versions
|
141
150
|
# @see #requirements
|
142
|
-
def
|
143
|
-
requirement = requirements[
|
144
|
-
|
151
|
+
def major_versions(requirement_name)
|
152
|
+
requirement = requirements[requirement_name]
|
153
|
+
return [] unless requirement
|
145
154
|
|
146
|
-
|
147
|
-
|
148
|
-
end_major = (requirement.end == SemanticPuppet::Version::MAX) ? 7 : requirement.end.major
|
155
|
+
major_version_for_requirement(requirement)
|
156
|
+
end
|
149
157
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
158
|
+
def major_versions!(requirement_name)
|
159
|
+
requirement = requirements[requirement_name]
|
160
|
+
raise Exception, "No '#{requirement_name}' requirement found'" unless requirement
|
161
|
+
|
162
|
+
major_version_for_requirement(requirement)
|
155
163
|
end
|
156
164
|
|
157
165
|
# A hash representation of the dependencies
|
@@ -194,6 +202,16 @@ module PuppetMetadata
|
|
194
202
|
|
195
203
|
private
|
196
204
|
|
205
|
+
def major_version_for_requirement(requirement)
|
206
|
+
# Current latest major is 8. It is highly recommended that modules
|
207
|
+
# actually specify exact bounds, but this prevents an infinite loop.
|
208
|
+
end_major = (requirement.end == SemanticPuppet::Version::MAX) ? 8 : requirement.end.major
|
209
|
+
|
210
|
+
(requirement.begin.major..end_major).select do |major|
|
211
|
+
requirement.include?(SemanticPuppet::Version.new(major, 0, 0)) || requirement.include?(SemanticPuppet::Version.new(major, 99, 99))
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
197
215
|
def build_version_requirement_hash(array)
|
198
216
|
return {} if array.nil?
|
199
217
|
|
@@ -18,6 +18,31 @@ module PuppetMetadata
|
|
18
18
|
'9' => '2032-05-31',
|
19
19
|
'8' => '2029-05-31',
|
20
20
|
},
|
21
|
+
'Amazon' => {
|
22
|
+
# Amazon Linux AMI
|
23
|
+
# https://aws.amazon.com/amazon-linux-ami/
|
24
|
+
'2018.03' => '2023-12-31',
|
25
|
+
'2017.09' => '2023-12-31',
|
26
|
+
'2017.03' => '2023-12-31',
|
27
|
+
'2016.09' => '2023-12-31',
|
28
|
+
'2016.03' => '2023-12-31',
|
29
|
+
'2015.09' => '2023-12-31',
|
30
|
+
'2015.03' => '2023-12-31',
|
31
|
+
'2014.09' => '2023-12-31',
|
32
|
+
'2014.03' => '2023-12-31',
|
33
|
+
'2013.09' => '2023-12-31',
|
34
|
+
'2013.03' => '2023-12-31',
|
35
|
+
'2012.09' => '2023-12-31',
|
36
|
+
'2012.03' => '2023-12-31',
|
37
|
+
'2011.09' => '2023-12-31',
|
38
|
+
'2010.11' => '2023-12-31',
|
39
|
+
# Amazon Linux 2
|
40
|
+
# https://aws.amazon.com/amazon-linux-2/faqs/
|
41
|
+
'2.0' => '2026-06-30',
|
42
|
+
# Amazon Linux 2023
|
43
|
+
# https://docs.aws.amazon.com/linux/al2023/ug/release-cadence.html
|
44
|
+
'2023' => '2027-06-30',
|
45
|
+
},
|
21
46
|
# https://endoflife.software/operating-systems/linux/centos
|
22
47
|
# https://endoflife.date/centos-stream
|
23
48
|
'CentOS' => {
|
@@ -33,6 +58,7 @@ module PuppetMetadata
|
|
33
58
|
'Debian' => {
|
34
59
|
# EOL is extended life cycle, not standard support
|
35
60
|
# https://github.com/voxpupuli/voxpupuli.github.io/pull/386
|
61
|
+
'13' => '2030-08-09',
|
36
62
|
'12' => '2028-06-30',
|
37
63
|
'11' => '2026-08-31',
|
38
64
|
'10' => '2022-09-10',
|
@@ -56,8 +82,8 @@ module PuppetMetadata
|
|
56
82
|
# https://docs.fedoraproject.org/en-US/releases/eol/
|
57
83
|
'Fedora' => {
|
58
84
|
'41' => nil,
|
59
|
-
'40' =>
|
60
|
-
'39' =>
|
85
|
+
'40' => '2025-05-13',
|
86
|
+
'39' => '2024-11-26',
|
61
87
|
'38' => '2024-05-21',
|
62
88
|
'37' => '2023-12-05',
|
63
89
|
'36' => '2023-05-16',
|
@@ -125,6 +151,23 @@ module PuppetMetadata
|
|
125
151
|
'9' => '2032-05-31',
|
126
152
|
'8' => '2029-05-31',
|
127
153
|
},
|
154
|
+
# https://scientificlinux.org/category/uncategorized/scientific-linux-end-of-life/
|
155
|
+
'Scientific' => {
|
156
|
+
'8' => '2024-06-30', # This is not really a Scientific release, but I have seen it in module metadata ..
|
157
|
+
'7' => '2024-06-30',
|
158
|
+
'6' => '2020-11-30',
|
159
|
+
'5' => '2017-03-31',
|
160
|
+
'4' => '2012-02-29',
|
161
|
+
'3' => '2010-10-30',
|
162
|
+
},
|
163
|
+
# https://www.suse.com/lifecycle/#product-suse-linux-enterprise-server
|
164
|
+
# General support end dates, not LTSS
|
165
|
+
'SLES' => {
|
166
|
+
'15' => '2031-07-31',
|
167
|
+
'12' => '2024-10-31',
|
168
|
+
'11' => '2019-03-31',
|
169
|
+
'10' => '2013-07-31',
|
170
|
+
},
|
128
171
|
# https://endoflife.software/operating-systems/linux/ubuntu
|
129
172
|
'Ubuntu' => {
|
130
173
|
'24.04' => '2029-04-30',
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet_metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vox Pupuli
|
8
8
|
- Ewoud Kohl van Wijngaarden
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: metadata-json-lint
|
@@ -113,14 +112,14 @@ dependencies:
|
|
113
112
|
requirements:
|
114
113
|
- - "~>"
|
115
114
|
- !ruby/object:Gem::Version
|
116
|
-
version: 3.
|
115
|
+
version: 3.1.0
|
117
116
|
type: :development
|
118
117
|
prerelease: false
|
119
118
|
version_requirements: !ruby/object:Gem::Requirement
|
120
119
|
requirements:
|
121
120
|
- - "~>"
|
122
121
|
- !ruby/object:Gem::Version
|
123
|
-
version: 3.
|
122
|
+
version: 3.1.0
|
124
123
|
- !ruby/object:Gem::Dependency
|
125
124
|
name: yard
|
126
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,7 +157,6 @@ homepage: https://github.com/voxpupuli/puppet_metadata
|
|
158
157
|
licenses:
|
159
158
|
- Apache-2.0
|
160
159
|
metadata: {}
|
161
|
-
post_install_message:
|
162
160
|
rdoc_options:
|
163
161
|
- "--main"
|
164
162
|
- README.md
|
@@ -178,8 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
176
|
- !ruby/object:Gem::Version
|
179
177
|
version: '0'
|
180
178
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
182
|
-
signing_key:
|
179
|
+
rubygems_version: 3.6.9
|
183
180
|
specification_version: 4
|
184
181
|
summary: Data structures for the Puppet Metadata
|
185
182
|
test_files: []
|