Harden ephemeral Sparkle release signing#106
Conversation
Require the Sparkle-capable Lume runner label and pass the release-time EdDSA key only over standard input. Refs #43.
athena-omt
left a comment
There was a problem hiding this comment.
Approved. I verified the PR at head f3b733c4c6eb6e0d9d79d6842b976373b79a864e in the Athena worker worktree.
The release workflow now requires the sparkle-release runner capability, fails closed on tagged releases unless APW_SPARKLE_PUBLIC_ED_KEY, SPARKLE_GENERATE_APPCAST, and APW_SPARKLE_PRIVATE_ED_KEY are present, and the appcast helper streams the private EdDSA key to generate_appcast --ed-key-file - rather than placing key material on the command line. The regression coverage checks the missing-secret failure path, signed release notes enforcement, critical-update Security-section enforcement, and the appcast contract entries for the new secret and runner label.
Validation run: bash -n scripts/prepare-sparkle-appcast.sh, bash -n scripts/test-prepare-sparkle-appcast.sh, scripts/test-prepare-sparkle-appcast.sh, scripts/ci/validate-appcast-contract.sh, and git diff --check origin/main...HEAD. Local actionlint was not installed on the worker, but the live PR check rollup is green and auto-merge is already enabled. No code blockers found; the remaining dependency is the documented fleet/secret rollout.
Summary
sparkle-releasecapability on APW’s self-hosted macOS release job.generate_appcastinstead of relying on a non-persistent VM Keychain.Governing Issue
Refs #43
Depends on OMT-Global/github-runner-fleet#179, which provisions the matching Lume base-VM capability.
Validation
bash -n scripts/prepare-sparkle-appcast.shbash -n scripts/test-prepare-sparkle-appcast.shscripts/test-prepare-sparkle-appcast.shscripts/ci/validate-appcast-contract.shactionlint -ignore 'shellcheck reported issue' .github/workflows/release.ymlbash scripts/ci/run-fast-checks.shBootstrap Governance
APW_SPARKLE_PRIVATE_ED_KEYat release runtime and is never passed on a command line.Risk and rollout
OMT-Global/apw-cliaccess.APW_SPARKLE_PRIVATE_ED_KEYrelease secret and settingAPW_SPARKLE_PUBLIC_ED_KEYplusSPARKLE_GENERATE_APPCASTafter fleet rollout.Merge Automation