[codex] Add Sparkle release updates#9
Merged
nickdirienzo merged 6 commits intomainfrom Apr 28, 2026
Merged
Conversation
Contributor
Author
|
@nickdirienzo I don't have an apple developer account but if you add ze secrets and set up the app in the portal this should allow auto updates so we aren't doing a git clone and build each time |
5fd301d to
d82eccb
Compare
- Pin actions/checkout to a full commit SHA (v6.0.2) in both workflows so a
retag on actions/checkout cannot silently change what we run.
- Default both workflows to `permissions: {}` and grant `contents: write`
only on the release job that needs it.
- Move the release job into a `release` GitHub Actions environment so the
Apple/Sparkle secrets sit behind a required-reviewer gate, not just
repo-write.
- Disable git-credential persistence on checkout — neither workflow pushes
back to the repo.
- Add a Dependabot config for github-actions so the SHA pin gets bumped
on a schedule instead of rotting in place.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Releases stay fully automated on tag push. The `release` environment remains for secret scoping, but no reviewer is required — tag protection is the actual security boundary against an attacker pushing a v* tag. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Trigger flips from `push: tags: v*` to `push: branches: main`. Every merge to main now ships a release; humans don't pick versions or pull triggers. - Workflow computes the next CalVer tag (`YYYY.MM.MICRO`) by scanning prior `v<year>.<month>.*` tags and bumping the trailing counter. - `gh release create` creates both the tag and the release in one shot, so we don't need git-write credentials on the runner. - Drops `workflow_dispatch` and the critical-update / version-override inputs — there's no manual lever, hotfixes go through main, transient failures use "Re-run jobs". - Doc reframes the security boundary from tag protection to branch protection on main, since the workflow itself creates the tags. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6e6c23c to
4366e15
Compare
nickdirienzo
approved these changes
Apr 28, 2026
CI runners are noisier than dev machines and routinely flake the 8ms p99 budgets. Targets remain strict for local runs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the plumbing to ship Flight as a signed, notarized macOS app that can update itself from GitHub Releases via Sparkle.
Check for Updates...menu item.build.shto embed Sparkle, set release metadata, optionally sign, and emit a release zip.ReleaseGitHub Actions workflow that imports a Developer ID certificate, signs, notarizes, staples, generates a signed Sparkle appcast, and publishes release assets.doc/releasing.md.Nick setup checklist
This PR is intentionally wired so the repo admin can add credentials after review. Required GitHub Actions secrets:
APPLE_DEVELOPER_ID_CERTIFICATE_BASE64APPLE_DEVELOPER_ID_CERTIFICATE_PASSWORDAPPLE_IDAPPLE_APP_SPECIFIC_PASSWORDAPPLE_TEAM_IDSPARKLE_PRIVATE_ED_KEYRequired repository variable:
SPARKLE_PUBLIC_ED_KEYOptional repository variables:
FLIGHT_BUNDLE_IDif the Apple account uses a different bundle identifier thancom.flight.appSPARKLE_FEED_URLif we do not want to use the defaulthttps://github.com/mirage-security/flight/releases/latest/download/appcast.xmlValidation
swift build --target Flight./build.sh archiveSparkle.frameworkand has@executable_path/../Frameworksrpathswift testswift run FlightBenchpassed on rerun; the first run had a noisy heavy-conversation p99 miss at 8.232 ms vs 8.0 ms while all other targets passed.github/workflows/release.ymland.github/workflows/pr.ymlas YAMLThe Apple signing/notarization path is not executed locally because the Developer ID cert and notary credentials are not available in this checkout.