From 2fb5d52b956e7e2eed8ef9bc3ebf4d886046bc18 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Mon, 10 Mar 2025 20:42:25 +0100 Subject: [PATCH 1/4] fix: allow fetching casks on Linux --- Library/Homebrew/cmd/fetch.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index af29ce70b1..08b4de03d4 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -204,8 +204,6 @@ module Homebrew ref = cask.loaded_from_api? ? cask.full_name : cask.sourcefile_path os_arch_combinations.each do |os, arch| - next if os == :linux - SimulateSystem.with(os:, arch:) do cask = Cask::CaskLoader.load(ref) From a1374268395c96b738778fcdc17f9c11a7176dc8 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Tue, 11 Mar 2025 13:08:36 +0100 Subject: [PATCH 2/4] feat: generate cask API for linux --- Library/Homebrew/cask/cask.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 2a787593c4..a612eb5f76 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -411,7 +411,7 @@ module Cask if @dsl.on_system_blocks_exist? begin - MacOSVersion::SYMBOLS.keys.product(OnSystem::ARCH_OPTIONS).each do |os, arch| + OnSystem::ALL_OS_ARCH_COMBINATIONS.each do |os, arch| bottle_tag = ::Utils::Bottles::Tag.new(system: os, arch:) next unless bottle_tag.valid_combination? next if depends_on.macos && From 9f6b421ad6788a2d7ec9d43925d642442177bb53 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Tue, 11 Mar 2025 20:06:20 +0100 Subject: [PATCH 3/4] fix: check OS for macos dependency --- Library/Homebrew/cask/cask.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index a612eb5f76..bc5dec5e7a 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -414,7 +414,8 @@ module Cask OnSystem::ALL_OS_ARCH_COMBINATIONS.each do |os, arch| bottle_tag = ::Utils::Bottles::Tag.new(system: os, arch:) next unless bottle_tag.valid_combination? - next if depends_on.macos && + next if bottle_tag.macos? && + depends_on.macos && !@dsl.depends_on_set_in_block? && !depends_on.macos.allows?(bottle_tag.to_macos_version) From 756ba2ba59af94a70b11979deca3c432d426ea30 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Tue, 11 Mar 2025 20:13:14 +0100 Subject: [PATCH 4/4] Add Linux dependency check in cask.rb --- Library/Homebrew/cask/cask.rb | 1 + Library/Homebrew/test/cask/cask_spec.rb | 118 ++++++++++++++++-- .../support/fixtures/cask/Casks/sha256-os.rb | 15 +++ 3 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 Library/Homebrew/test/support/fixtures/cask/Casks/sha256-os.rb diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index bc5dec5e7a..3c866c4f89 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -414,6 +414,7 @@ module Cask OnSystem::ALL_OS_ARCH_COMBINATIONS.each do |os, arch| bottle_tag = ::Utils::Bottles::Tag.new(system: os, arch:) next unless bottle_tag.valid_combination? + next if bottle_tag.linux? && @dsl.os.nil? next if bottle_tag.macos? && depends_on.macos && !@dsl.depends_on_set_in_block? && diff --git a/Library/Homebrew/test/cask/cask_spec.rb b/Library/Homebrew/test/cask/cask_spec.rb index 30d2059f96..2dd30c87cc 100644 --- a/Library/Homebrew/test/cask/cask_spec.rb +++ b/Library/Homebrew/test/cask/cask_spec.rb @@ -324,6 +324,15 @@ RSpec.describe Cask::Cask, :cask do let(:expected_versions_variations) do <<~JSON { + "sequoia": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip" + }, + "sonoma": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip" + }, + "ventura": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip" + }, "monterey": { "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip" }, @@ -346,6 +355,21 @@ RSpec.describe Cask::Cask, :cask do "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", "version": "1.0.0", "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" + }, + "high_sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", + "version": "1.0.0", + "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" + }, + "sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", + "version": "1.0.0", + "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" + }, + "el_capitan": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", + "version": "1.0.0", + "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" } } JSON @@ -353,6 +377,18 @@ RSpec.describe Cask::Cask, :cask do let(:expected_sha256_variations) do <<~JSON { + "sequoia": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "sonoma": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "ventura": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, "monterey": { "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" @@ -368,21 +404,77 @@ RSpec.describe Cask::Cask, :cask do "mojave": { "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "high_sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "el_capitan": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + } + } + JSON + end + let(:expected_sha256_variations_os) do + <<~JSON + { + "sequoia": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "sonoma": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "ventura": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "monterey": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "big_sur": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "catalina": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "mojave": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "high_sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "sierra": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "el_capitan": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "x86_64_linux": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-linux.zip", + "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" + }, + "arm64_linux": { + "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-arm-linux.zip" } } JSON end before do - # Use a more limited symbols list to shorten the variations hash - symbols = { - monterey: "12", - big_sur: "11", - catalina: "10.15", - mojave: "10.14", - } - stub_const("MacOSVersion::SYMBOLS", symbols) - # For consistency, always run on Monterey and ARM MacOS.full_version = "12" allow(Hardware::CPU).to receive(:type).and_return(:arm) @@ -408,6 +500,14 @@ RSpec.describe Cask::Cask, :cask do expect(JSON.pretty_generate(h["variations"])).to eq expected_sha256_variations.strip end + it "returns the correct variations hash for a cask different sha256s on each arch and os" do + c = Cask::CaskLoader.load("sha256-os") + h = c.to_hash_with_variations + + expect(h).to be_a(Hash) + expect(JSON.pretty_generate(h["variations"])).to eq expected_sha256_variations_os.strip + end + # NOTE: The calls to `Cask.generating_hash!` and `Cask.generated_hash!` # are not idempotent so they can only be used in one test. it "returns the correct hash placeholders" do diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/sha256-os.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/sha256-os.rb new file mode 100644 index 0000000000..92109a36f9 --- /dev/null +++ b/Library/Homebrew/test/support/fixtures/cask/Casks/sha256-os.rb @@ -0,0 +1,15 @@ +cask "sha256-os" do + os macos: "darwin", linux: "linux" + arch arm: "arm", intel: "intel" + + version "1.2.3" + sha256 arm: "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94", + intel: "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b", + x86_64_linux: "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b", + arm64_linux: "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94" + + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine-#{arch}-#{os}.zip" + homepage "https://brew.sh/" + + app "Caffeine.app" +end