Current v1.3.0 channels
The signed build identifies commit
ead2e9b06711a50b0920cc379f69f8133bb0bc67. The release assets are available from GitHub release v1.3.0.
Automated release sequence
- Merge Conventional Commits into the CLI repository’s
mainbranch. - Merge the Release Please pull request to create the version tag and GitHub release.
- Build all platform archives.
- Sign and notarize both macOS architectures before creating the immutable release bundle.
- Publish the exact bundle to GitHub Releases and versioned Cloudflare R2 paths.
- Publish the npm platform packages and shim under a staging tag.
- Update Homebrew.
- Move npm
latestand the stable installer pointer only after every channel succeeds.
GitHub release environment
The CLI repository uses the GitHub environment namedrelease.
Secrets
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYMACOS_SIGN_P12MACOS_SIGN_PASSWORDMACOS_NOTARY_KEYMACOS_NOTARY_KEY_IDMACOS_NOTARY_ISSUER_IDNPM_TOKENHOMEBREW_TAP_TOKEN
Variables
AWS_ENDPOINT_URLR2_BUCKET
AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY secrets. Cloudflare shows an account-specific S3 endpoint alongside those credentials; copy it into the AWS_ENDPOINT_URL variable, and set R2_BUCKET to the release bucket name. See Cloudflare’s S3 credential guide.
Recover a failed release
Use GitHub’s failed-job retry while the original workflow still has its artifacts. If a full rerun loses the artifact, dispatch the Release workflow with the existingv* tag so it can recover from the immutable signed bundle attached to the release.
If signing and notarization pass but publication fails:
- Download the release bundle artifact.
- Verify every archive against
checksums.txt. - Extract both macOS archives and verify each extracted binary by path, such as
codesign --verify --deep --strict ./sparkles.codesignrequires an explicit target and fails when it is omitted. - Publish the same bytes to the GitHub release and versioned R2 path.
- Download the public objects and compare them with the bundle before moving the stable pointer.
AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in GitHub Actions. Add the S3 credentials so the next release completes automatically.
Protect and rotate Apple credentials
Never send.p12 certificates, .p8 keys, or export passwords through chat, tickets, source control, or documentation. Put them directly into the GitHub release environment.
If an App Store Connect API key is exposed, revoke it and create a replacement. Apple recommends revoking lost or compromised keys immediately. See Revoking API keys.
Treat a possible Developer ID key compromise as an incident rather than a rotation. If a private key or an exported .p12 may have reached anyone outside the release owners, remove its CI access immediately by deleting MACOS_SIGN_P12 and MACOS_SIGN_PASSWORD from the release environment, and contact Apple Product Security right away: whoever holds that identity can distribute software as Sparkles until it is revoked. Revocation blocks installation and launch of every build already signed with that certificate, so tell users which versions stop working and create, sign, and ship the replacement release in parallel instead of waiting for it before acting.
For routine rotation of a certificate that is not compromised, do not revoke it before a replacement-signed release is live. Apple states that software signed with a revoked Developer ID certificate can no longer be installed or launched. Create a replacement certificate, update the GitHub signing secrets, ship a new release, and then contact Apple about revoking the old certificate. See Revoking Developer ID privileges.
Deploy the Mintlify docs
The Mintlify project root isdocs/api. Validate changes from the application repository root:
/docs/api and deploys changes after they merge into main. A docs-only change does not require bun run deploy, a Cloudflare Worker deployment, or a CLI release.