Skip to content

ci: add release workflow for tagged builds - #12

Open
fairbearlab wants to merge 2 commits into
mainfrom
ci/release-workflow
Open

fairbearlab wants to merge 2 commits into
mainfrom
ci/release-workflow

Conversation

@fairbearlab

Copy link
Copy Markdown
Owner

Summary

  • Adds .github/workflows/release.yml: on a v* tag push, validates the tag is a strict 3-part semver (vX.Y.Z) and fails fast with a clear error if it has a 4th segment or any suffix — this repo's Go tooling rejects 4-part versions
  • Builds the universal Go engine binary + Swift release app via make bundle (same steps make bundle runs locally), zips the resulting .app, generates a SHA256SUMS.txt, and publishes both to a GitHub Release with --generate-notes
  • Mirrors this repo's existing hardening conventions: SHA-pinned actions/checkout and actions/setup-go (same pins as ci.yml), workflow-level permissions: contents: read with contents: write scoped only to the release job (no harden-runner since no other workflow here uses it)
  • Marks "Add GitHub Actions release workflow" done in TODOS.md and adds a CHANGELOG.md entry under Unreleased

Follow-ups (out of scope here)

  • Code signing + notarization: the app ships unsigned since there's no Apple Developer ID / signing secrets configured in this repo. No signing secrets were invented or requested — flagging this as a separate follow-up.
  • The "Re-evaluate Swift to Go bridge latency after alpha" TODO is unrelated and untouched.

Test plan

  • actionlint (via go run github.com/rhysd/actionlint/cmd/actionlint@latest) passes clean on the new workflow
  • Ran the actual build steps locally on this Mac: make bundle succeeds (universal Go binary + Swift release build + bundle assembly)
  • Verified the packaging step locally: zip -r -X -q produces a clean archive (no __MACOSX/AppleDouble cruft, unlike ditto) and shasum -a 256 checksum generation works
  • End-to-end tag trigger (push a v* tag → Release created) — not run, since this PR intentionally does not push any tags
  • Not touched: .github/workflows/codeql.yml (open PR fix(ci): keep codeql-action init and analyze on the same version #11 already modifies it)

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

fairbearlab and others added 2 commits September 25, 2026 23:53
Triggered on v* tags (validated as 3-part semver; Go tooling here
rejects 4-part versions). Builds the universal Go engine binary and
Swift release app via `make bundle`, zips the .app, generates SHA256
checksums, and publishes them to a GitHub Release with generated
notes. Mirrors ci.yml's SHA-pinned actions and least-privilege
permissions (contents: write scoped to the release job only).

The app is unsigned/un-notarized for now (no signing setup exists in
this repo); code signing and notarization are tracked as a follow-up.

Closes the "Add GitHub Actions release workflow" TODO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… publish

- Tag must match VERSION and Info.plist CFBundleShortVersionString; a
  mismatch previously only warned and would ship an app reporting the
  old version.
- Ad-hoc sign and verify the .app: the unsigned bundle fails
  `codesign -v` ("code has no resources but signature indicates they
  must be present"), which Gatekeeper reports as "damaged" on download.
- Publish via `gh release upload --clobber` when the release already
  exists so re-runs after a partial upload don't fail.
- Pass step outputs through env instead of inline expressions.
- Add a TODO for Developer ID signing + notarization (the PR said it was
  tracked but no entry existed); update CHANGELOG/TODOS notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant