Skip to content

chore(release): macOS + Linux packaging and release workflow#76

Merged
sepehr-safari merged 1 commit into
mainfrom
chore/packaging-release
Jul 12, 2026
Merged

chore(release): macOS + Linux packaging and release workflow#76
sepehr-safari merged 1 commit into
mainfrom
chore/packaging-release

Conversation

@sepehr-safari

Copy link
Copy Markdown
Member

First S6 issue: the packaging + release foundation for the 0.5.0 launch.

What's here

  • .github/workflows/release.yml — on a v* tag push, a matrix builds the macOS package (.app → ad-hoc-signed .dmg) and the Linux package (.tar.gz) via native build + native package --archive, gated by native doctor (strict on macOS). A publish job downloads both artifacts and cuts the GitHub release with generated notes.
  • RELEASING.md — the release runbook (bump version → changelog → tag → verify), the macOS ad-hoc right-click → Open note, and the local packaging command.

Decisions (from the S6 kickoff)

  • Ad-hoc signing for 0.5.0; notarization is a post-0.5 follow-up (needs an Apple Developer identity + CI secrets). Called out in RELEASING.md.
  • The menu-bar monitor is deferred to post-0.5 (tracked in feat(ui): menu-bar live monitor (post-0.5) #75).

Security

  • permissions: contents: read at the top; contents: write only on the publish job (least privilege).
  • gh release create (built-in CLI, no third-party release action). The tag and repo reach the script through env:, never interpolated into the run: body, so a crafted tag name can't inject shell.

Verification

  • native package --target macos --signing adhoc --archive → a launchable studio.app + studio-<ver>-macos-ReleaseFast.dmg (arm64, adhoc codesign verified).
  • The packaged binary runs both its GUI (launches, stays up) and ci (exit 0) faces.
  • release.yml is valid YAML; archive globs confirmed against the SDK's naming (*.dmg / *.tar.gz in zig-out/package/).
  • The Linux package path and the end-to-end tag → release flow run in CI; the first real exercise is the v0.5.0 cut (chore(release): cut v0.5.0 #74, with maintainer confirmation before the tag is pushed).

Closes #70.

Package Studio via `native package` and automate a GitHub release on tag
push — the packaging foundation for the 0.5.0 launch.

- .github/workflows/release.yml: on a v* tag, a matrix builds the macOS
  package (.app → ad-hoc-signed .dmg) and the Linux package (.tar.gz) via
  `native build` + `native package --archive`, gated by `native doctor`
  (strict on macOS); a publish job downloads both and cuts the GitHub
  release with generated notes. Least-privilege token (contents: write only
  on the publish job); the tag/repo reach `gh` through the environment, not
  interpolated into the script, so a crafted tag can't inject shell.
- RELEASING.md: the release runbook (bump version, changelog, tag, verify)
  plus the macOS ad-hoc "right-click → Open" note and the local packaging
  command; notarization + the menu-bar monitor are called out as post-0.5.

Verified locally: `native package --target macos --signing adhoc --archive`
produces a launchable studio.app + .dmg (arm64, adhoc codesign), and the
packaged binary runs both its GUI and `ci` faces. release.yml is valid YAML.
Ad-hoc signing per the 0.5.0 scope decision; notarization is deferred.

Closes #70.
@sepehr-safari sepehr-safari merged commit 94dedfe into main Jul 12, 2026
3 checks passed
@sepehr-safari sepehr-safari deleted the chore/packaging-release branch July 12, 2026 18:04
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.

chore(release): macOS + Linux packaging and release workflow

1 participant