Skip to content

Commit

Permalink
github_runner_matrix: deploy new x86_64 runner when required
Browse files Browse the repository at this point in the history
Closes #18356.

Co-authored-by: Bo Anderson <mail@boanderson.me>
  • Loading branch information
carlocab and Bo98 committed Sep 21, 2024
1 parent 3b649d1 commit 30e25c5
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions Library/Homebrew/github_runner_matrix.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ def initialize(testing_formulae, deleted_formulae, all_supported:, dependent_mat
@dependent_matrix = T.let(dependent_matrix, T::Boolean)
@compatible_testing_formulae = T.let({}, T::Hash[GitHubRunner, T::Array[TestRunnerFormula]])
@formulae_with_untested_dependents = T.let({}, T::Hash[GitHubRunner, T::Array[TestRunnerFormula]])
@deploy_new_x86_64_runner = T.let(all_supported, T::Boolean)

@runners = T.let([], T::Array[GitHubRunner])
generate_runners!
Expand Down Expand Up @@ -122,13 +123,30 @@ def create_runner(platform, arch, spec, macos_version = nil)

NEWEST_HOMEBREW_CORE_MACOS_RUNNER = :sequoia
OLDEST_HOMEBREW_CORE_MACOS_RUNNER = :ventura
NEWEST_HOMEBREW_CORE_INTEL_MACOS_RUNNER = :sonoma
NEWEST_DEFAULT_HOMEBREW_CORE_INTEL_MACOS_RUNNER = :sonoma

sig { params(macos_version: MacOSVersion).returns(T::Boolean) }
def runner_enabled?(macos_version)
macos_version <= NEWEST_HOMEBREW_CORE_MACOS_RUNNER && macos_version >= OLDEST_HOMEBREW_CORE_MACOS_RUNNER
end

NEW_INTEL_MACOS_MUST_BUILD_FORMULAE = %w[pkg-config pkgconf].freeze

sig { returns(T::Boolean) }
def deploy_new_x86_64_runner?
return true if @testing_formulae.any? { |f| NEW_INTEL_MACOS_MUST_BUILD_FORMULAE.include?(f.name) }
return true if @testing_formulae.any? { |f| f.formula.class.pour_bottle_only_if == :clt_installed }

Formula.all.any? do |formula|
next false if formula.class.pour_bottle_only_if != :clt_installed

non_test_dependencies = Dependency.expand(formula, cache_key: "determine-test-runners") do |_, dependency|
Dependency.prune if dependency.test?
end
non_test_dependencies.any? { |dep| @testing_formulae.map(&:name).include?(dep.name) }
end
end

NEWEST_GITHUB_ACTIONS_INTEL_MACOS_RUNNER = :ventura
OLDEST_GITHUB_ACTIONS_INTEL_MACOS_RUNNER = :monterey
NEWEST_GITHUB_ACTIONS_ARM_MACOS_RUNNER = :sonoma
Expand Down Expand Up @@ -181,7 +199,13 @@ def generate_runners!
)
@runners << create_runner(:macos, :arm64, spec, macos_version)

next if !@all_supported && macos_version > NEWEST_HOMEBREW_CORE_INTEL_MACOS_RUNNER
# `#deploy_new_x86_64_runner?` is expensive, so:
# - avoid calling it if we don't have to
# - cache the result to a variable to avoid calling it multiple times
if macos_version > NEWEST_DEFAULT_HOMEBREW_CORE_INTEL_MACOS_RUNNER &&
!(@deploy_new_x86_64_runner ||= deploy_new_x86_64_runner?)
next
end

github_runner_available = macos_version <= NEWEST_GITHUB_ACTIONS_INTEL_MACOS_RUNNER &&
macos_version >= OLDEST_GITHUB_ACTIONS_INTEL_MACOS_RUNNER
Expand Down

0 comments on commit 30e25c5

Please sign in to comment.