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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0c6b227acc94c9c68da32eed52aebd0bf2c3e7c47fe604d377f1e2389df0a68c
4
- data.tar.gz: cf77d1e5835cce701514e32ef2cf04295949262426b067fd632f74f5c7347214
3
+ metadata.gz: 524caad31fa4d4d85cf6df58f43ec003b8267abb0bef9974e336753c88160f29
4
+ data.tar.gz: 1bc931eeee6247d0308b1fad5fc4fd01dbe6ab3615129c24a0f7e9caa0b58493
5
5
  SHA512:
6
- metadata.gz: f0554c4a17dc0fc9c99cc41d4c5e224cb86c28d68f81c9e6cc8ffeeb576ee6a371b7f5a69016e1f0c16985f00461a4f90844f928cfeb107480e2045f7e577e9e
7
- data.tar.gz: 5534c09575ba2b2cf2e6c6efffed2f27676138dbc59f4d785e7dfe041ef2463e2b8983b0b3e35ae43c4969cde252ab02d838aec7ac40d557586c9ca7149d7143
6
+ metadata.gz: 9973f6d3d9611f28ed44dda6e23d2b21b214f956c262efae86b2f3e52c0f95882a0c2de07bea7c9fa3d17a18ae8586980023eb10e3ccf6c204eaf8ce1674d656
7
+ data.tar.gz: 33553b19365fcb4c8ab8647af3b8d722bc77be30acd36dbb02ab1bb666758e9e4a20b27325d4609971b45d5d956fc8e5c19135da5338e7f58596fc11f186bf2a
@@ -9,24 +9,14 @@ module PuppetMetadata
9
9
  'Scientific' => 'RedHat',
10
10
  }.freeze
11
11
 
12
- BUILDS = {
12
+ PUPPET_BUILDS = {
13
13
  # RPM-based
14
14
  'RedHat' => {
15
- '5' => 5..7,
16
- '6' => 5..7,
17
- '7' => 5..8,
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
- '7' => [5],
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
- '14.04' => 5..6,
49
- '16.04' => 5..7,
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
- BUILDS.dig(find_base_os(os), release)&.include?(puppet_version)
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 puppet_major_versions
28
- metadata.puppet_major_versions.sort.reverse.map do |version|
29
- next if puppet_version_below_minimum?(version)
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
- name: "Puppet #{version}",
33
- value: version,
34
- collection: "puppet#{version}",
35
- }
36
- end.compact
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.puppet_major_versions.sort.reverse.map do |puppet|
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 puppet_version_below_minimum?(puppet)
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 = puppet_major_versions
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, puppet_version|
96
- next if puppet_version_below_minimum?(puppet_version[:value])
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, puppet_version[:collection])
103
+ setfile = os_release_to_beaker_setfile(os, release, implementation[:collection])
99
104
  next unless setfile
100
105
 
101
- name = "#{puppet_version[:name]} - #{setfile[1]}"
106
+ name = "#{implementation[:name]} - #{setfile[1]}"
102
107
  env = {
103
- 'BEAKER_PUPPET_COLLECTION' => puppet_version[: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 puppet_version_below_minimum?(version)
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 puppet_major_versions
143
- requirement = requirements['puppet']
144
- raise Exception, 'No Puppet requirement found' unless requirement
151
+ def major_versions(requirement_name)
152
+ requirement = requirements[requirement_name]
153
+ return [] unless requirement
145
154
 
146
- # Current latest major is 7. It is highly recommended that modules
147
- # actually specify exact bounds, but this prevents an infinite loop.
148
- end_major = (requirement.end == SemanticPuppet::Version::MAX) ? 7 : requirement.end.major
155
+ major_version_for_requirement(requirement)
156
+ end
149
157
 
150
- (requirement.begin.major..end_major).select do |major|
151
- requirement.include?(SemanticPuppet::Version.new(major, 0,
152
- 0)) || requirement.include?(SemanticPuppet::Version.new(major,
153
- 99, 99))
154
- end
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' => nil,
60
- '39' => nil,
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.6.0
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: 2025-01-24 00:00:00.000000000 Z
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.0.0
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.0.0
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.5.22
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: []