From ecb5b8039793fea9ce50fd8978c4f5a4d3355b00 Mon Sep 17 00:00:00 2001 From: kipavy Date: Fri, 23 Oct 2026 20:21:50 +0200 Subject: [PATCH] docs(macos): drop the unnotarized-app workarounds now that releases are notarized Since 0.63.0 the app is signed with Developer ID and notarized, so the README and the Homebrew cask no longer need the right-click Open steps or the xattr quarantine command. The cask loses its caveat altogether, which also removes the tap/core variant split. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015Ly4RP96nLUnj4FWtWthpE --- .github/actions/cask-audit/action.yml | 15 ++----------- .github/workflows/verify-packaging.yml | 16 ++++---------- README.md | 14 ++---------- packaging/README.md | 27 ++++++++--------------- scripts/gen-homebrew-cask.sh | 30 ++++---------------------- 5 files changed, 21 insertions(+), 81 deletions(-) diff --git a/.github/actions/cask-audit/action.yml b/.github/actions/cask-audit/action.yml index f6a5b3c7e..ed8394007 100644 --- a/.github/actions/cask-audit/action.yml +++ b/.github/actions/cask-audit/action.yml @@ -1,20 +1,12 @@ name: Generate and audit the Homebrew cask description: > Generates the cask for a tag, styles it and audits it inside a throwaway tap. - Used both by the release job that publishes to VoltiusApp/homebrew-voltius and - by the packaging check that runs the stricter new-cask audit homebrew-cask - core applies to a submission. + Used by the release job that publishes to VoltiusApp/homebrew-voltius. inputs: tag: description: Release tag to generate the cask for required: true - core: - description: > - Generate the homebrew-cask core variant (drops the command-line - quarantine workaround) instead of the tap variant. - required: false - default: 'false' audit-args: description: Extra flags for `brew audit`, e.g. --new for a first submission required: false @@ -43,15 +35,12 @@ runs: env: GH_TOKEN: ${{ inputs.github-token }} TAG: ${{ inputs.tag }} - CORE: ${{ inputs.core }} run: | # The path matters: `brew style` only applies the cask cops when the # file sits under a Casks/ directory. On a bare .rb it falls back to # generic Ruby cops and fails on Sorbet sigils and frozen_string_literal. mkdir -p out/Casks - variant="" - [ "$CORE" = "true" ] && variant="--core" - bash scripts/gen-homebrew-cask.sh "$TAG" $variant > out/Casks/voltius.rb + bash scripts/gen-homebrew-cask.sh "$TAG" > out/Casks/voltius.rb if grep -q -- '--no-quarantine' out/Casks/voltius.rb; then echo "::error::Generated cask uses Homebrew's removed --no-quarantine option" exit 1 diff --git a/.github/workflows/verify-packaging.yml b/.github/workflows/verify-packaging.yml index ada292cb0..1f87560a9 100644 --- a/.github/workflows/verify-packaging.yml +++ b/.github/workflows/verify-packaging.yml @@ -96,18 +96,10 @@ jobs: } Write-Host "uninstalled cleanly" - # There is deliberately no homebrew-cask core job. `brew audit --cask --new` - # runs a signature scan that Voltius cannot pass while it is ad-hoc signed - # rather than notarized: - # - # Signature verification failed: Scan completed, but failed because the - # software is not signed by a distributor that meets the system Gatekeeper - # requirements. - # - # That is a hard gate, not a style nit, so a core submission is blocked until - # there is an Apple Developer account to notarize with. `brew style` and the - # rest of the audit do pass — see gen-homebrew-cask.sh --core, kept for the - # day that changes. The tap keeps being audited by publish-installers.yml. + # There is no homebrew-cask core job yet. Its `brew audit --cask --new` + # signature scan used to fail on the ad-hoc signed app; releases are notarized + # since 0.63.0, so a core submission is no longer blocked by it. The tap keeps + # being audited by publish-installers.yml. # Proves the MSIX packs at all: it needs Windows plus the Windows SDK, so # nothing else in this repo can. This is a check, never a submission: it builds diff --git a/README.md b/README.md index d91873511..89452b670 100644 --- a/README.md +++ b/README.md @@ -109,18 +109,8 @@ Community-maintained by [jing2uo](https://github.com/jing2uo) on [FlatPark](http brew install --cask voltiusapp/voltius/voltius ``` -Voltius is signed with its own certificate but not notarized (no Apple Developer account yet). -If macOS Gatekeeper blocks the first launch, right-click the app and choose -**Open**. To clear the quarantine flag from an existing installation instead, -run: - -```sh -xattr -dr com.apple.quarantine /Applications/Voltius.app -``` - -If you download the `.dmg` directly and macOS says **"Voltius.app is damaged and -cannot be opened"**, the same command clears the quarantine flag after you copy -Voltius to Applications. +Voltius is signed and notarized by Apple. After updating from an older version, +macOS asks once for access to the keychain: choose **Always Allow**. ### Windows — winget diff --git a/packaging/README.md b/packaging/README.md index 728548738..9487f17e7 100644 --- a/packaging/README.md +++ b/packaging/README.md @@ -164,24 +164,15 @@ release assets — a user who downloaded one could not install it. nothing until the user has tapped it. A submission to homebrew-cask core is what would make it discoverable, and the notability bar (75 stars) is cleared. -**Core is blocked on notarization.** `brew audit --cask --new`, the gate a -submission has to pass, runs a signature scan and fails: - -``` -Signature verification failed: Scan completed, but failed because the software -is not signed by a distributor that meets the system Gatekeeper requirements. -``` - -Voltius is ad-hoc signed, not notarized, so this cannot pass without an Apple -Developer account. `brew style` and the rest of the audit are clean, so this is -the only thing standing in the way. - -`scripts/gen-homebrew-cask.sh --core` emits the variant for that PR, kept -ready for the day notarization exists: core is hostile to caveats that talk the -user out of Gatekeeper, so the quarantine-clearing `xattr` command the tap -caveat carries is dropped there, leaving the right-click-Open instructions. - -Never put `brew install --no-quarantine` in either variant. Homebrew 6 removed +**Core was blocked on notarization.** `brew audit --cask --new`, the gate a +submission has to pass, runs a signature scan that failed on the ad-hoc signed +app ("not signed by a distributor that meets the system Gatekeeper +requirements"). Releases are signed with Developer ID and notarized since +0.63.0, so that gate should now pass; `brew style` and the rest of the audit were +already clean. The cask carries no Gatekeeper caveat any more, so the file +`scripts/gen-homebrew-cask.sh ` emits suits both the tap and a core PR. + +Never put `brew install --no-quarantine` in the cask. Homebrew 6 removed the flag, so the hint fails with `Error: invalid option: --no-quarantine` for tap users, and core rejected it before that. `brew audit` does not catch it, so the `cask-audit` action greps the generated cask and fails the run (#176). diff --git a/scripts/gen-homebrew-cask.sh b/scripts/gen-homebrew-cask.sh index 617731f33..2313a2f00 100755 --- a/scripts/gen-homebrew-cask.sh +++ b/scripts/gen-homebrew-cask.sh @@ -1,19 +1,16 @@ #!/usr/bin/env bash # Emits a complete Homebrew Cask for Voltius to stdout. # -# Usage: gen-homebrew-cask.sh [--core] +# Usage: gen-homebrew-cask.sh # e.g. gen-homebrew-cask.sh v0.4.0 # -# --core emit the variant intended for a homebrew-cask *core* submission -# rather than for the VoltiusApp/homebrew-voltius tap. The tap gives -# an optional command for clearing the quarantine flag; core keeps -# only the accepted right-click Open instructions. +# The app is signed with Developer ID and notarized, so the cask needs no +# Gatekeeper caveat. The same file suits the tap and a homebrew-cask core PR. # # Requires: gh (authenticated), awk. Reads the .dmg.sha256 release assets. set -euo pipefail -TAG="${1:?usage: gen-homebrew-cask.sh [--core]}" -VARIANT="${2:-}" +TAG="${1:?usage: gen-homebrew-cask.sh }" source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/release-assets.sh" release_assets_init "$TAG" @@ -21,15 +18,6 @@ release_assets_init "$TAG" SHA_ARM="$(release_sha "$(release_asset aarch64.dmg)")" SHA_INTEL="$(release_sha "$(release_asset x64.dmg)")" -if [ "$VARIANT" = "--core" ]; then - QUARANTINE_HINT="" -else - QUARANTINE_HINT=" - To clear the quarantine flag from an existing installation instead, run: - xattr -dr com.apple.quarantine /Applications/Voltius.app -" -fi - cat <