From 71f558229ab89cc53113ae5bb32aa4a4ac362468 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Fri, 29 Sep 2023 01:58:41 +0100 Subject: [PATCH] Test on Ruby 3.1 --- .github/workflows/tests.yml | 29 ++++++++++++++++--- .gitignore | 4 +++ Library/Homebrew/Gemfile | 2 +- Library/Homebrew/dev-cmd/tests.rb | 2 +- Library/Homebrew/test/rubocop_spec.rb | 6 +++- .../utils/ruby_check_version_script_spec.rb | 1 + Library/Homebrew/utils/gems.rb | 10 +++++-- Library/Homebrew/utils/ruby.sh | 2 +- .../utils/ruby_check_version_script.rb | 2 +- 9 files changed, 46 insertions(+), 12 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 22c9d0bda3..3fcde80117 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -294,6 +294,12 @@ jobs: - name: tests (macOS 13) test-flags: --coverage runs-on: macos-13 + - name: tests (Ubuntu 22.04; Ruby 3.1) + runs-on: ubuntu-22.04 + ruby: '3.1' + - name: tests (macOS 13; Ruby 3.1) + runs-on: macos-13 + ruby: '3.1' steps: - name: Set up Homebrew id: set-up-homebrew @@ -307,8 +313,23 @@ jobs: uses: actions/cache@v3 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} - key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }} - restore-keys: ${{ runner.os }}-rubygems- + key: ${{ runner.os }}-rubygems${{ matrix.ruby }}-${{ steps.set-up-homebrew.outputs.gems-hash }} + restore-keys: ${{ runner.os }}-rubygems${{ matrix.ruby }}- + + - name: Setup Ruby + if: matrix.ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + + - name: Setup Ruby environment + if: matrix.ruby + run: | + echo "HOMEBREW_USE_RUBY_FROM_PATH=1" >> "${GITHUB_ENV}" + echo "HOMEBREW_BOOTSNAP=" >> "${GITHUB_ENV}" # Unsupported, for now + rm -rf "${{ steps.set-up-homebrew.outputs.repository-path }}/Library/Homebrew/vendor/portable-ruby" + + - run: brew config - name: Install Bundler RubyGems run: brew install-bundler-gems --groups=all @@ -320,8 +341,8 @@ jobs: uses: actions/cache@v3 with: path: tests - key: ${{ runner.os }}-${{ matrix.test-flags }}-parallel_runtime_rspec-${{ github.sha }} - restore-keys: ${{ runner.os }}-${{ matrix.test-flags }}-parallel_runtime_rspec- + key: ${{ runner.os }}-${{ matrix.test-flags }}-parallel_runtime_rspec${{ matrix.ruby }}-${{ github.sha }} + restore-keys: ${{ runner.os }}-${{ matrix.test-flags }}-parallel_runtime_rspec${{ matrix.ruby }}- - name: Install brew tests dependencies if: matrix.name != 'tests (generic OS)' diff --git a/.gitignore b/.gitignore index 31b47cb161..806bde19fc 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,10 @@ **/vendor/bundle/ruby/*/plugins **/vendor/bundle/ruby/*/specifications +# Ignore Ruby gems for versions other than we explicitly vendor +**/vendor/bundle/ruby/*/ +!**/vendor/bundle/ruby/2.6.0/ + # Ignore Bundler binary files **/vendor/bundle/ruby/*/gems/**/*.bundle diff --git a/Library/Homebrew/Gemfile b/Library/Homebrew/Gemfile index 191d22a639..2c494287fc 100644 --- a/Library/Homebrew/Gemfile +++ b/Library/Homebrew/Gemfile @@ -4,7 +4,7 @@ source "https://rubygems.org" # The default case (no envs), should always be a restrictive bound on the lowest supported minor version. # This is the branch that Dependabot will use. -if ENV.fetch("HOMEBREW_DEVELOPER", "").empty? || ENV.fetch("HOMEBREW_USE_RUBY_FROM_PATH", "").empty? +if ENV.fetch("HOMEBREW_USE_RUBY_FROM_PATH", "").empty? ruby "~> 2.6.0" else ruby ">= 2.6.0" diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index c4ab2ff194..d170366784 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -208,8 +208,8 @@ module Homebrew HOMEBREW_CACHE HOMEBREW_LOGS HOMEBREW_TEMP - HOMEBREW_USE_RUBY_FROM_PATH ] + allowed_test_env << "HOMEBREW_USE_RUBY_FROM_PATH" if Homebrew::EnvConfig.developer? Homebrew::EnvConfig::ENVS.keys.map(&:to_s).each do |env| next if allowed_test_env.include?(env) diff --git a/Library/Homebrew/test/rubocop_spec.rb b/Library/Homebrew/test/rubocop_spec.rb index 39892b7e70..ce163c2d98 100644 --- a/Library/Homebrew/test/rubocop_spec.rb +++ b/Library/Homebrew/test/rubocop_spec.rb @@ -6,7 +6,11 @@ describe "RuboCop" do context "when calling `rubocop` outside of the Homebrew environment" do before do ENV.each_key do |key| - ENV.delete(key) if key.start_with?("HOMEBREW_") && key != "HOMEBREW_USE_RUBY_FROM_PATH" + allowlist = %w[ + HOMEBREW_TESTS + HOMEBREW_USE_RUBY_FROM_PATH + ] + ENV.delete(key) if key.start_with?("HOMEBREW_") && allowlist.exclude?(key) end ENV["XDG_CACHE_HOME"] = (HOMEBREW_CACHE.realpath/"style").to_s diff --git a/Library/Homebrew/test/utils/ruby_check_version_script_spec.rb b/Library/Homebrew/test/utils/ruby_check_version_script_spec.rb index 6141fbe634..86e88af7a6 100644 --- a/Library/Homebrew/test/utils/ruby_check_version_script_spec.rb +++ b/Library/Homebrew/test/utils/ruby_check_version_script_spec.rb @@ -5,6 +5,7 @@ describe Utils do subject do homebrew_env = ENV.select { |key, _| key.start_with?("HOMEBREW_") } Bundler.with_unbundled_env do + ENV.delete_if { |key,| key.start_with?("HOMEBREW_") } ENV.update(homebrew_env) quiet_system "#{HOMEBREW_LIBRARY_PATH}/utils/ruby_check_version_script.rb", required_ruby_version end diff --git a/Library/Homebrew/utils/gems.rb b/Library/Homebrew/utils/gems.rb index 2d594c5491..157db7bec2 100644 --- a/Library/Homebrew/utils/gems.rb +++ b/Library/Homebrew/utils/gems.rb @@ -177,13 +177,16 @@ module Homebrew def user_gem_groups @user_gem_groups ||= if GEM_GROUPS_FILE.exist? GEM_GROUPS_FILE.readlines(chomp: true) - else - # Backwards compatibility. This else block can be replaced by `[]` by the end of 2023. + elsif RUBY_VERSION < "2.7" + # Backwards compatibility. This elsif block removed by the end of 2023. + # We will not support this in Ruby >=2.7. require "settings" groups = Homebrew::Settings.read(:gemgroups)&.split(";") || [] write_user_gem_groups(groups) Homebrew::Settings.delete(:gemgroups) groups + else + [] end end @@ -194,8 +197,9 @@ module Homebrew def forget_user_gem_groups! if GEM_GROUPS_FILE.exist? GEM_GROUPS_FILE.truncate(0) - else + elsif RUBY_VERSION < "2.7" # Backwards compatibility. This else block can be removed by the end of 2023. + # We will not support this in Ruby >=2.7. require "settings" Homebrew::Settings.delete(:gemgroups) end diff --git a/Library/Homebrew/utils/ruby.sh b/Library/Homebrew/utils/ruby.sh index 087e28dc5d..b8573b1705 100644 --- a/Library/Homebrew/utils/ruby.sh +++ b/Library/Homebrew/utils/ruby.sh @@ -16,7 +16,7 @@ test_ruby() { } can_use_ruby_from_path() { - if [[ -n "${HOMEBREW_DEVELOPER}" && -n "${HOMEBREW_USE_RUBY_FROM_PATH}" ]] + if [[ -n "${HOMEBREW_DEVELOPER}" || -n "${HOMEBREW_TESTS}" ]] && [[ -n "${HOMEBREW_USE_RUBY_FROM_PATH}" ]] then return 0 fi diff --git a/Library/Homebrew/utils/ruby_check_version_script.rb b/Library/Homebrew/utils/ruby_check_version_script.rb index 2d2ffbd26d..40bd14aa90 100755 --- a/Library/Homebrew/utils/ruby_check_version_script.rb +++ b/Library/Homebrew/utils/ruby_check_version_script.rb @@ -17,7 +17,7 @@ ruby_version_major, ruby_version_minor, = ruby_version.canonical_segments homebrew_required_ruby_version_major, homebrew_required_ruby_version_minor, = homebrew_required_ruby_version.canonical_segments -if !ENV.fetch("HOMEBREW_DEVELOPER", "").empty? && +if (!ENV.fetch("HOMEBREW_DEVELOPER", "").empty? || !ENV.fetch("HOMEBREW_TESTS", "").empty?) && !ENV.fetch("HOMEBREW_USE_RUBY_FROM_PATH", "").empty? && ruby_version >= homebrew_required_ruby_version return