diff options
-rw-r--r-- | .expeditor/verify.pipeline.yml | 104 | ||||
-rw-r--r-- | Gemfile | 6 | ||||
-rw-r--r-- | Gemfile.lock | 95 | ||||
-rw-r--r-- | azure-pipelines.yml | 3 | ||||
-rw-r--r-- | chef.gemspec | 2 | ||||
-rw-r--r-- | habitat/plan.sh | 8 | ||||
-rw-r--r-- | kitchen-tests/kitchen.yml | 6 | ||||
-rw-r--r-- | lib/chef/application/base.rb | 2 | ||||
-rw-r--r-- | lib/chef/client.rb | 4 | ||||
-rw-r--r-- | lib/chef/node/attribute.rb | 6 | ||||
-rw-r--r-- | lib/chef/provider/package/rubygems.rb | 3 | ||||
-rw-r--r-- | post-bundle-install.rb | 27 | ||||
-rw-r--r-- | spec/data/rubygems.org/nonexistent_gem-info | 1 | ||||
-rw-r--r-- | spec/data/rubygems.org/sexp_processor-info | 49 | ||||
-rw-r--r-- | spec/functional/resource/chocolatey_package_spec.rb | 13 | ||||
-rw-r--r-- | spec/unit/application/solo_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/data_bag_item_spec.rb | 7 | ||||
-rw-r--r-- | spec/unit/node/attribute_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/provider/package/rubygems_spec.rb | 28 |
19 files changed, 186 insertions, 182 deletions
diff --git a/.expeditor/verify.pipeline.yml b/.expeditor/verify.pipeline.yml index 041a5c3269..b2f19efa8b 100644 --- a/.expeditor/verify.pipeline.yml +++ b/.expeditor/verify.pipeline.yml @@ -38,10 +38,10 @@ steps: image: rubydistros/ubuntu-18.04:2.6 ######################################################################### - # Tests Ruby 2.7 + # Tests Ruby 3.0 ######################################################################### -- label: "Chefstyle :ruby: 2.7" +- label: "Chefstyle :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package ruby_prof @@ -49,9 +49,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "Integration Ubuntu 18.04 :ruby: 2.7" +- label: "Integration Ubuntu 18.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - cd /workdir; bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -59,10 +59,10 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 privileged: true -- label: "Functional Ubuntu 18.04 :ruby: 2.7" +- label: "Functional Ubuntu 18.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - apt-get update -y @@ -72,10 +72,10 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 privileged: true -- label: "Unit Ubuntu 18.04 :ruby: 2.7" +- label: "Unit Ubuntu 18.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package ruby_prof @@ -84,9 +84,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "Integration Ubuntu 20.04 :ruby: 2.7" +- label: "Integration Ubuntu 20.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - cd /workdir; bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -94,10 +94,10 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-20.04:2.7 + image: rubydistros/ubuntu-20.04:3.0 privileged: true -- label: "Functional Ubuntu 20.04 :ruby: 2.7" +- label: "Functional Ubuntu 20.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - apt-get update -y @@ -107,10 +107,10 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-20.04:2.7 + image: rubydistros/ubuntu-20.04:3.0 privileged: true -- label: "Unit Ubuntu 20.04 :ruby: 2.7" +- label: "Unit Ubuntu 20.04 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package ruby_prof @@ -119,9 +119,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-20.04:2.7 + image: rubydistros/ubuntu-20.04:3.0 -- label: "Integration CentOS 7 :ruby: 2.7" +- label: "Integration CentOS 7 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - cd /workdir; bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -129,10 +129,10 @@ steps: expeditor: executor: docker: - image: rubydistros/centos-7:2.7 + image: rubydistros/centos-7:3.0 privileged: true -- label: "Functional CentOS 7 :ruby: 2.7" +- label: "Functional CentOS 7 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - yum install -y crontabs e2fsprogs @@ -141,10 +141,10 @@ steps: expeditor: executor: docker: - image: rubydistros/centos-7:2.7 + image: rubydistros/centos-7:3.0 privileged: true -- label: "Unit CentOS 7 :ruby: 2.7" +- label: "Unit CentOS 7 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package ruby_prof @@ -153,9 +153,9 @@ steps: expeditor: executor: docker: - image: rubydistros/centos-7:2.7 + image: rubydistros/centos-7:3.0 -- label: "Integration openSUSE 15 :ruby: 2.7" +- label: "Integration openSUSE 15 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - zypper install -y cron insserv-compat @@ -164,10 +164,10 @@ steps: expeditor: executor: docker: - image: rubydistros/opensuse-15:2.7 + image: rubydistros/opensuse-15:3.0 privileged: true -- label: "Functional openSUSE 15 :ruby: 2.7" +- label: "Functional openSUSE 15 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - zypper install -y cronie insserv-compat @@ -176,10 +176,10 @@ steps: expeditor: executor: docker: - image: rubydistros/opensuse-15:2.7 + image: rubydistros/opensuse-15:3.0 privileged: true -- label: "Unit openSUSE 15 :ruby: 2.7" +- label: "Unit openSUSE 15 :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - zypper install -y cron insserv-compat @@ -189,9 +189,9 @@ steps: expeditor: executor: docker: - image: rubydistros/opensuse-15:2.7 + image: rubydistros/opensuse-15:3.0 -- label: "Integration Fedora :ruby: 2.7" +- label: "Integration Fedora :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - cd /workdir; bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -199,10 +199,10 @@ steps: expeditor: executor: docker: - image: rubydistros/fedora-latest:2.7 + image: rubydistros/fedora-latest:3.0 privileged: true -- label: "Functional Fedora :ruby: 2.7" +- label: "Functional Fedora :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - dnf install -y crontabs e2fsprogs @@ -211,13 +211,13 @@ steps: expeditor: executor: docker: - image: rubydistros/fedora-latest:2.7 + image: rubydistros/fedora-latest:3.0 privileged: true environment: - FORCE_FFI_YAJL=ext - CHEF_LICENSE=accept-no-persist -- label: "Unit Fedora :ruby: 2.7" +- label: "Unit Fedora :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package ruby_prof @@ -226,9 +226,9 @@ steps: expeditor: executor: docker: - image: rubydistros/fedora-latest:2.7 + image: rubydistros/fedora-latest:3.0 -- label: "Functional Windows :ruby: 2.7" +- label: "Functional Windows :ruby: 3.0" commands: - .expeditor/scripts/bk_win_functional.ps1 expeditor: @@ -238,37 +238,37 @@ steps: single-use: true shell: ["powershell", "-Command"] -- label: "Integration Windows :ruby: 2.7" +- label: "Integration Windows :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_win_integration.ps1 expeditor: executor: docker: host_os: windows - image: rubydistros/windows-2019:2.7 + image: rubydistros/windows-2019:3.0 environment: - FORCE_FFI_YAJL=ext - CHEF_LICENSE=accept-no-persist shell: ["powershell", "-Command"] -- label: "Chocolatey Windows :ruby: 2.7" +- label: "Chocolatey Windows :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_run_choco.ps1 expeditor: executor: docker: host_os: windows - image: rubydistros/windows-2019:2.7 + image: rubydistros/windows-2019:3.0 shell: ["powershell", "-Command"] -- label: "Unit Windows :ruby: 2.7" +- label: "Unit Windows :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_win_unit.ps1 expeditor: executor: docker: host_os: windows - image: rubydistros/windows-2019:2.7 + image: rubydistros/windows-2019:3.0 environment: - FORCE_FFI_YAJL=ext - CHEF_LICENSE=accept-no-persist @@ -278,7 +278,7 @@ steps: # EXTERNAL GEM TESTING ######################################################################### -- label: "chef-sugar gem :ruby: 2.7" +- label: "chef-sugar gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -286,9 +286,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "chef-zero gem :ruby: 2.7" +- label: "chef-zero gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -296,12 +296,12 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 environment: - PEDANT_OPTS=--skip-oc_id - CHEF_FS=true -- label: "cheffish gem :ruby: 2.7" +- label: "cheffish gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -309,9 +309,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "chefspec gem :ruby: 2.7" +- label: "chefspec gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -319,9 +319,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "knife-windows gem :ruby: 2.7" +- label: "knife-windows gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - bundle install --jobs=3 --retry=3 --path=vendor/bundle --without omnibus_package @@ -329,9 +329,9 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 -- label: "berkshelf gem :ruby: 2.7" +- label: "berkshelf gem :ruby: 3.0" commands: - /workdir/.expeditor/scripts/bk_container_prep.sh - apt-get update -y @@ -341,7 +341,7 @@ steps: expeditor: executor: docker: - image: rubydistros/ubuntu-18.04:2.7 + image: rubydistros/ubuntu-18.04:3.0 ######################################################################### # START TEST KITCHEN ONLY @@ -39,13 +39,13 @@ end # Everything except AIX group(:ruby_prof) do - # ruby-prof 1.3.0 does not compile on our centos6 builders/kitchen testers - gem "ruby-prof", "< 1.3.0" + gem "ruby-prof" end # Everything except AIX and Windows group(:ruby_shadow) do - gem "ruby-shadow", platforms: :ruby + # if ruby-shadow does a release that supports ruby-3.0 this can be removed + gem "ruby-shadow", git: "https://github.com/chef/ruby-shadow", branch: "lcg/ruby-3.0", platforms: :ruby end group(:development, :test) do diff --git a/Gemfile.lock b/Gemfile.lock index 1404971446..2d28c2fd1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -25,6 +25,13 @@ GIT train-core wmi-lite (~> 1.0) +GIT + remote: https://github.com/chef/ruby-shadow + revision: ba25b9349b649435726f1869987657997633c1fb + branch: lcg/ruby-3.0 + specs: + ruby-shadow (2.5.0) + PATH remote: . specs: @@ -38,49 +45,12 @@ PATH diff-lcs (>= 1.2.4, < 1.4.0) ed25519 (~> 1.2) erubis (~> 2.7) - ffi (>= 1.9.25) - ffi-libarchive (~> 1.0, >= 1.0.3) - ffi-yajl (~> 2.2) - highline (>= 1.6.9, < 3) - iniparse (~> 1.4) - inspec-core (~> 4.23) - license-acceptance (>= 1.0.5, < 3) - mixlib-archive (>= 0.4, < 2.0) - mixlib-authentication (>= 2.1, < 4) - mixlib-cli (>= 2.1.1, < 3.0) - mixlib-log (>= 2.0.3, < 4.0) - mixlib-shellout (>= 3.1.1, < 4.0) - net-sftp (>= 2.1.2, < 4.0) - net-ssh (>= 5.1, < 7) - net-ssh-multi (~> 1.2, >= 1.2.1) - ohai (~> 17.0) - pastel - plist (~> 3.2) - proxifier (~> 1.0) - syslog-logger (~> 1.6) - train-core (~> 3.2, >= 3.2.28) - train-winrm (>= 0.2.5) - tty-prompt (~> 0.21) - tty-screen (~> 0.6) - tty-table (~> 0.11) - uuidtools (>= 2.1.5, < 3.0) - chef (17.0.158-universal-mingw32) - addressable - bcrypt_pbkdf (~> 1.1) - chef-config (= 17.0.158) - chef-utils (= 17.0.158) - chef-vault - chef-zero (>= 14.0.11) - diff-lcs (>= 1.2.4, < 1.4.0) - ed25519 (~> 1.2) - erubis (~> 2.7) - ffi (>= 1.9.25) + ffi (>= 1.5.0) ffi-libarchive (~> 1.0, >= 1.0.3) ffi-yajl (~> 2.2) highline (>= 1.6.9, < 3) iniparse (~> 1.4) inspec-core (~> 4.23) - iso8601 (>= 0.12.1, < 0.14) license-acceptance (>= 1.0.5, < 3) mixlib-archive (>= 0.4, < 2.0) mixlib-authentication (>= 2.1, < 4) @@ -101,16 +71,6 @@ PATH tty-screen (~> 0.6) tty-table (~> 0.11) uuidtools (>= 2.1.5, < 3.0) - win32-api (~> 1.5.3) - win32-certstore (~> 0.5.0) - win32-event (~> 0.6.1) - win32-eventlog (= 0.6.3) - win32-mmap (~> 0.4.1) - win32-mutex (~> 0.4.2) - win32-process (~> 0.9) - win32-service (>= 2.1.5, < 3.0) - win32-taskscheduler (~> 2.0) - wmi-lite (~> 1.0) PATH remote: chef-bin @@ -187,8 +147,6 @@ GEM ffi (1.15.0-x86-mingw32) ffi-libarchive (1.0.17) ffi (~> 1.0) - ffi-win32-extensions (1.0.4) - ffi ffi-yajl (2.3.4) libyajl2 (~> 1.2) fuzzyurl (0.9.0) @@ -227,7 +185,6 @@ GEM inspec-core-bin (4.26.13) inspec-core (= 4.26.13) ipaddress (0.8.3) - iso8601 (0.13.0) json (2.5.1) libyajl2 (1.2.0) license-acceptance (2.1.13) @@ -251,11 +208,6 @@ GEM mixlib-log (3.0.9) mixlib-shellout (3.2.5) chef-utils - mixlib-shellout (3.2.5-universal-mingw32) - chef-utils - ffi-win32-extensions (~> 1.0.3) - win32-process (~> 0.9) - wmi-lite (~> 1.0) multi_json (1.15.0) multipart-post (2.1.1) net-scp (3.0.0) @@ -322,7 +274,6 @@ GEM parser (>= 2.7.1.5) ruby-prof (1.2.0) ruby-progressbar (1.11.0) - ruby-shadow (2.5.0) ruby2_keywords (0.0.4) rubyntlm (0.6.3) rubyzip (2.3.0) @@ -333,7 +284,6 @@ GEM unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) - structured_warnings (0.4.0) syslog-logger (1.6.8) thor (1.1.0) tomlrb (1.3.0) @@ -374,28 +324,6 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) webrick (1.7.0) - win32-api (1.5.3-universal-mingw32) - win32-certstore (0.5.3) - ffi - mixlib-shellout - win32-event (0.6.3) - win32-ipc (>= 0.6.0) - win32-eventlog (0.6.3) - ffi - win32-ipc (0.7.0) - ffi - win32-mmap (0.4.2) - ffi - win32-mutex (0.4.3) - win32-ipc (>= 0.6.0) - win32-process (0.9.0) - ffi (>= 1.0.0) - win32-service (2.2.0) - ffi - ffi-win32-extensions - win32-taskscheduler (2.0.4) - ffi - structured_warnings winrm (2.3.6) builder (>= 2.1.2) erubi (~> 1.8) @@ -421,6 +349,7 @@ PLATFORMS ruby x64-mingw32 x86-mingw32 + x86_64-darwin-18 DEPENDENCIES appbundler @@ -441,9 +370,9 @@ DEPENDENCIES rake rb-readline rspec - ruby-prof (< 1.3.0) - ruby-shadow + ruby-prof + ruby-shadow! webmock BUNDLED WITH - 2.1.4 + 2.2.14 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7128e6361c..b2f3acbf8c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -24,6 +24,7 @@ jobs: steps: - script: | + brew install coreutils curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -c current /opt/chef/bin/chef-client -v /opt/chef/bin/ohai -v @@ -34,7 +35,6 @@ jobs: - script: | OHAI_VERSION=$(sed -n '/ohai .[0-9]/{s/.*(//;s/)//;p;}' Gemfile.lock) sudo /opt/chef/embedded/bin/gem install appbundler appbundle-updater --no-doc - sudo /opt/chef/embedded/bin/appbundle-updater chef ohai v${OHAI_VERSION} --tarball --github chef/ohai sudo /opt/chef/embedded/bin/appbundle-updater chef chef $BUILD_SOURCEVERSION --tarball --github chef/chef echo "Installed Chef / Ohai release:" /opt/chef/bin/chef-client -v @@ -70,7 +70,6 @@ jobs: $env:PATH = "C:\opscode\chef\bin;C:\opscode\chef\embedded\bin;" + $env:PATH $env:OHAI_VERSION = ( Select-String -Path .\Gemfile.lock -Pattern '(?<=ohai \()\d.*(?=\))' | ForEach-Object { $_.Matches[0].Value } ) gem install appbundler appbundle-updater --no-doc - appbundle-updater chef ohai v$env:OHAI_VERSION --tarball --github chef/ohai appbundle-updater chef chef $env:BUILD_SOURCEVERSION --tarball --github chef/chef Write-Output "Installed Chef / Ohai release:" chef-client -v diff --git a/chef.gemspec b/chef.gemspec index 4f05de47a9..a5e2b5a8dd 100644 --- a/chef.gemspec +++ b/chef.gemspec @@ -38,7 +38,7 @@ Gem::Specification.new do |s| s.add_dependency "ohai", "~> 17.0" s.add_dependency "inspec-core", "~> 4.23" - s.add_dependency "ffi", ">= 1.9.25" + s.add_dependency "ffi", ">= 1.5.0" s.add_dependency "ffi-yajl", "~> 2.2" s.add_dependency "net-ssh", ">= 5.1", "< 7" s.add_dependency "net-ssh-multi", "~> 1.2", ">= 1.2.1" diff --git a/habitat/plan.sh b/habitat/plan.sh index 64f424dfac..50868b1a3e 100644 --- a/habitat/plan.sh +++ b/habitat/plan.sh @@ -94,14 +94,10 @@ do_build() { ( cd "$CACHE_PATH" || exit_with "unable to enter hab-cache directory" 1 build_line "Installing gem dependencies ..." bundle install --jobs=3 --retry=3 + build_line "Installing gems from git repos properly ..." + ruby ./post-bundle-install.rb build_line "Installing this project's gems ..." bundle exec rake install - for gem in $GEM_HOME/bundler/gems/*; do - ( cd $gem - build_line "Installing gems from git repos properly ..." - rake install - ) - done ) } diff --git a/kitchen-tests/kitchen.yml b/kitchen-tests/kitchen.yml index 8e894c4699..9c3a3a36cf 100644 --- a/kitchen-tests/kitchen.yml +++ b/kitchen-tests/kitchen.yml @@ -21,15 +21,9 @@ lifecycle: - remote: /opt/chef/bin/chef-client -v - remote: /opt/chef/bin/ohai -v - remote: /opt/chef/embedded/bin/gem install appbundler appbundle-updater --no-doc - - remote: scl enable devtoolset-8 '/opt/chef/embedded/bin/appbundle-updater chef ohai <%= File.readlines('../Gemfile.lock', File.expand_path(File.dirname(__FILE__))).find { |l| l =~ /^\s+ohai \((\d+\.\d+\.\d+)\)/ }; 'v' + $1 %> --tarball --github chef/ohai' - includes: - - centos-6 - remote: scl enable devtoolset-8 '/opt/chef/embedded/bin/appbundle-updater chef chef <%= ENV['BUILDKITE_COMMIT'] || %x(git rev-parse HEAD).chomp %> --tarball --github chef/chef' includes: - centos-6 - - remote: /opt/chef/embedded/bin/appbundle-updater chef ohai <%= File.readlines('../Gemfile.lock', File.expand_path(File.dirname(__FILE__))).find { |l| l =~ /^\s+ohai \((\d+\.\d+\.\d+)\)/ }; 'v' + $1 %> --tarball --github chef/ohai - excludes: - - centos-6 - remote: /opt/chef/embedded/bin/appbundle-updater chef chef <%= ENV['BUILDKITE_COMMIT'] || %x(git rev-parse HEAD).chomp %> --tarball --github chef/chef excludes: - centos-6 diff --git a/lib/chef/application/base.rb b/lib/chef/application/base.rb index ad8e8b69c2..450fd7673b 100644 --- a/lib/chef/application/base.rb +++ b/lib/chef/application/base.rb @@ -368,7 +368,7 @@ class Chef::Application::Base < Chef::Application FileUtils.cp(url, path) elsif URI::DEFAULT_PARSER.make_regexp.match?(url) File.open(path, "wb") do |f| - open(url) do |r| + URI.open(url) do |r| f.write(r.read) end end diff --git a/lib/chef/client.rb b/lib/chef/client.rb index 094b59fc35..54d2a95ba3 100644 --- a/lib/chef/client.rb +++ b/lib/chef/client.rb @@ -858,8 +858,8 @@ class Chef def profiling_prereqs! require "ruby-prof" - rescue LoadError - raise "You must have the ruby-prof gem installed in order to use --profile-ruby" + rescue LoadError => e + raise "You must have the ruby-prof gem installed in order to use --profile-ruby: #{e.message}" end def start_profiling diff --git a/lib/chef/node/attribute.rb b/lib/chef/node/attribute.rb index 3383b3c7e5..6a8e72004b 100644 --- a/lib/chef/node/attribute.rb +++ b/lib/chef/node/attribute.rb @@ -158,8 +158,10 @@ class Chef }.freeze ENUM_METHODS.each do |delegated_method| - define_method(delegated_method) do |*args, &block| - merged_attributes.send(delegated_method, *args, &block) + if Hash.public_method_defined?(delegated_method) + define_method(delegated_method) do |*args, &block| + merged_attributes.send(delegated_method, *args, &block) + end end end diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb index a0b569b8e3..e427cc0d24 100644 --- a/lib/chef/provider/package/rubygems.rb +++ b/lib/chef/provider/package/rubygems.rb @@ -189,7 +189,8 @@ class Chef begin rs = dependency_installer.resolve_dependencies gem_dependency.name, gem_dependency.requirement rs.specs.find { |s| s.name == gem_dependency.name } - rescue Gem::UnsatisfiableDependencyError + # ruby-3.0.0 versions of rubygems-3.x throws NoMethodError when the dep is not found + rescue Gem::UnsatisfiableDependencyError, NoMethodError nil end end diff --git a/post-bundle-install.rb b/post-bundle-install.rb new file mode 100644 index 0000000000..f0db5d50b0 --- /dev/null +++ b/post-bundle-install.rb @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +gem_home = Gem.paths.home + +puts "fixing bundle installed gems in #{gem_home}" + +# Install gems from git repos. This makes the assumption that there is a <gem_name>.gemspec and +# you can simply gem build + gem install the resulting gem, so nothing fancy. This does not use +# rake install since we need --conservative --minimal-deps in order to not install duplicate gems. +# +Dir["#{gem_home}/bundler/gems/*"].each do |gempath| + matches = File.basename(gempath).match(/(.*)-[A-Fa-f0-9]{12}/) + next unless matches + + gem_name = matches[1] + next unless gem_name + + puts "re-installing #{gem_name}..." + + # we can't use "commmand" or "bundle" or "gem" DSL methods here since those are lazy and we need to run commands immediately + # (this is like a shell_out inside of a ruby_block in core chef, you don't use an execute resource inside of a ruby_block or + # things get really weird and unexpected) + Dir.chdir(gempath) do + system("gem build #{gem_name}.gemspec") or raise "gem build failed" + system("gem install #{gem_name}*.gem --conservative --minimal-deps --no-document") or raise "gem install failed" + end +end diff --git a/spec/data/rubygems.org/nonexistent_gem-info b/spec/data/rubygems.org/nonexistent_gem-info new file mode 100644 index 0000000000..7e88a0e205 --- /dev/null +++ b/spec/data/rubygems.org/nonexistent_gem-info @@ -0,0 +1 @@ +This gem could not be found
\ No newline at end of file diff --git a/spec/data/rubygems.org/sexp_processor-info b/spec/data/rubygems.org/sexp_processor-info new file mode 100644 index 0000000000..78add7f2fa --- /dev/null +++ b/spec/data/rubygems.org/sexp_processor-info @@ -0,0 +1,49 @@ +--- +3.0.0 |checksum:ff9abf0d904ba57b9654352b396aa28cf6ad5315af99d8bbf664f5ff6efd3a5d +3.0.1 |checksum:d012a759dc6950dcda667a359051c2e62e4bd19790aeed698a5e47d013ef3ae7 +3.0.2 |checksum:ba85e835493e6099c2f52937b77ce518d65af39409befdd9b43927c0a604ed87 +3.0.3 |checksum:a433b01d821f5e81200fbec77fc26a1ecb186ad7d8e40d19ed34ea295287170a +3.0.4 |checksum:5f394545863d5abe5c3f53c3b883128f58900cd792504076a765b53c9a49f10a +3.0.5 |checksum:8e06c84ed3a0159a0f2e6f7b10bbd056954ac2d33548318ccc3088556c8a8891 +3.0.6 |checksum:e6e0f30ff14b73b28f8e5803646aa6d2ed81b3b239e76815fd8160ea4121c650 +3.0.7 |checksum:7647c24bbebea0ef57a892953fc96349091924a399ee5d98f41da5d9db484816 +3.0.8 |checksum:6c8ff89feab635e332e115356451614a16d171485e34b6b30a6dea243caaaed7 +3.0.9 |checksum:b55c35100f5e1e191ff67eac8667aea9433d1492697c9434cdb35550cf6e4dd0 +3.0.10 |checksum:e168db8d4eccfc721685d939654698f1b419f018f45e38d17ab40033102987f4 +3.1.0 |checksum:3d9dd950ba0b235c4901d04e410c7e716feb491148bf0ca7daa0f510838b3bf7 +3.2.0 |checksum:5951f8d33ede2f68686c701142c6cc1004d6f525b0aa8e8279a1bf075542b0f0 +4.0.0 |checksum:36c185f8caecacb178500cabdc3e038862df640536c2e84ab763ae134462896f +4.0.1 |checksum:efd33857c0f41a413ec3ea20251f43c4826fe8a11b01099335f4a3b6777eb727 +4.1.0 |checksum:d26879b9a0675ea156c82e26971149349a1474aac3da4d0d2a04cc18e6df73a3 +4.1.1 |checksum:15df4e54e0fab19e225862b36dff823d5b87d57ea998f2e47c52ce01de82b3d9 +4.1.2 |checksum:7c2ed2d62d0305f2c33cba2e99b288df0f3f4343c367b8ee8cad8c735abc8568 +4.1.3 |checksum:d02f1465c7f012f77a61abdaa841a5273a2277247bc143bfa11cf139a29dbdf8 +4.1.4 |checksum:f7798b1682dcf750dab5f4f8da548fee36f30864a4e4b0d8a63295d159357c3b +4.1.5 |checksum:741c7dfe5e392ae39e22399546d25fe00ffdfc7a55e653e6a99b6770b1c0066c +4.2.0 |checksum:3cde88e3d440f63af3cd48edca88bd98872622403740ecda78b7d27161367486 +4.2.1 |checksum:dfc3eef6ef13c5750c3faab782c4db6c74a7bcc5d03e56e4edeec21aab034185 +4.3.0 |checksum:7accb37900d1599c6f0f40be92bc62a5db4e5a7eb64f33a858cf83e798dd1ddc +4.4.0 |checksum:71591ddbda99b5e12e4a46d377c87513850ca7aa4b1aa800ae02792cadee6be7 +4.4.1 |checksum:8a10333552216bf3d3846476cfe78dbc9b5724864e3f5016837724622d828f16 +4.4.2 |checksum:adba9d17de5957532223a1bf0e7bdba5ab849d6576e9210439a7d99e0cfa2595 +4.4.3 |checksum:b3eb96da1fe998f1c00665a9c645878518134cca7c35d39c4bb716e866f4cc57 +4.4.4 |checksum:43cab5a67ca409d62411f869ddb7a0a4de0988b489d3f1d610d9b6e521964fd5 +4.4.5 |checksum:af8713761f1b6604865830c54324e57c33e7cc05107ebdbee4e6d458f8f8fe7c +4.5.0 |checksum:54d94dc52cf98a51548c8f3e77031a3347508b542b8cb066100ed3ac40c03081 +4.5.1 |checksum:1456a9be103bf1de0d34ff6980b77a5a72cf3d4b35bbd2182ac62506981a234c +4.6.0 |checksum:e2498f90c75bd4c19d1739afadde8c03af26a881c8bd775f71d2f180de65b43f +4.6.1 |checksum:e2e96c2ee3ea81e1dc7b4b4abee23b6e552e669cfe456ee69126a29a03373cd7 +4.7.0 |checksum:963a1f5b21c95595fb3cf1e8531784bf3d8fe30302cf6f271b08aefdc63e453f +4.8.0 |checksum:5b9325f28b5be80ba8d43b7660f60ad67c9304fe8181dee89d3a348b13d2fada +4.9.0 |checksum:333619bc71d563ee60f26fc5f3a7f57bd89ee3191177fdce87a014dcb1b8d3b0 +4.10.0b1 |checksum:8791e2006a2ddbf8dc96cfc19633de01af8cb8687703177a85aeb3f959974d5b,rubygems:> 1.3.1 +4.10.0 |checksum:b67a289ae4a3968d93dab0803d0ef5a262b6f94138ab98072e489d2aa8af4034 +4.10.1 |checksum:63d2297712eb1d6219ab1cb9207d9a239ac9ad20463c0b58ca865f0b46deb5ec +4.11.0 |checksum:4c90ff17c492789fdd248369fa16ce65ef05576b3d9f593a49c6a0961dbcd5ee +4.12.0 |checksum:671110574e96377a03b328bfb7f6339540443eca0b62913bf8fe38e9ebcb4470 +4.12.1 |checksum:f87cd92457a343b4e951e1f1ac3e8183f98de4640a32f6ceb44628332d21a088 +4.13.0 |checksum:47e86c22a2d7810897e3eae9669ab9afa220f5e6cea5ac1d47164650a9b857d3 +4.14.0 |checksum:99a20cc5e7b901f6b493a8ca5e13439b73b19671eaaca68a00216c4f66765edc +4.14.1 |checksum:0fa8731445cf4a0c01570ec29aac4b50a0451ce66b1b31ad768f5035e3af7b90,ruby:~> 2.2 +4.15.0 |checksum:a5ec27d8055ad47444cfb7ce860bad8af2365772a82892f4a8a0d97e8e9e3b34,ruby:~> 2.2 +4.15.1 |checksum:9291a0f2247f50d15068ee6965b67cd7b678b0d273e18adf3c0b2ea4a890125c,ruby:< 3.1&>= 2.1 diff --git a/spec/functional/resource/chocolatey_package_spec.rb b/spec/functional/resource/chocolatey_package_spec.rb index e55c1a453c..b5f4c07831 100644 --- a/spec/functional/resource/chocolatey_package_spec.rb +++ b/spec/functional/resource/chocolatey_package_spec.rb @@ -41,6 +41,19 @@ describe Chef::Resource::ChocolateyPackage, :windows_only, :choco_installed do provider end + # This bit of magic ensures that we pass a mixed-case Path var in the env to chocolatey and not PATH + # (both ENV["PATH"] and ENV["Path"] are the same thing in ruby-on-windows, and the first created key + # is the one that is actually passed to a subprocess, and choco demands it be Path) + # + # This is not a no-op. + # + # I don't know how to tell what state we were in to begin with, so we cannot restore. Nothing else + # seems to care. + # + before(:all) do + ENV["Path"] = ENV.delete("Path") + end + context "installing a package" do after { remove_package } diff --git a/spec/unit/application/solo_spec.rb b/spec/unit/application/solo_spec.rb index f9302a0bb2..16f4a7785b 100644 --- a/spec/unit/application/solo_spec.rb +++ b/spec/unit/application/solo_spec.rb @@ -108,7 +108,7 @@ describe Chef::Application::Solo do tarfile = StringIO.new("remote_tarball_content") target_file = StringIO.new - expect(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile) + expect(URI).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile) expect(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file) archive = double(Mixlib::Archive) diff --git a/spec/unit/data_bag_item_spec.rb b/spec/unit/data_bag_item_spec.rb index 9a12804443..61e0a80444 100644 --- a/spec/unit/data_bag_item_spec.rb +++ b/spec/unit/data_bag_item_spec.rb @@ -148,12 +148,7 @@ describe Chef::DataBagItem do end it "implements all the methods of Hash" do - methods = %i{rehash to_hash [] fetch []= store default - default= default_proc index size length - empty? each_value each_key each_pair each keys values - values_at delete delete_if reject! clear - invert update replace merge! merge has_key? has_value? - key? value?} + methods = Hash.public_instance_methods methods.each do |m| expect(data_bag_item).to respond_to(m) end diff --git a/spec/unit/node/attribute_spec.rb b/spec/unit/node/attribute_spec.rb index 6e78725bd9..e73d449225 100644 --- a/spec/unit/node/attribute_spec.rb +++ b/spec/unit/node/attribute_spec.rb @@ -898,7 +898,7 @@ describe Chef::Node::Attribute do end end - describe "index" do + describe "index", ruby: "< 3.0.0" do # Hash#index is deprecated and triggers warnings. def silence old_verbose = $VERBOSE diff --git a/spec/unit/provider/package/rubygems_spec.rb b/spec/unit/provider/package/rubygems_spec.rb index 58a7eccb04..7153d6be3e 100644 --- a/spec/unit/provider/package/rubygems_spec.rb +++ b/spec/unit/provider/package/rubygems_spec.rb @@ -113,12 +113,11 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do end it "finds a matching gem candidate version on rubygems 2.0.0+" do - stub_request(:head, "https://rubygems.org/api/v1/dependencies") - - stub_request(:get, "https://rubygems.org/api/v1/dependencies?gems=sexp_processor") - .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor"))) - - stub_request(:get, "https://rubygems.org/quick/Marshal.4.8/sexp_processor-4.15.1.gemspec.rz") + stub_request(:head, "https://index.rubygems.org/") + .to_return(status: 200, body: "", headers: {}) + stub_request(:get, "https://index.rubygems.org/info/sexp_processor") + .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor-info"))) + stub_request(:get, "https://index.rubygems.org/quick/Marshal.4.8/sexp_processor-4.15.1.gemspec.rz") .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor-4.15.1.gemspec.rz"))) dep = Gem::Dependency.new("sexp_processor", ">= 0") @@ -126,21 +125,20 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do end it "gives the candidate version as nil if none is found" do - stub_request(:head, "https://rubygems.org/api/v1/dependencies") - - stub_request(:get, "https://rubygems.org/api/v1/dependencies?gems=nonexistent_gem") - .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "nonexistent_gem"))) + stub_request(:head, "https://index.rubygems.org/") + .to_return(status: 200, body: "", headers: {}) + stub_request(:get, "https://index.rubygems.org/info/nonexistent_gem") + .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "nonexistent_gem-info"))) dep = Gem::Dependency.new("nonexistent_gem", ">= 0") expect(@gem_env.candidate_version_from_remote(dep)).to be_nil end it "finds a matching gem from a specific gemserver when explicit sources are given (to a server that doesn't respond to api requests)" do - stub_request(:head, "https://rubygems2.org/api/v1/dependencies") - - stub_request(:get, "https://rubygems2.org/api/v1/dependencies?gems=sexp_processor") - .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor"))) - + stub_request(:head, "https://rubygems2.org/") + .to_return(status: 200, body: "", headers: {}) + stub_request(:get, "https://rubygems2.org/info/sexp_processor") + .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor-info"))) stub_request(:get, "https://rubygems2.org/quick/Marshal.4.8/sexp_processor-4.15.1.gemspec.rz") .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor-4.15.1.gemspec.rz"))) |