Merge pull request #13657 from Rylan12/add-arch-and-variable-cask-dsl

Add `arch` cask DSL
This commit is contained in:
Rylan Polster 2022-08-09 15:49:46 -04:00 committed by GitHub
commit 044fefdce9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 83 additions and 13 deletions

View File

@ -243,6 +243,17 @@ module Cask
end end
end end
# @api public
def arch(arm: nil, intel: nil)
should_return = arm.blank? && intel.blank?
set_unique_stanza(:arch, should_return) do
@on_system_blocks_exist = true
on_arch_conditional(arm: arm, intel: intel)
end
end
# `depends_on` uses a load method so that multiple stanzas can be merged. # `depends_on` uses a load method so that multiple stanzas can be merged.
# @api public # @api public
def depends_on(*args) def depends_on(*args)

View File

@ -65,6 +65,13 @@ module OnSystem
result result
end end
end end
base.define_method(:on_arch_conditional) do |arm:, intel:|
@on_system_blocks_exist = true
return arm if OnSystem.arch_condition_met? :arm
return intel if OnSystem.arch_condition_met? :intel
end
end end
sig { params(base: Class).void } sig { params(base: Class).void }

View File

@ -143,7 +143,8 @@ class Livecheck
end end
delegate version: :@package_or_resource delegate version: :@package_or_resource
private :version delegate arch: :@package_or_resource
private :version, :arch
# Returns a `Hash` of all instance variable values. # Returns a `Hash` of all instance variable values.
# @return [Hash] # @return [Hash]

View File

@ -6,7 +6,7 @@ module RuboCop
# Constants available globally for use in all cask cops. # Constants available globally for use in all cask cops.
module Constants module Constants
STANZA_GROUPS = [ STANZA_GROUPS = [
[:version, :sha256], [:version, :sha256, :arch],
[:language], [:language],
[:url, :appcast, :name, :desc, :homepage], [:url, :appcast, :name, :desc, :homepage],
[:livecheck], [:livecheck],

View File

@ -218,25 +218,25 @@ describe Cask::Cask, :cask do
<<~JSON <<~JSON
{ {
"arm64_big_sur": { "arm64_big_sur": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.2.0/arm.zip", "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin-arm64/1.2.0/arm.zip",
"version": "1.2.0", "version": "1.2.0",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
}, },
"monterey": { "monterey": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.2.3/intel.zip" "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip"
}, },
"big_sur": { "big_sur": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.2.0/intel.zip", "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.0/intel.zip",
"version": "1.2.0", "version": "1.2.0",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
}, },
"catalina": { "catalina": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.0.0/intel.zip", "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0", "version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
}, },
"mojave": { "mojave": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.0.0/intel.zip", "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0", "version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
} }

View File

@ -160,7 +160,7 @@ describe Cask::Cmd::List, :cask do
], ],
"desc": null, "desc": null,
"homepage": "https://brew.sh/", "homepage": "https://brew.sh/",
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/1.2.3/arm.zip", "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin-arm64/1.2.3/arm.zip",
"appcast": null, "appcast": null,
"version": "1.2.3", "version": "1.2.3",
"versions": { "versions": {

View File

@ -305,6 +305,38 @@ describe Cask::DSL, :cask do
end end
end end
describe "arch stanza" do
let(:token) { "invalid/invalid-two-arch" }
it "prevents defining multiple arches" do
expect { cask }.to raise_error(Cask::CaskInvalidError, /'arch' stanza may only appear once/)
end
context "when no intel value is specified" do
let(:token) { "arch-arm-only" }
context "when running on arm" do
before do
allow(Hardware::CPU).to receive(:type).and_return(:arm)
end
it "returns the value" do
expect(cask.url.to_s).to eq "file://#{TEST_FIXTURE_DIR}/cask/caffeine-arm.zip"
end
end
context "when running on intel" do
before do
allow(Hardware::CPU).to receive(:type).and_return(:intel)
end
it "defaults to `nil` for the other when no arrays are passed" do
expect(cask.url.to_s).to eq "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
end
end
end
end
describe "appcast stanza" do describe "appcast stanza" do
let(:token) { "with-appcast" } let(:token) { "with-appcast" }

View File

@ -0,0 +1,10 @@
cask "arch-arm-only" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
arch arm: "-arm"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine#{arch}.zip"
homepage "https://brew.sh/"
app "Caffeine.app"
end

View File

@ -0,0 +1,11 @@
cask "invalid-two-arch" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
arch arm: "arm", intel: "intel"
arch arm: "amd64", intel: "x86_64"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage "https://brew.sh/"
app "Caffeine.app"
end

View File

@ -1,11 +1,9 @@
cask "multiple-versions" do cask "multiple-versions" do
arch = "arm"
version "1.2.3" version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94" sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
arch arm: "arm", intel: "intel"
on_intel do platform = on_arch_conditional arm: "darwin-arm64", intel: "darwin"
arch = "intel"
end
on_big_sur do on_big_sur do
version "1.2.0" version "1.2.0"
@ -17,7 +15,7 @@ cask "multiple-versions" do
sha256 "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" sha256 "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
end end
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine/#{version}/#{arch}.zip" url "file://#{TEST_FIXTURE_DIR}/cask/caffeine/#{platform}/#{version}/#{arch}.zip"
homepage "https://brew.sh/" homepage "https://brew.sh/"
app "Caffeine.app" app "Caffeine.app"