Skip to content

Commit

Permalink
Merge pull request #16056 from Bo98/test-ruby-3.1
Browse files Browse the repository at this point in the history
Test on Ruby 3.1
  • Loading branch information
Bo98 authored Sep 29, 2023
2 parents e7b0110 + af7d744 commit 196b26b
Show file tree
Hide file tree
Showing 16 changed files with 71 additions and 31 deletions.
29 changes: 25 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand 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)'
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/cask/artifact/abstract_uninstall.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ class AbstractUninstall < AbstractArtifact
].freeze

def self.from_args(cask, **directives)
new(cask, directives)
new(cask, **directives)
end

attr_reader :directives

def initialize(cask, directives)
def initialize(cask, **directives)
directives.assert_valid_keys(*ORDERED_DIRECTIVES)

super(cask, **directives)
Expand Down
8 changes: 7 additions & 1 deletion Library/Homebrew/cask/cask_loader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,13 @@ def load(config:)
# for artifacts with blocks that can't be loaded from the API
send(key) {} # empty on purpose
else
send(key, *artifact[key])
args = artifact[key]
kwargs = if args.last.is_a?(Hash)
args.pop
else
{}
end
send(key, *args, **kwargs)
end
end

Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/cmd/readall.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def readall
end

taps.each do |tap|
Homebrew.failed = true unless Readall.valid_tap?(tap, options)
Homebrew.failed = true unless Readall.valid_tap?(tap, **options)
end
end
end
2 changes: 1 addition & 1 deletion Library/Homebrew/dev-cmd/tests.rb
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,8 @@ def setup_environment!(args)
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)

Expand Down
6 changes: 2 additions & 4 deletions Library/Homebrew/test/cli/named_args_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@

def setup_unredable_formula(name)
error = FormulaUnreadableError.new(name, RuntimeError.new("testing"))
allow(Formulary).to receive(:factory).with(name, {}).and_raise(error)
allow(Formulary).to receive(:factory).with(name, any_args).and_raise(error)
end

def setup_unredable_cask(name)
error = Cask::CaskUnreadableError.new(name, "testing")
allow(Cask::CaskLoader).to receive(:load).with(name).and_raise(error)
allow(Cask::CaskLoader).to receive(:load).with(name, config: nil).and_raise(error)
allow(Cask::CaskLoader).to receive(:load).with(name, any_args).and_raise(error)

config = instance_double(Cask::Config)
allow(Cask::Config).to receive(:from_args).and_return(config)
allow(Cask::CaskLoader).to receive(:load).with(name, config: config).and_raise(error)
end

describe Homebrew::CLI::NamedArgs do
Expand Down
5 changes: 4 additions & 1 deletion Library/Homebrew/test/dev-cmd/irb_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
.and not_to_output.to_stderr
.and be_a_success

expect(history_file).to exist
# TODO: newer Ruby only supports history saving in interactive sessions
# and not if you feed in data from a file or stdin like we are doing here.
# The test will need to be adjusted for this to work.
expect(history_file).to exist if RUBY_VERSION < "2.7"
end
end
end
6 changes: 5 additions & 1 deletion Library/Homebrew/test/rubocop_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
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
Expand Down
3 changes: 1 addition & 2 deletions Library/Homebrew/test/support/helper/formula.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ def stub_formula_loader(formula, ref = formula.full_name, call_original: false)
allow(Formulary).to receive(:loader_for).and_call_original if call_original

loader = double(get_formula: formula)
allow(Formulary).to receive(:loader_for).with(ref, from: :keg, warn: false).and_return(loader)
allow(Formulary).to receive(:loader_for).with(ref, {}).and_return(loader)
allow(Formulary).to receive(:loader_for).with(ref, any_args).and_return(loader)
end
end
end
Expand Down
16 changes: 8 additions & 8 deletions Library/Homebrew/test/test_runner_formula_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -296,12 +296,12 @@

context "when a formula has no dependents" do
it "returns an empty array" do
expect(described_class.new(testball).dependents(current_system)).to eq([])
expect(described_class.new(xcode_helper).dependents(current_system)).to eq([])
expect(described_class.new(linux_kernel_requirer).dependents(current_system)).to eq([])
expect(described_class.new(old_non_portable_software).dependents(current_system)).to eq([])
expect(described_class.new(fancy_new_software).dependents(current_system)).to eq([])
expect(described_class.new(needs_modern_compiler).dependents(current_system)).to eq([])
expect(described_class.new(testball).dependents(**current_system)).to eq([])
expect(described_class.new(xcode_helper).dependents(**current_system)).to eq([])
expect(described_class.new(linux_kernel_requirer).dependents(**current_system)).to eq([])
expect(described_class.new(old_non_portable_software).dependents(**current_system)).to eq([])
expect(described_class.new(fancy_new_software).dependents(**current_system)).to eq([])
expect(described_class.new(needs_modern_compiler).dependents(**current_system)).to eq([])
end
end

Expand All @@ -313,11 +313,11 @@
allow(Formula).to receive(:all).and_return([testball_user, recursive_testball_dependent])

expect(
described_class.new(testball, eval_all: true).dependents(current_system).map(&:name),
described_class.new(testball, eval_all: true).dependents(**current_system).map(&:name),
).to eq(["testball_user"])

expect(
described_class.new(testball_user, eval_all: true).dependents(current_system).map(&:name),
described_class.new(testball_user, eval_all: true).dependents(**current_system).map(&:name),
).to eq(["recursive_testball_dependent"])
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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
Expand Down
10 changes: 7 additions & 3 deletions Library/Homebrew/utils/gems.rb
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,16 @@ def install_bundler!
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

Expand All @@ -194,8 +197,9 @@ def write_user_gem_groups(groups)
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
Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/utils/ruby.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/utils/ruby_check_version_script.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
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
Expand Down

0 comments on commit 196b26b

Please sign in to comment.