mirror of
https://github.com/Homebrew/brew.git
synced 2026-08-12 22:29:27 +04:00
Merge pull request #22556 from Homebrew/cask-ci-matrix-maximum-macos
generate-cask-ci-matrix: respect `maximum_macos` requirement
This commit is contained in:
@@ -129,22 +129,25 @@ module Homebrew
|
||||
def filter_runners(cask)
|
||||
filtered_runners = T.let({}, T::Hash[T::Hash[Symbol, T.any(Symbol, String)], Float])
|
||||
if cask.supports_macos?
|
||||
filtered_macos_runners = RUNNERS.select do |runner, _|
|
||||
runner[:symbol] != :linux &&
|
||||
cask.depends_on.macos.present? &&
|
||||
cask.depends_on.macos.allows?(MacOSVersion.from_symbol(runner.fetch(:symbol).to_sym))
|
||||
end
|
||||
# Skip macOS if no runner satisfies the cask's min/max macOS requirements.
|
||||
macos_requirements = [cask.depends_on.macos, cask.depends_on.maximum_macos]
|
||||
.compact.select(&:version_specified?)
|
||||
|
||||
filtered_runners = if filtered_macos_runners.any?
|
||||
filtered_macos_runners
|
||||
else
|
||||
filtered_runners = if macos_requirements.empty?
|
||||
MACOS_RUNNERS.dup
|
||||
else
|
||||
MACOS_RUNNERS.select do |runner, _|
|
||||
macos_version = MacOSVersion.from_symbol(runner.fetch(:symbol).to_sym)
|
||||
macos_requirements.all? { |requirement| requirement.allows?(macos_version) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
macos_archs = architectures(cask:, os: :macos)
|
||||
filtered_runners.select! do |runner, _|
|
||||
macos_archs.include?(runner.fetch(:arch))
|
||||
if filtered_runners.any?
|
||||
macos_archs = architectures(cask:, os: :macos)
|
||||
filtered_runners.select! do |runner, _|
|
||||
macos_archs.include?(runner.fetch(:arch))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return filtered_runners unless cask.supports_linux?
|
||||
|
||||
@@ -131,6 +131,63 @@ RSpec.describe Homebrew::DevCmd::GenerateCaskCiMatrix do
|
||||
app "Test.app"
|
||||
end
|
||||
end
|
||||
let(:c_minimum_macos) do
|
||||
Cask::Cask.new("test-minimum-macos") do
|
||||
version "0.0.1,2"
|
||||
|
||||
url "https://brew.sh/test-0.0.1.dmg"
|
||||
name "Test"
|
||||
desc "Test cask"
|
||||
homepage "https://brew.sh"
|
||||
|
||||
depends_on macos: :sequoia
|
||||
|
||||
app "Test.app"
|
||||
end
|
||||
end
|
||||
let(:c_maximum_macos) do
|
||||
Cask::Cask.new("test-maximum-macos") do
|
||||
version "0.0.1,2"
|
||||
|
||||
url "https://brew.sh/test-0.0.1.dmg"
|
||||
name "Test"
|
||||
desc "Test cask"
|
||||
homepage "https://brew.sh"
|
||||
|
||||
depends_on maximum_macos: :sonoma
|
||||
|
||||
app "Test.app"
|
||||
end
|
||||
end
|
||||
let(:c_maximum_macos_below_all_runners) do
|
||||
Cask::Cask.new("test-maximum-macos-below-all-runners") do
|
||||
version "0.0.1,2"
|
||||
|
||||
url "https://brew.sh/test-0.0.1.dmg"
|
||||
name "Test"
|
||||
desc "Test cask"
|
||||
homepage "https://brew.sh"
|
||||
|
||||
depends_on maximum_macos: :ventura
|
||||
|
||||
app "Test.app"
|
||||
end
|
||||
end
|
||||
let(:c_minimum_and_maximum_macos) do
|
||||
Cask::Cask.new("test-minimum-and-maximum-macos") do
|
||||
version "0.0.1,2"
|
||||
|
||||
url "https://brew.sh/test-0.0.1.dmg"
|
||||
name "Test"
|
||||
desc "Test cask"
|
||||
homepage "https://brew.sh"
|
||||
|
||||
depends_on macos: :sonoma
|
||||
depends_on maximum_macos: :sequoia
|
||||
|
||||
app "Test.app"
|
||||
end
|
||||
end
|
||||
let(:c_linux) do
|
||||
Cask::Cask.new("test-linux") do
|
||||
version "0.0.1,2"
|
||||
@@ -218,6 +275,30 @@ RSpec.describe Homebrew::DevCmd::GenerateCaskCiMatrix do
|
||||
end
|
||||
end
|
||||
|
||||
context "when cask has a macOS version requirement" do
|
||||
it "filters macOS runners by the minimum and maximum macOS requirements" do
|
||||
expect(generate_matrix.filter_runners(c_minimum_macos))
|
||||
.to eq({
|
||||
{ arch: :arm, name: "macos-15", symbol: :sequoia } => 0.0,
|
||||
{ arch: :arm, name: "macos-26", symbol: :tahoe } => 1.0,
|
||||
{ arch: :intel, name: "macos-15-intel", symbol: :sequoia } => 1.0,
|
||||
})
|
||||
|
||||
expect(generate_matrix.filter_runners(c_maximum_macos))
|
||||
.to eq({ { arch: :arm, name: "macos-14", symbol: :sonoma } => 0.0 })
|
||||
|
||||
expect(generate_matrix.filter_runners(c_minimum_and_maximum_macos))
|
||||
.to eq({
|
||||
{ arch: :arm, name: "macos-14", symbol: :sonoma } => 0.0,
|
||||
{ arch: :arm, name: "macos-15", symbol: :sequoia } => 0.0,
|
||||
{ arch: :intel, name: "macos-15-intel", symbol: :sequoia } => 1.0,
|
||||
})
|
||||
|
||||
# A requirement excluding all runners must skip macOS, not test them all.
|
||||
expect(generate_matrix.filter_runners(c_maximum_macos_below_all_runners)).to eq({})
|
||||
end
|
||||
end
|
||||
|
||||
context "when cask only supports Linux" do
|
||||
it "returns an array including all Linux" do
|
||||
expect(generate_matrix.filter_runners(c_linux))
|
||||
|
||||
Reference in New Issue
Block a user