From b84bed738540be99702f75a4b8c869e7f1d8c08f Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Mon, 10 Apr 2023 13:11:38 +0100 Subject: [PATCH 1/3] Revert "Revert "Split prof gems into their own group"" This reverts commit 7b336ed8cd3eb20461fdc45ce67e5318e53920c4. --- .github/workflows/tests.yml | 12 ++++++------ Library/Homebrew/Gemfile | 11 +++++++---- Library/Homebrew/dev-cmd/install-bundler-gems.rb | 11 ++++++++--- Library/Homebrew/dev-cmd/prof.rb | 6 ++---- Library/Homebrew/dev-cmd/tests.rb | 2 +- Library/Homebrew/dev-cmd/vendor-gems.rb | 2 +- Library/Homebrew/utils/gems.rb | 5 +++++ 7 files changed, 30 insertions(+), 19 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6c7385767f..4e2bde1be0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,7 @@ jobs: restore-keys: ${{ runner.os }}-rubygems- - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Install shellcheck and shfmt run: brew install shellcheck shfmt @@ -80,7 +80,7 @@ jobs: restore-keys: ${{ runner.os }}-rubygems- - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Run brew style on homebrew-core run: brew style --display-cop-names homebrew/core @@ -142,7 +142,7 @@ jobs: restore-keys: ${{ runner.os }}-rubygems- - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Set up the homebrew/core tap run: brew tap homebrew/core @@ -173,7 +173,7 @@ jobs: restore-keys: ${{ runner.os }}-rubygems- - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Set up Homebrew all cask taps run: | @@ -209,7 +209,7 @@ jobs: # Can't cache this because we need to check that it doesn't fail the # "uncommitted RubyGems" step with a cold cache. - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Check for uncommitted RubyGems working-directory: ${{ steps.set-up-homebrew.outputs.repository-path }} @@ -318,7 +318,7 @@ jobs: restore-keys: ${{ runner.os }}-rubygems- - name: Install Bundler RubyGems - run: brew install-bundler-gems --groups=sorbet + run: brew install-bundler-gems --groups=all - name: Create parallel test log directory run: mkdir tests diff --git a/Library/Homebrew/Gemfile b/Library/Homebrew/Gemfile index 66660c553f..99200a97c7 100644 --- a/Library/Homebrew/Gemfile +++ b/Library/Homebrew/Gemfile @@ -27,12 +27,8 @@ gem "rspec-retry", require: false gem "rspec-sorbet", require: false gem "rubocop", require: false gem "rubocop-ast", require: false -# NOTE: ruby-prof v1.4.3 is the last version that supports Ruby 2.6.x -# TODO: remove explicit version when HOMEBREW_REQUIRED_RUBY_VERSION >= 2.7 -gem "ruby-prof", "1.4.3", require: false gem "simplecov", require: false gem "simplecov-cobertura", require: false -gem "stackprof", require: false gem "warning", require: false group :sorbet, optional: true do @@ -42,6 +38,13 @@ group :sorbet, optional: true do gem "tapioca", require: false end +group :prof, optional: true do + # NOTE: ruby-prof v1.4.3 is the last version that supports Ruby 2.6.x + # TODO: remove explicit version when HOMEBREW_REQUIRED_RUBY_VERSION >= 2.7 + gem "ruby-prof", "1.4.3", require: false + gem "stackprof", require: false +end + # vendored gems gem "activesupport" gem "addressable" diff --git a/Library/Homebrew/dev-cmd/install-bundler-gems.rb b/Library/Homebrew/dev-cmd/install-bundler-gems.rb index 1f71a39fc8..7d5377da05 100644 --- a/Library/Homebrew/dev-cmd/install-bundler-gems.rb +++ b/Library/Homebrew/dev-cmd/install-bundler-gems.rb @@ -24,9 +24,14 @@ module Homebrew def install_bundler_gems args = install_bundler_gems_args.parse - # Clear previous settings. We want to fully replace - not append. - Homebrew::Settings.delete(:gemgroups) if args.groups + groups = args.groups - Homebrew.install_bundler_gems!(groups: args.groups || []) + # Clear previous settings. We want to fully replace - not append. + Homebrew::Settings.delete(:gemgroups) if groups + + groups ||= [] + groups |= VALID_GEM_GROUPS if groups.delete("all") + + Homebrew.install_bundler_gems!(groups: groups) end end diff --git a/Library/Homebrew/dev-cmd/prof.rb b/Library/Homebrew/dev-cmd/prof.rb index 42b14123d2..04bbc62079 100644 --- a/Library/Homebrew/dev-cmd/prof.rb +++ b/Library/Homebrew/dev-cmd/prof.rb @@ -24,6 +24,8 @@ module Homebrew def prof args = prof_args.parse + Homebrew.install_bundler_gems!(groups: ["prof"]) + brew_rb = (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path FileUtils.mkdir_p "prof" cmd = args.named.first @@ -41,16 +43,12 @@ module Homebrew end if args.stackprof? - # Already installed from Gemfile but use this to setup PATH and LOADPATH - Homebrew.install_gem_setup_path! "stackprof" with_env HOMEBREW_STACKPROF: "1" do system(*HOMEBREW_RUBY_EXEC_ARGS, brew_rb, *args.named) end output_filename = "prof/d3-flamegraph.html" safe_system "stackprof --d3-flamegraph prof/stackprof.dump > #{output_filename}" else - # Already installed from Gemfile but use this to setup PATH and LOADPATH - Homebrew.install_gem_setup_path! "ruby-prof" output_filename = "prof/call_stack.html" safe_system "ruby-prof", "--printer=call_stack", "--file=#{output_filename}", brew_rb, "--", *args.named end diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index d432f174aa..fb1e8f3c19 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -88,7 +88,7 @@ module Homebrew def tests args = tests_args.parse - Homebrew.install_bundler_gems! + Homebrew.install_bundler_gems!(groups: ["prof"]) require "byebug" if args.byebug? diff --git a/Library/Homebrew/dev-cmd/vendor-gems.rb b/Library/Homebrew/dev-cmd/vendor-gems.rb index b61cef39b2..c284e17764 100644 --- a/Library/Homebrew/dev-cmd/vendor-gems.rb +++ b/Library/Homebrew/dev-cmd/vendor-gems.rb @@ -30,7 +30,7 @@ module Homebrew Homebrew.install_bundler! - ENV["BUNDLE_WITH"] = "sorbet" + ENV["BUNDLE_WITH"] = VALID_GEM_GROUPS.join(":") # System Ruby does not pick up the correct SDK by default. ENV["SDKROOT"] = MacOS.sdk_path if ENV["HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH"] diff --git a/Library/Homebrew/utils/gems.rb b/Library/Homebrew/utils/gems.rb index 603bec116d..626b9f0408 100644 --- a/Library/Homebrew/utils/gems.rb +++ b/Library/Homebrew/utils/gems.rb @@ -12,6 +12,8 @@ module Homebrew # After updating this, run `brew vendor-gems --update=--bundler`. HOMEBREW_BUNDLER_VERSION = "2.3.26" + VALID_GEM_GROUPS = ["sorbet", "prof"].freeze + module_function def ruby_bindir @@ -134,6 +136,9 @@ module Homebrew old_bundle_frozen = ENV.fetch("BUNDLE_FROZEN", nil) old_sdkroot = ENV.fetch("SDKROOT", nil) + invalid_groups = groups - VALID_GEM_GROUPS + raise ArgumentError, "Invalid gem groups: #{invalid_groups.join(", ")}" unless invalid_groups.empty? + install_bundler! require "settings" From b94aede51ba378646f4cc72ae56c2ef1f8a3ef87 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Mon, 10 Apr 2023 13:20:29 +0100 Subject: [PATCH 2/3] dev-cmd/typecheck: install all gems on --update --- Library/Homebrew/dev-cmd/typecheck.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 9b0f21282c..47ee39c1f3 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -45,10 +45,12 @@ module Homebrew def self.typecheck args = typecheck_args.parse - Homebrew.install_bundler_gems!(groups: ["sorbet"]) + update = args.update? || args.update_all? + groups = update ? VALID_GEM_GROUPS : ["sorbet"] + Homebrew.install_bundler_gems!(groups: groups) HOMEBREW_LIBRARY_PATH.cd do - if args.update? || args.update_all? + if update odisabled "brew typecheck --update --fail-if-not-changed" if args.fail_if_not_changed? excluded_gems = [ From 376440cf3eb316dd512d4483cf8b14f0c44c0223 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Mon, 10 Apr 2023 16:53:59 +0100 Subject: [PATCH 3/3] Dynamically find gem groups --- .../Homebrew/dev-cmd/install-bundler-gems.rb | 2 +- Library/Homebrew/dev-cmd/typecheck.rb | 2 +- Library/Homebrew/dev-cmd/vendor-gems.rb | 2 +- Library/Homebrew/utils/gems.rb | 24 +++++++++++++++---- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/dev-cmd/install-bundler-gems.rb b/Library/Homebrew/dev-cmd/install-bundler-gems.rb index 7d5377da05..742ed9ef6d 100644 --- a/Library/Homebrew/dev-cmd/install-bundler-gems.rb +++ b/Library/Homebrew/dev-cmd/install-bundler-gems.rb @@ -30,7 +30,7 @@ module Homebrew Homebrew::Settings.delete(:gemgroups) if groups groups ||= [] - groups |= VALID_GEM_GROUPS if groups.delete("all") + groups |= Homebrew.valid_gem_groups if groups.delete("all") Homebrew.install_bundler_gems!(groups: groups) end diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 47ee39c1f3..37805c83ba 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -46,7 +46,7 @@ module Homebrew args = typecheck_args.parse update = args.update? || args.update_all? - groups = update ? VALID_GEM_GROUPS : ["sorbet"] + groups = update ? Homebrew.valid_gem_groups : ["sorbet"] Homebrew.install_bundler_gems!(groups: groups) HOMEBREW_LIBRARY_PATH.cd do diff --git a/Library/Homebrew/dev-cmd/vendor-gems.rb b/Library/Homebrew/dev-cmd/vendor-gems.rb index c284e17764..30ddc13b27 100644 --- a/Library/Homebrew/dev-cmd/vendor-gems.rb +++ b/Library/Homebrew/dev-cmd/vendor-gems.rb @@ -30,7 +30,7 @@ module Homebrew Homebrew.install_bundler! - ENV["BUNDLE_WITH"] = VALID_GEM_GROUPS.join(":") + ENV["BUNDLE_WITH"] = Homebrew.valid_gem_groups.join(":") # System Ruby does not pick up the correct SDK by default. ENV["SDKROOT"] = MacOS.sdk_path if ENV["HOMEBREW_MACOS_SYSTEM_RUBY_NEW_ENOUGH"] diff --git a/Library/Homebrew/utils/gems.rb b/Library/Homebrew/utils/gems.rb index 626b9f0408..1a15f9e29d 100644 --- a/Library/Homebrew/utils/gems.rb +++ b/Library/Homebrew/utils/gems.rb @@ -12,10 +12,26 @@ module Homebrew # After updating this, run `brew vendor-gems --update=--bundler`. HOMEBREW_BUNDLER_VERSION = "2.3.26" - VALID_GEM_GROUPS = ["sorbet", "prof"].freeze - module_function + # @api private + def gemfile + File.join(ENV.fetch("HOMEBREW_LIBRARY"), "Homebrew", "Gemfile") + end + + # @api private + def valid_gem_groups + install_bundler! + require "bundler" + + Bundler.with_unbundled_env do + ENV["BUNDLE_GEMFILE"] = gemfile + groups = Bundler::Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, false).groups + groups.delete(:default) + groups.map(&:to_s) + end + end + def ruby_bindir "#{RbConfig::CONFIG["prefix"]}/bin" end @@ -136,7 +152,7 @@ module Homebrew old_bundle_frozen = ENV.fetch("BUNDLE_FROZEN", nil) old_sdkroot = ENV.fetch("SDKROOT", nil) - invalid_groups = groups - VALID_GEM_GROUPS + invalid_groups = groups - valid_gem_groups raise ArgumentError, "Invalid gem groups: #{invalid_groups.join(", ")}" unless invalid_groups.empty? install_bundler! @@ -147,7 +163,7 @@ module Homebrew groups |= (Homebrew::Settings.read(:gemgroups)&.split(";") || []) groups.sort! - ENV["BUNDLE_GEMFILE"] = File.join(ENV.fetch("HOMEBREW_LIBRARY"), "Homebrew", "Gemfile") + ENV["BUNDLE_GEMFILE"] = gemfile ENV["BUNDLE_WITH"] = groups.join(" ") ENV["BUNDLE_FROZEN"] = "true"