openvox 8.22.0 → 8.23.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: caf78c678db56707d858e1d97c0476530041054e645e1de45ebadcd0ee1affa4
4
- data.tar.gz: 801f887a1b30867bedbf3eb797187d04f90e85c2a6d949f0b60531eca0f6b874
3
+ metadata.gz: aed4767f47fbc8e2cada7f28bd3eb89af5c63a93d77c51cfe6863db5613f360d
4
+ data.tar.gz: 35906d9b41395c95d8162d1cc3af5109c265c4bd6a9749483f3572de3802940f
5
5
  SHA512:
6
- metadata.gz: cb5cfbebe5aaca65a86ed29a647a4e2041bc59e5097f1fe602219b5a6b585494fef0ac9178198d2f610dde79933a0b52c9c149dd4ba0d74d7c83f5fa3bfde24e
7
- data.tar.gz: 1570ebc01ac6a7f63ebfb36327380ce2f813e68d7e9369cf99f0fa8129e6485645345ef1733fccc1d38c5aa4787655a32c79631cce779f06d880798b069c7cfc
6
+ metadata.gz: 23098a31bba7f56c0c52c81a7f22964034f11e695ac23f19fcf927ff51ffd74d2e41b1fd6cb2bf0c6d3e88aacad039e0e84e77717c0601ec546289d3c1809d6d
7
+ data.tar.gz: 24aa9b6b9f4b03bcff0c52de755ce6d29584cc8462a985b3fd7474124aee6edeeaca5b5be4dc139776246b441fd6c886d74d3c455986106734b795cfcc0e31b6
data/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [8.23.0](https://github.com/openvoxproject/openvox/tree/8.23.0) (2025-09-07)
6
+
7
+ [Full Changelog](https://github.com/openvoxproject/openvox/compare/8.22.0...8.23.0)
8
+
9
+ - This is our first release where MacOS and Windows agents are built entirely in GitHub Actions!
10
+ - MacOS x86_64 is now supported
11
+ - The MacOS agents now work on all currently supported MacOS versions (13, 14, and 15). No need for separate packages!
12
+ - The openvox-agent repo, which was the repo used for building the openvox-agent packages, has now been integrated into this openvox repo under the 'packaging' directory. This will allow us to have fewer steps in the build process and tag changes more cleanly, rather than having to tag two separate repos. Note that for releases prior to this one, the changelog in this file refers only to the changes to openvox itself and not packaging changes. For example, 8.22.1 was released to fix an unintentional service renaming issue and details are in the openvox-agent repo. At some point, we may try to integrate the two changelogs.
13
+ - This release contains a large number of dependencies bumps. Most are not security related, but many dependencies were lagging for a long time. See [this PR](https://github.com/OpenVoxProject/puppet-runtime/pull/35) for details.
14
+ - A patch for Augeas to address [CVE-2025-2588](https://github.com/advisories/GHSA-hxwj-c5vw-fwgp)
15
+
16
+ **Implemented enhancements:**
17
+
18
+ - Respect systemd's RUNTIME\_DIRECTORY environment variable [\#165](https://github.com/OpenVoxProject/openvox/pull/165) ([ekohl](https://github.com/ekohl))
19
+
20
+ **Fixed bugs:**
21
+
22
+ - treat windows service accounts as case insensitive [\#172](https://github.com/OpenVoxProject/openvox/pull/172) ([binford2k](https://github.com/binford2k))
23
+ - Ensure confdir exists [\#171](https://github.com/OpenVoxProject/openvox/pull/171) ([binford2k](https://github.com/binford2k))
24
+
25
+ **Merged pull requests:**
26
+
27
+ - Promote puppet-runtime 2025.09.04.1 [\#191](https://github.com/OpenVoxProject/openvox/pull/191) ([nmburgan](https://github.com/nmburgan))
28
+ - Merge openvox-agent vanagon repo [\#186](https://github.com/OpenVoxProject/openvox/pull/186) ([austb](https://github.com/austb))
29
+
30
+ ## [8.22.0](https://github.com/openvoxproject/openvox/tree/8.22.0) (2025-08-23)
31
+
32
+ [Full Changelog](https://github.com/openvoxproject/openvox/compare/8.21.1...8.22.0)
33
+
5
34
  ## [8.21.1](https://github.com/openvoxproject/openvox/tree/8.21.1) (2025-07-23)
6
35
 
7
36
  [Full Changelog](https://github.com/openvoxproject/openvox/compare/8.21.0...8.21.1)
data/Gemfile CHANGED
@@ -12,7 +12,7 @@ def location_for(place, fake_version = nil)
12
12
  end
13
13
  end
14
14
 
15
- # Make sure these gem requirements are in sync with the gempspec. Specifically,
15
+ # Make sure these gem requirements are in sync with the gemspec. Specifically,
16
16
  # the runtime_dependencies in openvox.gemspec match the runtime dependencies here
17
17
  # (like openfact, semantic_puppet, and puppet-resource_api)
18
18
 
@@ -53,7 +53,7 @@ group(:test) do
53
53
  gem 'webrick', '~> 1.7', require: false
54
54
  gem 'yard', require: false
55
55
 
56
- gem 'rubocop', '~> 1.79.0', require: false, platforms: [:ruby]
56
+ gem 'rubocop', '~> 1.80.0', require: false, platforms: [:ruby]
57
57
  gem 'rubocop-i18n', '~> 3.0', require: false, platforms: [:ruby]
58
58
  gem 'rubocop-performance', '~> 1.0', require: false, platforms: [:ruby]
59
59
  gem 'rubocop-rake', '~> 0.6', require: false, platforms: [:ruby]
@@ -69,7 +69,13 @@ group(:development, optional: true) do
69
69
  end
70
70
 
71
71
  group(:packaging) do
72
- gem 'packaging', *location_for(ENV['PACKAGING_LOCATION'] || '~> 0.99')
72
+ gem 'packaging', *location_for(ENV['PACKAGING_LOCATION'] || '~> 0.105')
73
+ if RUBY_VERSION >= '3.2'
74
+ gem 'vanagon', *location_for(ENV['VANAGON_LOCATION'] || 'https://github.com/openvoxproject/vanagon#main')
75
+ end
76
+ gem 'artifactory'
77
+ gem 'json'
78
+ gem 'octokit'
73
79
  end
74
80
 
75
81
  group(:documentation, optional: true) do
@@ -81,7 +87,7 @@ end
81
87
 
82
88
  group :release, optional: true do
83
89
  gem 'faraday-retry', require: false
84
- gem 'github_changelog_generator', require: false
90
+ gem 'github_changelog_generator', require: false, git: 'https://github.com/voxpupuli/github-changelog-generator', branch: 'avoid-processing-a-single-commit-multiple-time'
85
91
  end
86
92
 
87
93
  if File.exist? "#{__FILE__}.local"
@@ -171,6 +171,7 @@ Puppet::Face.define(:config, '0.0.1') do
171
171
  end
172
172
 
173
173
  path = Puppet::FileSystem.pathname(Puppet.settings.which_configuration_file)
174
+ Puppet::FileSystem.dir_mkpath(path)
174
175
  Puppet::FileSystem.touch(path)
175
176
  Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
176
177
  Puppet::Settings::IniFile.update(file) do |config|
@@ -288,7 +288,7 @@ module Puppet::FileSystem
288
288
  # @api public
289
289
  #
290
290
  def self.unlink(*paths)
291
- @impl.unlink(*(paths.map { |p| assert_path(p) }))
291
+ @impl.unlink(*paths.map { |p| assert_path(p) })
292
292
  end
293
293
 
294
294
  # @return [File::Stat] object for the named file.
@@ -169,7 +169,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
169
169
  elsif sources.empty?
170
170
  # TRANSLATORS Inlining refers to adding additional metadata (in this case we are not inlining)
171
171
  Puppet::Util::Profiler.profile(_("Not inlining resource without sources"), [:compiler, :static_compile_inlining, :skipped_file_metadata, :no_sources]) { false }
172
- elsif !(sources.all? { |source| source =~ /^puppet:/ })
172
+ elsif !sources.all? { |source| source =~ /^puppet:/ }
173
173
  # TRANSLATORS Inlining refers to adding additional metadata (in this case we are not inlining)
174
174
  Puppet::Util::Profiler.profile(_("Not inlining unsupported source scheme"), [:compiler, :static_compile_inlining, :skipped_file_metadata, :unsupported_scheme]) { false }
175
175
  else
@@ -234,7 +234,7 @@ module Puppet::FileBucketFile
234
234
  # @api private
235
235
  def verify_identical_file(contents_file, bucket_file)
236
236
  (bucket_file.to_binary.bytesize == Puppet::FileSystem.size(contents_file)) &&
237
- (bucket_file.stream() { |s| Puppet::FileSystem.compare_stream(contents_file, s) })
237
+ bucket_file.stream() { |s| Puppet::FileSystem.compare_stream(contents_file, s) }
238
238
  end
239
239
 
240
240
  # @param contents_file [Pathname] Opaque file path to intended backup
@@ -922,12 +922,12 @@ module Issues
922
922
  _("The 'bolt' library is required to %{action}") % { action: action }
923
923
  end
924
924
 
925
- UNKNOWN_TASK = issue :UNKNOWN_TASK, :type_name do
926
- _('Task not found: %{type_name}') % { type_name: type_name }
925
+ UNKNOWN_TASK = issue :UNKNOWN_TASK, :task_name do
926
+ _('Task not found: %{task_name}') % { task_name: task_name }
927
927
  end
928
928
 
929
- LOADER_FAILURE = issue :LOADER_FAILURE, :type do
930
- _('Failed to load: %{type_name}') % { type: type }
929
+ LOADER_FAILURE = issue :LOADER_FAILURE, :task_name do
930
+ _('Failed to load: %{task_name}') % { task_name: task_name }
931
931
  end
932
932
  end
933
933
  end
@@ -43,7 +43,7 @@ class Checker4_0 < Evaluator::LiteralEvaluator
43
43
  @acceptor = diagnostics_producer
44
44
 
45
45
  # Use null migration checker unless given in context
46
- @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
46
+ @migration_checker = Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() }
47
47
  end
48
48
 
49
49
  # Validates the entire model by visiting each model element and calling `check`.
@@ -274,7 +274,7 @@ Puppet::Type.type(:package).provide :nim, :parent => :aix, :source => :aix do
274
274
  [packages[package_name][version], nil]
275
275
  else
276
276
  versions = packages[package_name].keys
277
- latest_version = (versions.sort { |a, b| Puppet::Util::Package.versioncmp(b, a) })[0]
277
+ latest_version = versions.sort { |a, b| Puppet::Util::Package.versioncmp(b, a) }[0]
278
278
  [packages[package_name][latest_version], latest_version]
279
279
  end
280
280
  end
@@ -127,7 +127,7 @@ Puppet::Type.type(:service).provide :windows, :parent => :service do
127
127
  @normalized_logon_account ||= normalize_logonaccount
128
128
  @resource[:logonaccount] = @normalized_logon_account
129
129
 
130
- insync = @resource[:logonaccount] == current
130
+ insync = @resource[:logonaccount].casecmp?(current)
131
131
  self.logonpassword = @resource[:logonpassword] if insync
132
132
  insync
133
133
  end
data/lib/puppet/type.rb CHANGED
@@ -374,11 +374,9 @@ class Type
374
374
  # @see uniqueness_key
375
375
  # @return [Array<Puppet::Parameter>] WARNING: this return type is uncertain
376
376
  def self.key_attribute_parameters
377
- @key_attribute_parameters ||= (
378
- @parameters.find_all { |param|
379
- param.isnamevar? or param.name == :name
380
- }
381
- )
377
+ @key_attribute_parameters ||= @parameters.find_all { |param|
378
+ param.isnamevar? or param.name == :name
379
+ }
382
380
  end
383
381
 
384
382
  # Returns cached {key_attribute_parameters} names.
@@ -81,7 +81,7 @@ module Puppet
81
81
  end
82
82
 
83
83
  def run_dir
84
- which_dir("/var/run/puppetlabs", "~/.puppetlabs/var/run")
84
+ ENV.fetch('RUNTIME_DIRECTORY') { which_dir("/var/run/puppetlabs", "~/.puppetlabs/var/run") }
85
85
  end
86
86
 
87
87
  def log_dir
@@ -8,7 +8,7 @@
8
8
  # Raketasks and such to set the version based on the output of `git describe`
9
9
 
10
10
  module Puppet
11
- PUPPETVERSION = '8.22.0'
11
+ PUPPETVERSION = '8.23.0'
12
12
  IMPLEMENTATION = 'openvox'
13
13
 
14
14
  ##
data/tasks/build.rake ADDED
@@ -0,0 +1,26 @@
1
+ require 'fileutils'
2
+
3
+ namespace :vox do
4
+ desc 'Build vanagon project with Docker'
5
+ task :build, [:project, :platform] do |_, args|
6
+ args.with_defaults(project: 'openvox-agent')
7
+ project = args[:project]
8
+
9
+ ENV['SOURCE_DATE_EPOCH'] ||= `git log -1 --format=%ct`.chomp
10
+
11
+ abort 'You must provide a platform.' if args[:platform].nil? || args[:platform].empty?
12
+ platform = args[:platform]
13
+ os, _ver, arch = platform.match(/^(\w+)-([\w|\.]+)-(\w+)$/).captures
14
+ if os == 'macos'
15
+ abort "You must run this build from a #{arch} machine or shell. To do this on the current host, run 'arch -#{arch} /bin/bash'" if `uname -m`.chomp != arch
16
+ abort "You must run this build with a #{arch} Ruby version. To do this on the current host, install Ruby from an #{arch} shell via 'arch -#{arch} /bin/bash'." unless `ruby -v`.chomp =~ /#{arch}/
17
+ end
18
+
19
+ engine = platform =~ /^(macos|windows)-/ ? 'local' : 'docker'
20
+ cmd = "bundle exec build #{project} #{platform} --engine #{engine}"
21
+
22
+ Dir.chdir('packaging') do
23
+ run_command(cmd, silent: false, print_command: true, report_status: true)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ require 'fileutils'
2
+
3
+ namespace :vox do
4
+ desc 'Cleanup after puppet-runtime compile'
5
+ task :cleanup, [:platform] do |_, args|
6
+ abort 'You must provide a platform.' if args[:platform].nil? || args[:platform].empty?
7
+ platform = args[:platform]
8
+
9
+ if platform =~ /^windows-/
10
+ FileUtils.rm_rf('C:/ProgramFiles64Folder')
11
+ elsif platform =~ /^macos-/
12
+ FileUtils.rm_rf('/opt/puppetlabs')
13
+ FileUtils.rm_rf('/private/etc/puppetlabs')
14
+ else
15
+ FileUtils.rm_rf('/opt/puppetlabs')
16
+ FileUtils.rm_rf('/etc/puppetlabs')
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ namespace :vox do
2
+ desc 'Promote a component with a given ref into this repo. For puppet-runtime and pxp-agent, use the tag that has been built and uploaded to openvox-artifacts.'
3
+ task :promote, [:component, :ref] do |_, args|
4
+ component = args[:component]
5
+ ref = args[:ref]
6
+
7
+ abort 'You must specify a component.' if component.nil? || component.empty?
8
+ abort "Could not find configs/components/#{component}.json" unless File.exist?("packaging/configs/components/#{component}.json")
9
+ abort 'You must provide a ref.' if ref.nil? || ref.empty?
10
+
11
+ if component == 'puppet-runtime'
12
+ munged = ref.gsub('-', '.')
13
+ data = <<~DATA
14
+ {"location":"https://s3.osuosl.org/openvox-artifacts/#{component}/#{ref}/","version":"#{munged}"}
15
+ DATA
16
+ else
17
+ data = <<~DATA
18
+ {"url":"https://github.com/openvoxproject/#{component}.git","ref":"#{ref}"}
19
+ DATA
20
+ end
21
+
22
+ branch = run_command('git rev-parse --abbrev-ref HEAD')
23
+
24
+ Dir.chdir('packaging') do
25
+ puts "Writing #{component}.json"
26
+ File.write("configs/components/#{component}.json", data)
27
+ run_command("git add configs/components/#{component}.json")
28
+ puts 'Creating commit'
29
+ run_command("git commit -m 'Promote #{component} #{ref}'")
30
+ if ENV['NOPUSH'].nil?
31
+ puts 'Pushing to origin'
32
+ run_command("git push origin #{branch}")
33
+ end
34
+ end
35
+ end
36
+ end
data/tasks/upload.rake ADDED
@@ -0,0 +1,50 @@
1
+ namespace :vox do
2
+ desc 'Upload artifacts from the output directory to S3. Requires the AWS CLI to be installed and configured appropriately.'
3
+ task :upload, [:tag, :platform] do |_, args|
4
+ endpoint = ENV.fetch('ENDPOINT_URL')
5
+ bucket = ENV.fetch('BUCKET_NAME')
6
+ component = 'openvox-agent'
7
+ os = nil
8
+ arch = nil
9
+ if args[:platform]
10
+ parts = args[:platform].split('-')
11
+ os = parts[0].gsub('fedora','fc')
12
+ osver = parts[1]
13
+ # On MacOS, the dmg name has "macos.all"
14
+ os = os == 'macos' ? "#{os}.#{osver}" : "#{os}#{osver}"
15
+ arch = parts[2]
16
+ end
17
+
18
+ abort 'You must set the ENDPOINT_URL environment variable to the S3 server you want to upload to.' if endpoint.nil? || endpoint.empty?
19
+ abort 'You must set the BUCKET_NAME environment variable to the S3 bucket you are uploading to.' if bucket.nil? || bucket.empty?
20
+ abort 'You must provide a tag.' if args[:tag].nil? || args[:tag].empty?
21
+
22
+ munged_tag = args[:tag].gsub('-', '.')
23
+ s3 = "aws s3 --endpoint-url=#{endpoint}"
24
+
25
+ # Ensure the AWS CLI isn't going to fail with the given parameters
26
+ run_command("#{s3} ls s3://#{bucket}/")
27
+
28
+ glob = "#{__dir__}/../packaging/output/**/*#{munged_tag}*"
29
+ if os
30
+ if os =~ /windows/
31
+ # We don't put the OS in the filename for Windows
32
+ glob += "#{arch}.msi"
33
+ else
34
+ # "arch" is not used here because we are currently horrifyingly
35
+ # inconsistent with the platform -> package name
36
+ # (e.g. debian-12-aarch64 ends up as debian12.arm64).
37
+ glob += "#{os}*"
38
+ end
39
+ end
40
+ puts "Searching for files with glob #{glob}"
41
+ files = Dir.glob(glob)
42
+ abort 'No files for the given tag found in the output directory.' if files.empty?
43
+
44
+ path = "s3://#{bucket}/#{component}/#{args[:tag]}"
45
+ files.each do |f|
46
+ f = `cygpath -m #{f}`.chomp if os =~ /windows/
47
+ run_command("#{s3} cp #{f} #{path}/#{File.basename(f)}", silent: false)
48
+ end
49
+ end
50
+ end
data/tasks/vox.rake CHANGED
@@ -13,11 +13,5 @@ namespace :vox do
13
13
  warn 'Failed to update version in lib/puppet/version.rb' if data == new_data
14
14
 
15
15
  File.write('lib/puppet/version.rb', new_data)
16
-
17
- data = File.read('openvox.gemspec')
18
- new_data = data.sub(/spec.version = "\d+\.\d+\.\d+(\.rc\d+)?"/, "spec.version = \"#{version}\"")
19
- warn 'Failed to update version in openvox.gemspec' if data == new_data
20
-
21
- File.write('openvox.gemspec', new_data)
22
16
  end
23
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openvox
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.22.0
4
+ version: 8.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenVox Project
@@ -86,7 +86,7 @@ dependencies:
86
86
  version: '2.1'
87
87
  - - "<"
88
88
  - !ruby/object:Gem::Version
89
- version: '4'
89
+ version: '5'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
@@ -96,7 +96,7 @@ dependencies:
96
96
  version: '2.1'
97
97
  - - "<"
98
98
  - !ruby/object:Gem::Version
99
- version: '4'
99
+ version: '5'
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: getoptlong
102
102
  requirement: !ruby/object:Gem::Requirement
@@ -1332,6 +1332,10 @@ files:
1332
1332
  - man/man8/puppet-script.8
1333
1333
  - man/man8/puppet-ssl.8
1334
1334
  - man/man8/puppet.8
1335
+ - tasks/build.rake
1336
+ - tasks/cleanup.rake
1337
+ - tasks/promote.rake
1338
+ - tasks/upload.rake
1335
1339
  - tasks/vox.rake
1336
1340
  homepage: https://github.com/OpenVoxProject/puppet
1337
1341
  licenses: