puppet_metadata 3.0.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e9d1c84b47834137907ffd323ba3c70c3813acc98b7b3baeaf2351a48b0d268
4
- data.tar.gz: 7886a9e107fd780278bc3c94e083ae24bdfc0547d0347d6b144a9a5c61612484
3
+ metadata.gz: 4eeb2df8e93dc5c1eff89ca619a29ca8862bd8c98b3b3862273d05c053a2019c
4
+ data.tar.gz: 9cdb5e2c21fc08c2cba8a9c42ddcec33e0fe326e6b478380e79007c34aeaf1f2
5
5
  SHA512:
6
- metadata.gz: 13ba21af9df52daa794b49571de0b8019a8f3da764f7945aa422c21f3c3041c03a00f89e3f2e48a60f3d6cd8ef4b60607f7ad3aa0d0d7fe18b433c9ab2b9635f
7
- data.tar.gz: 33742d5addb4d89e784a44d1c3252cf6119a73405c450351d74f6e6da617c9b0f321dc3ff4687fec07459d4a06d432bf8e0203bec3fe5b5b10e825598dc940c4
6
+ metadata.gz: 8a637579127e64447e244511f5ba2d459c00fa4587d9e321a32c427ca0e71901088bb67c56d725067b6a3bafaaaa3df898a474803685a05eb6efe6024da612c0
7
+ data.tar.gz: cd7fa183863692be6a0efbbcb46473ace449f11b832490c173d397084c28666b5d83c7ac26e0a56d5d1619b744395e56e1ce08970ae8781b939c32426d9573f6
data/bin/metadata2gha CHANGED
@@ -9,7 +9,7 @@ options = {
9
9
  beaker_use_fqdn: false,
10
10
  beaker_pidfile_workaround: false,
11
11
  domain: nil,
12
- minimum_major_puppet_version: nil
12
+ minimum_major_puppet_version: nil,
13
13
  }
14
14
 
15
15
  OptionParser.new do |opts|
@@ -26,25 +26,23 @@ OptionParser.new do |opts|
26
26
 
27
27
  opts.banner = "Usage: #{$0} [options] metadata"
28
28
 
29
- opts.on("--[no-]use-fqdn", "Generate beaker setfiles with a FQDN") { |opt| options[:beaker_use_fqdn] = opt }
30
- opts.on("--pidfile-workaround VALUE", "Generate the systemd PIDFile workaround to work around a docker bug", PidfileWorkaround) { |opt| options[:beaker_pidfile_workaround] = opt }
31
- opts.on("-d", "--domain VALUE", "the domain for the box, only used when --use-fqdn is set to true") { |opt| options[:domain] = opt }
32
- opts.on("--minimum-major-puppet-version VERSION", "Don't create actions for Puppet versions less than this major version") { |opt| options[:minimum_major_puppet_version] = opt }
29
+ opts.on('--[no-]use-fqdn', 'Generate beaker setfiles with a FQDN') { |opt| options[:beaker_use_fqdn] = opt }
30
+ opts.on('--pidfile-workaround VALUE', 'Generate the systemd PIDFile workaround to work around a docker bug', PidfileWorkaround) { |opt| options[:beaker_pidfile_workaround] = opt }
31
+ opts.on('-d', '--domain VALUE', 'the domain for the box, only used when --use-fqdn is set to true') { |opt| options[:domain] = opt }
32
+ opts.on('--minimum-major-puppet-version VERSION', "Don't create actions for Puppet versions less than this major version") { |opt| options[:minimum_major_puppet_version] = opt }
33
33
  end.parse!
34
34
 
35
35
  filename = ARGV[0]
36
- if filename.nil? || filename.empty?
37
- filename = 'metadata.json'
38
- end
36
+ filename = 'metadata.json' if filename.nil? || filename.empty?
39
37
 
40
38
  begin
41
39
  metadata = PuppetMetadata.read(filename)
42
40
  rescue StandardError => e
43
- STDERR.puts "Failed to read #{filename}: #{e}"
41
+ warn "Failed to read #{filename}: #{e}"
44
42
  exit 2
45
43
  end
46
44
 
47
- github_output = !ENV['GITHUB_OUTPUT'].nil? ? File.open(ENV['GITHUB_OUTPUT'], 'a') : $stdout
45
+ github_output = ENV['GITHUB_OUTPUT'].nil? ? $stdout : File.open(ENV.fetch('GITHUB_OUTPUT', nil), 'a')
48
46
  metadata.github_actions(options).outputs.each do |name, value|
49
47
  github_output.write("#{name}=#{value.to_json}\n")
50
48
  end
@@ -1,12 +1,12 @@
1
1
  module PuppetMetadata
2
2
  class AIO
3
3
  COMPATIBLE = {
4
- 'AlmaLinux' => 'RedHat',
5
- 'Amazon' => 'RedHat',
6
- 'CentOS' => 'RedHat',
4
+ 'AlmaLinux' => 'RedHat',
5
+ 'Amazon' => 'RedHat',
6
+ 'CentOS' => 'RedHat',
7
7
  'OracleLinux' => 'RedHat',
8
- 'Rocky' => 'RedHat',
9
- 'Scientific' => 'RedHat',
8
+ 'Rocky' => 'RedHat',
9
+ 'Scientific' => 'RedHat',
10
10
  }.freeze
11
11
 
12
12
  BUILDS = {
@@ -21,6 +21,18 @@ module PuppetMetadata
21
21
  'CentOS' => ['8'],
22
22
  }.freeze
23
23
  class << self
24
+ # modifies the operating system name to suit beaker-hostgenerator
25
+ # @param [String] os
26
+ # @return [String] the modified OS name
27
+ def adjusted_os(os)
28
+ case os
29
+ when 'OracleLinux'
30
+ 'oracle'
31
+ else
32
+ os.downcase
33
+ end
34
+ end
35
+
24
36
  # Convert an Operating System name with a release to a Beaker setfile
25
37
  #
26
38
  # @param [String] os
@@ -46,8 +58,10 @@ module PuppetMetadata
46
58
  def os_release_to_setfile(os, release, use_fqdn: false, pidfile_workaround: false, domain: nil, puppet_version: nil)
47
59
  return unless os_supported?(os)
48
60
 
49
- name = "#{os.downcase}#{release.tr('.', '')}-64"
50
- hostname = puppet_version != nil ? "#{name}-#{puppet_version}" : name
61
+ aos = adjusted_os(os)
62
+
63
+ name = "#{aos}#{release.tr('.', '')}-64"
64
+ hostname = (puppet_version.nil? && puppet_version != 'none') ? name : "#{name}-#{puppet_version}"
51
65
  domain ||= 'example.com' if use_fqdn
52
66
 
53
67
  options = {}
@@ -71,7 +85,7 @@ module PuppetMetadata
71
85
  # Return whether a Beaker setfile can be generated for the given OS
72
86
  # @param [String] os The operating system
73
87
  def os_supported?(os)
74
- ['Archlinux', 'CentOS', 'Fedora', 'Debian', 'Ubuntu', 'Rocky', 'AlmaLinux'].include?(os)
88
+ %w[Archlinux CentOS Fedora Debian Ubuntu Rocky AlmaLinux OracleLinux].include?(os)
75
89
  end
76
90
 
77
91
  private
@@ -1,7 +1,6 @@
1
1
  module PuppetMetadata
2
2
  class GithubActions
3
- attr_reader :metadata
4
- attr_reader :options
3
+ attr_reader :metadata, :options
5
4
 
6
5
  # @param [PuppetMetadata::Metadata] metadata
7
6
  # @param [Hash] options
@@ -49,14 +48,20 @@ module PuppetMetadata
49
48
  def beaker_os_releases
50
49
  majors = puppet_major_versions
51
50
 
51
+ distro_puppet_version = {
52
+ name: 'Distro Puppet',
53
+ value: nil, # We don't know the version and since it's rolling, it can be anything
54
+ collection: 'none',
55
+ }
56
+
52
57
  metadata.operatingsystems.each do |os, releases|
53
58
  case os
54
59
  when 'Archlinux', 'Gentoo'
55
- yield [os, 'rolling', majors.max_by { |v| v[:value] }]
60
+ yield [os, 'rolling', distro_puppet_version]
56
61
  else
57
62
  releases&.each do |release|
58
63
  majors.each do |puppet_version|
59
- if AIO.has_aio_build?(os, release, puppet_version[:value])
64
+ if AIO.has_aio_build?(os, release, puppet_version[:value]) # rubocop:disable Style/IfUnlessModifier
60
65
  yield [os, release, puppet_version]
61
66
  end
62
67
  end
@@ -80,7 +85,7 @@ module PuppetMetadata
80
85
  name: setfile[1],
81
86
  value: setfile[0],
82
87
  },
83
- puppet: puppet_version
88
+ puppet: puppet_version,
84
89
  }
85
90
  end
86
91
 
@@ -88,7 +93,7 @@ module PuppetMetadata
88
93
  end
89
94
 
90
95
  def puppet_version_below_minimum?(version)
91
- return false unless options[:minimum_major_puppet_version]
96
+ return false unless version && options[:minimum_major_puppet_version]
92
97
 
93
98
  Gem::Version.new(version) < Gem::Version.new(options[:minimum_major_puppet_version])
94
99
  end
@@ -35,7 +35,7 @@ module PuppetMetadata
35
35
  if validate
36
36
  require 'metadata_json_lint'
37
37
  schema_errors = MetadataJsonLint::Schema.new.validate(metadata)
38
- raise InvalidMetadataException.new(schema_errors) if schema_errors.any?
38
+ raise InvalidMetadataException, schema_errors if schema_errors.any?
39
39
  end
40
40
 
41
41
  @metadata = metadata
@@ -67,10 +67,11 @@ module PuppetMetadata
67
67
 
68
68
  supported = metadata['operatingsystem_support'].map do |os|
69
69
  next unless os['operatingsystem']
70
+
70
71
  [os['operatingsystem'], os['operatingsystemrelease']]
71
72
  end
72
73
 
73
- Hash[supported.compact]
74
+ supported.compact.to_h
74
75
  end
75
76
  end
76
77
 
@@ -98,11 +99,12 @@ module PuppetMetadata
98
99
 
99
100
  unsupported = operatingsystems.map do |os, rels|
100
101
  next unless rels
102
+
101
103
  eol = rels.select { |rel| OperatingSystem.eol?(os, rel, at) }
102
104
  [os, eol] if eol.any?
103
105
  end
104
106
 
105
- Hash[unsupported.compact]
107
+ unsupported.compact.to_h
106
108
  end
107
109
 
108
110
  # A hash representation of the requirements
@@ -143,10 +145,12 @@ module PuppetMetadata
143
145
 
144
146
  # Current latest major is 7. It is highly recommended that modules
145
147
  # actually specify exact bounds, but this prevents an infinite loop.
146
- end_major = requirement.end == SemanticPuppet::Version::MAX ? 7 : requirement.end.major
148
+ end_major = (requirement.end == SemanticPuppet::Version::MAX) ? 7 : requirement.end.major
147
149
 
148
150
  (requirement.begin.major..end_major).select do |major|
149
- requirement.include?(SemanticPuppet::Version.new(major, 0, 0)) || requirement.include?(SemanticPuppet::Version.new(major, 99, 99))
151
+ requirement.include?(SemanticPuppet::Version.new(major, 0,
152
+ 0)) || requirement.include?(SemanticPuppet::Version.new(major,
153
+ 99, 99))
150
154
  end
151
155
  end
152
156
 
@@ -197,11 +201,12 @@ module PuppetMetadata
197
201
 
198
202
  reqs = array.map do |requirement|
199
203
  next unless requirement['name']
204
+
200
205
  version_requirement = requirement['version_requirement'] || '>= 0'
201
206
  [requirement['name'], SemanticPuppet::VersionRange.parse(version_requirement)]
202
207
  end
203
208
 
204
- Hash[reqs.compact]
209
+ reqs.compact.to_h
205
210
  end
206
211
 
207
212
  def matches?(required_version, provided_version)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
 
3
5
  module PuppetMetadata
@@ -43,6 +45,12 @@ module PuppetMetadata
43
45
  '2.2' => '2003-06-30',
44
46
  '2.1' => '2000-09-30',
45
47
  },
48
+ # https://endoflife.date/oraclelinux
49
+ 'OracleLinux' => {
50
+ '9' => '2032-06-30',
51
+ '8' => '2029-07-01',
52
+ '7' => '2024-07-01',
53
+ },
46
54
  # https://endoflife.software/operating-systems/linux/fedora
47
55
  'Fedora' => {
48
56
  '32' => nil,
@@ -157,8 +165,10 @@ module PuppetMetadata
157
165
  def eol_date(operatingsystem, release)
158
166
  releases = EOL_DATES[operatingsystem]
159
167
  return unless releases
168
+
160
169
  date = releases[release]
161
170
  return unless date
171
+
162
172
  Date.parse(date)
163
173
  end
164
174
 
@@ -193,8 +203,8 @@ module PuppetMetadata
193
203
  def supported_releases(operatingsystem)
194
204
  releases = EOL_DATES[operatingsystem]
195
205
  today = Date.today
196
- releases.select { |release, eol_date| !eol_date || Date.parse(eol_date) > today }.keys.
197
- sort_by { |release| Gem::Version.new(release) }
206
+ releases.select { |_release, eol_date| !eol_date || Date.parse(eol_date) > today }.keys
207
+ .sort_by { |release| Gem::Version.new(release) }
198
208
  end
199
209
  end
200
210
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A module that provides abstractions around Puppet's metadata format.
2
4
  module PuppetMetadata
3
5
  autoload :AIO, 'puppet_metadata/aio'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet_metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-04-29 00:00:00.000000000 Z
12
+ date: 2023-08-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metadata-json-lint
@@ -59,6 +59,20 @@ dependencies:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '13.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '6.0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '6.0'
62
76
  - !ruby/object:Gem::Dependency
63
77
  name: rspec
64
78
  requirement: !ruby/object:Gem::Requirement
@@ -88,19 +102,19 @@ dependencies:
88
102
  - !ruby/object:Gem::Version
89
103
  version: '1.0'
90
104
  - !ruby/object:Gem::Dependency
91
- name: rdoc
105
+ name: voxpupuli-rubocop
92
106
  requirement: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '6.0'
110
+ version: 2.0.0
97
111
  type: :development
98
112
  prerelease: false
99
113
  version_requirements: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '6.0'
117
+ version: 2.0.0
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: yard
106
120
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +161,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
161
  - - ">="
148
162
  - !ruby/object:Gem::Version
149
163
  version: '2.7'
164
+ - - "<"
165
+ - !ruby/object:Gem::Version
166
+ version: '4'
150
167
  required_rubygems_version: !ruby/object:Gem::Requirement
151
168
  requirements:
152
169
  - - ">="