From 650f50d32a8f78642be644cbe00dd7ac10199c81 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Thu, 8 Dec 2022 11:51:49 -0800 Subject: [PATCH 1/4] (FACT-3147) Updates minimum Ruby version to 2.5 This commit replaces all instances in which Ruby 2.3 or 2.4 are referenced with Ruby 2.5 and sets Ruby 2.5 as the minimum Ruby version in the Gemspec and other relevant locations. --- .github/workflows/unit_tests.yaml | 2 +- README.md | 2 +- agent/facter-ng.gemspec | 2 +- ext/project_data.yaml | 2 +- facter.gemspec | 2 +- spec/facter/facts/aix/ruby/version_spec.rb | 2 +- .../facter/facts/freebsd/ruby/version_spec.rb | 2 +- spec/facter/facts/linux/ruby/version_spec.rb | 2 +- spec/facter/facts/macosx/ruby/version_spec.rb | 2 +- .../facter/facts/solaris/ruby/version_spec.rb | 2 +- .../facter/facts/windows/ruby/version_spec.rb | 2 +- spec/facter/util/file_helper_spec.rb | 36 +++++-------------- 12 files changed, 20 insertions(+), 38 deletions(-) diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml index d80f42a215..240d8e31dc 100644 --- a/.github/workflows/unit_tests.yaml +++ b/.github/workflows/unit_tests.yaml @@ -18,7 +18,7 @@ jobs: strategy: matrix: ruby: - - '2.3' + - '2.5' - '2.7' - '3.0' - '3.2.0-preview2' diff --git a/README.md b/README.md index 08c45d0fde..500caf70f8 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ site](https://puppet.com/docs/puppet/latest/facter.html). * AIX ## Requirements -* Ruby 2.3+ +* Ruby 2.5+ * FFI (for facts like `mountpoints` which are resolved using C API calls) ## Basic concepts diff --git a/agent/facter-ng.gemspec b/agent/facter-ng.gemspec index d28cff780c..f8fe5f564d 100644 --- a/agent/facter-ng.gemspec +++ b/agent/facter-ng.gemspec @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| spec.files = dirs.map { |path| path.sub(base, '') } - spec.required_ruby_version = '>= 2.3', '< 4.0' + spec.required_ruby_version = '>= 2.5', '< 4.0' spec.bindir = 'bin' spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } diff --git a/ext/project_data.yaml b/ext/project_data.yaml index 0d8f358d3b..6d7f99fd1d 100644 --- a/ext/project_data.yaml +++ b/ext/project_data.yaml @@ -12,7 +12,7 @@ gem_require_path: 'lib' gem_executables: 'facter' gem_license: 'Apache-2.0' gem_default_executables: 'facter' -gem_required_ruby_version: ['>= 2.3', '< 4.0'] +gem_required_ruby_version: ['>= 2.5', '< 4.0'] gem_runtime_dependencies: hocon: ~> 1.3 thor: ['>= 1.0.1', '< 2.0'] diff --git a/facter.gemspec b/facter.gemspec index 5f7fa32d5c..bd2a6286de 100644 --- a/facter.gemspec +++ b/facter.gemspec @@ -24,7 +24,7 @@ Gem::Specification.new do |spec| base = "#{__dir__}#{File::SEPARATOR}" spec.files = dirs.map { |path| path.sub(base, '') } - spec.required_ruby_version = '>= 2.3', '< 4.0' + spec.required_ruby_version = '>= 2.5', '< 4.0' spec.bindir = 'bin' spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.require_paths = ['lib'] diff --git a/spec/facter/facts/aix/ruby/version_spec.rb b/spec/facter/facts/aix/ruby/version_spec.rb index 336f7415b2..f88c5a73d4 100644 --- a/spec/facter/facts/aix/ruby/version_spec.rb +++ b/spec/facter/facts/aix/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Aix::Ruby::Version.new } - let(:value) { '2.4.5' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/facts/freebsd/ruby/version_spec.rb b/spec/facter/facts/freebsd/ruby/version_spec.rb index aa67501964..ef47761f49 100644 --- a/spec/facter/facts/freebsd/ruby/version_spec.rb +++ b/spec/facter/facts/freebsd/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Freebsd::Ruby::Version.new } - let(:value) { '2.4.5' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/facts/linux/ruby/version_spec.rb b/spec/facter/facts/linux/ruby/version_spec.rb index 868b6c50f9..3005724a53 100644 --- a/spec/facter/facts/linux/ruby/version_spec.rb +++ b/spec/facter/facts/linux/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Linux::Ruby::Version.new } - let(:value) { '2.4.5' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/facts/macosx/ruby/version_spec.rb b/spec/facter/facts/macosx/ruby/version_spec.rb index 98af9a8f33..ede02ee5f2 100644 --- a/spec/facter/facts/macosx/ruby/version_spec.rb +++ b/spec/facter/facts/macosx/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Macosx::Ruby::Version.new } - let(:value) { '2.4.5' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/facts/solaris/ruby/version_spec.rb b/spec/facter/facts/solaris/ruby/version_spec.rb index 606c6cb5a6..0ebe48d90a 100644 --- a/spec/facter/facts/solaris/ruby/version_spec.rb +++ b/spec/facter/facts/solaris/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Solaris::Ruby::Version.new } - let(:value) { '2.4.5' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/facts/windows/ruby/version_spec.rb b/spec/facter/facts/windows/ruby/version_spec.rb index 9ecfb0463d..531103c5f7 100644 --- a/spec/facter/facts/windows/ruby/version_spec.rb +++ b/spec/facter/facts/windows/ruby/version_spec.rb @@ -4,7 +4,7 @@ describe '#call_the_resolver' do subject(:fact) { Facts::Windows::Ruby::Version.new } - let(:value) { '2.5.7' } + let(:value) { '2.5.9' } before do allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value) diff --git a/spec/facter/util/file_helper_spec.rb b/spec/facter/util/file_helper_spec.rb index 325abf98e5..ee56b496c3 100644 --- a/spec/facter/util/file_helper_spec.rb +++ b/spec/facter/util/file_helper_spec.rb @@ -98,36 +98,18 @@ end describe '#dir_children' do - context 'with ruby < 2.5' do - before do - allow(Dir).to receive(:entries).with(File.dirname(path)).and_return(entries + ['.', '..']) - stub_const('RUBY_VERSION', '2.4.5') - end - - it 'delegates to Dir.entries' do - file_helper.dir_children(File.dirname(path)) - expect(Dir).to have_received(:entries) - end - - it 'correctly resolves entries' do - expect(file_helper.dir_children(File.dirname(path))).to eq(entries) - end + before do + allow(Dir).to receive(:children).with(File.dirname(path)).and_return(entries) + stub_const('RUBY_VERSION', '2.5.9') end - context 'with ruby >= 2.5', if: RUBY_VERSION.to_f >= 2.5 do - before do - allow(Dir).to receive(:children).with(File.dirname(path)).and_return(entries) - stub_const('RUBY_VERSION', '2.5.1') - end - - it 'delegates to Dir.children' do - file_helper.dir_children(File.dirname(path)) - expect(Dir).to have_received(:children) - end + it 'delegates to Dir.children' do + file_helper.dir_children(File.dirname(path)) + expect(Dir).to have_received(:children) + end - it 'correctly resolves entries' do - expect(file_helper.dir_children(File.dirname(path))).to eq(entries) - end + it 'correctly resolves entries' do + expect(file_helper.dir_children(File.dirname(path))).to eq(entries) end end From d00c301d551518bab02236a42571cd99ce584b89 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Thu, 8 Dec 2022 11:55:27 -0800 Subject: [PATCH 2/4] (packaging) Bump to version '4.3.0' [no-promote] Due to increasing the minimum Ruby version to Ruby 2.5, this commit sets the next Facter release version to the next minor/Y version, 4.3.0. --- agent/facter-ng.gemspec | 2 +- facter.gemspec | 2 +- lib/facter/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/facter-ng.gemspec b/agent/facter-ng.gemspec index f8fe5f564d..4d9ccdb429 100644 --- a/agent/facter-ng.gemspec +++ b/agent/facter-ng.gemspec @@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) Gem::Specification.new do |spec| spec.name = 'facter-ng' - spec.version = '4.2.15' + spec.version = '4.3.0' spec.authors = ['Puppet'] spec.email = ['team-nw@puppet.com'] spec.homepage = 'https://github.com/puppetlabs/facter' diff --git a/facter.gemspec b/facter.gemspec index bd2a6286de..6f7d683f89 100644 --- a/facter.gemspec +++ b/facter.gemspec @@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) Gem::Specification.new do |spec| spec.name = 'facter' - spec.version = '4.2.15' + spec.version = '4.3.0' spec.authors = ['Puppet'] spec.email = ['team-nw@puppet.com'] spec.homepage = 'https://github.com/puppetlabs/facter' diff --git a/lib/facter/version.rb b/lib/facter/version.rb index 9fc96062d2..deb16e005f 100644 --- a/lib/facter/version.rb +++ b/lib/facter/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Facter - VERSION = '4.2.15' unless defined?(VERSION) + VERSION = '4.3.0' unless defined?(VERSION) end From 8e9a6703b1309390fc4ac111179ef8c55522b878 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Thu, 8 Dec 2022 15:02:06 -0800 Subject: [PATCH 3/4] (maint) Modifies pending test conditional An issue with earlier versions of timecop caused the 'when yaml contains Date formatted fields' test to fail with the version of Psych included with Ruby 3.2.0. With the release of timecop 0.9.6, this issue has been resolved and we can remove the test from its conditial pending state when that version of timecop is present. --- spec/custom_facts/util/parser_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/custom_facts/util/parser_spec.rb b/spec/custom_facts/util/parser_spec.rb index e634b00251..44df772c0d 100755 --- a/spec/custom_facts/util/parser_spec.rb +++ b/spec/custom_facts/util/parser_spec.rb @@ -354,7 +354,9 @@ def expects_to_parse_powershell(cmd, result) let(:yaml_content) { load_fixture('external_fact_yaml_date').read } it 'loads date' do - pending 'There is a bug in newer versions of Psych and Timecop' if RUBY_VERSION =~ /^3\.2/ + if RUBY_VERSION.to_f == 3.2 && Gem::Version.new(Timecop::VERSION) < Gem::Version.new('0.9.6') + pending 'There is a bug in newer versions of Psych and timecop' + end expected_result = { 'testsfact' => { 'date' => Date.parse('2020-04-28') } } expect(yaml_parser.parse_results).to eq(expected_result) From 37d0f59b98a3b8ff64e7eb995c4a0334fd431dd6 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Thu, 8 Dec 2022 16:45:49 -0800 Subject: [PATCH 4/4] (maint) Hardcodes Ubuntu 20.04 GHA runners The ubuntu-latest GitHub Actions runner currently translates to Ubuntu 20.04, but will migrate to 22.04 next year: https://github.com/actions/runner-images/issues/6399 Because platform translation is necessary in the presuit.rb file, this commit changes all instances of "ubuntu-latest" in our GitHub Actions configuration to "ubuntu-20.04". --- .github/actions/presuite.rb | 2 +- .github/workflows/acceptance_tests.yml | 2 +- .github/workflows/checks.yaml | 6 +++--- .github/workflows/coverage.yaml | 2 +- .github/workflows/snyk_monitor.yaml | 2 +- .github/workflows/unit_tests.yaml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/actions/presuite.rb b/.github/actions/presuite.rb index 526a74bd48..6b24b59486 100644 --- a/.github/actions/presuite.rb +++ b/.github/actions/presuite.rb @@ -31,7 +31,7 @@ def initialize_beaker def beaker_platform { - 'ubuntu-latest' => 'ubuntu2004-64a', + 'ubuntu-20.04' => 'ubuntu2004-64a', 'macos-latest' => 'osx11-64a', 'windows-2016' => 'windows2016-64a', 'windows-2019' => 'windows2019-64a' diff --git a/.github/workflows/acceptance_tests.yml b/.github/workflows/acceptance_tests.yml index 032fc8f1a0..7a26942346 100644 --- a/.github/workflows/acceptance_tests.yml +++ b/.github/workflows/acceptance_tests.yml @@ -14,7 +14,7 @@ jobs: name: Platform strategy: matrix: - os: [ windows-2019, ubuntu-latest, macos-latest ] + os: [ windows-2019, ubuntu-20.04, macos-latest ] runs-on: ${{ matrix.os }} env: BEAKER_debug: true diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index 37e100dd94..dfbae1bbef 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -11,7 +11,7 @@ on: jobs: rubocop_checks: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 name: RuboCop steps: - name: Checkout current PR @@ -25,7 +25,7 @@ jobs: - run: bundle exec rubocop --parallel rtc: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 name: RuboCop TODO steps: - uses: actions/checkout@v1 @@ -38,7 +38,7 @@ jobs: FORCE_ERROR_EXIT: true commit_checks: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 name: commit message steps: - name: Checkout current PR diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index b3ff67ef71..8be2727e6f 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -8,7 +8,7 @@ on: jobs: coverage_checks: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 name: coverage steps: - name: Checkout current PR diff --git a/.github/workflows/snyk_monitor.yaml b/.github/workflows/snyk_monitor.yaml index 9e3cc58de4..aca93b0ee3 100644 --- a/.github/workflows/snyk_monitor.yaml +++ b/.github/workflows/snyk_monitor.yaml @@ -7,7 +7,7 @@ on: jobs: snyk_monitor: if: ${{ github.repository_owner == 'puppetlabs' }} - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 name: Snyk Monitor steps: - name: Checkout current PR diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml index 240d8e31dc..19630fd988 100644 --- a/.github/workflows/unit_tests.yaml +++ b/.github/workflows/unit_tests.yaml @@ -23,7 +23,7 @@ jobs: - '3.0' - '3.2.0-preview2' - 'jruby-9.3.7.0' - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Checkout current PR uses: actions/checkout@v2