Launch: release builds (linux x86_64/arm64 musl, macOS arm64) #21

Closed
opened 2026-10-02 01:38:36 +00:00 by jhgaylor · 1 comment
Owner

Blocks: #28 (and through it the control track)

A tag vX.Y.Z builds release binaries and attaches them to a Forgejo release, so nobody has to build from source.

Depends on #20 (runners).

Targets

  • x86_64-unknown-linux-musl: what just static already builds.
  • aarch64-unknown-linux-musl: new. scripts/zig-cc-musl hardcodes -target x86_64-linux-musl; make the target a parameter (or add zig-cc-musl-aarch64) and add a just static target argument. Check that libghostty and aws-lc cross-build.
  • aarch64-apple-darwin: built natively on jake-mini (just build).

Release

  • .forgejo/workflows/release.yml on v* tags: build the web client once, build each target, then package illogical-<version>-<target>.tar.gz (both illogicald and illogical, plus the licenses).
  • SHA256SUMS for the release.
  • Upload to the Forgejo release (API, or forgejo-release action). The binaries embed web/dist, so they are self-contained.
  • Versions: the CLI already has --version (clap); make sure illogicald --version does too, and set the workspace version to the first release so both print it.
  • Optional: sign the checksums (minisign or cosign) so install.sh can check them.
  • macOS Gatekeeper: binaries downloaded with curl aren't quarantined, but Homebrew may complain. Note how unsigned binaries behave; notarization is out of scope for now.

Done when

  • Pushing v0.1.0 produces a release with three tarballs and SHA256SUMS, and each tarball's illogicald runs on its platform.
**Blocks:** #28 (and through it the control track) A tag `vX.Y.Z` builds release binaries and attaches them to a Forgejo release, so nobody has to build from source. Depends on #20 (runners). ### Targets - [ ] `x86_64-unknown-linux-musl`: what `just static` already builds. - [ ] `aarch64-unknown-linux-musl`: new. `scripts/zig-cc-musl` hardcodes `-target x86_64-linux-musl`; make the target a parameter (or add `zig-cc-musl-aarch64`) and add a `just static` target argument. Check that libghostty and aws-lc cross-build. - [ ] `aarch64-apple-darwin`: built natively on jake-mini (`just build`). ### Release - [ ] `.forgejo/workflows/release.yml` on `v*` tags: build the web client once, build each target, then package `illogical-<version>-<target>.tar.gz` (both `illogicald` and `illogical`, plus the licenses). - [ ] `SHA256SUMS` for the release. - [ ] Upload to the Forgejo release (API, or `forgejo-release` action). The binaries embed `web/dist`, so they are self-contained. - [ ] Versions: the CLI already has `--version` (clap); make sure `illogicald --version` does too, and set the workspace version to the first release so both print it. - [ ] Optional: sign the checksums (minisign or cosign) so `install.sh` can check them. - [ ] macOS Gatekeeper: binaries downloaded with curl aren't quarantined, but Homebrew may complain. Note how unsigned binaries behave; notarization is out of scope for now. ### Done when - Pushing `v0.1.0` produces a release with three tarballs and `SHA256SUMS`, and each tarball's `illogicald` runs on its platform.
Author
Owner

Done: v0.1.0 is out, https://git.inevitable.fyi/jhgaylor/illogical/releases/tag/v0.1.0

  • just static aarch64: Zig links the cross build with its own musl (rustc's self-contained crt off, its Cortex-A53 flag dropped). Checked under qemu: the daemon serves the page and runs panes.
  • just dist makes illogical-VERSION-TARGET.tar.gz (both binaries, licenses, notices, README) and SHA256SUMS.
  • release.yml on v*: Linux tarballs on geek, macOS on jake-mini, uploaded by scripts/release, then SHA256SUMS and the Homebrew bump.
  • illogicald --version / illogical --version print 0.1.0.
  • Not done: signing the checksums, and notarization (curl and brew downloads aren't quarantined, so neither is needed to run).
  • Caveat: the v0.1.0 run's publish job failed twice (asset downloads need the repo public, and the tap's SSH URL) and was finished by hand; both are fixed in scripts/release, but the deploy-key path is first exercised by the next tag.
Done: v0.1.0 is out, https://git.inevitable.fyi/jhgaylor/illogical/releases/tag/v0.1.0 - `just static aarch64`: Zig links the cross build with its own musl (rustc's self-contained crt off, its Cortex-A53 flag dropped). Checked under qemu: the daemon serves the page and runs panes. - `just dist` makes `illogical-VERSION-TARGET.tar.gz` (both binaries, licenses, notices, README) and SHA256SUMS. - `release.yml` on `v*`: Linux tarballs on geek, macOS on jake-mini, uploaded by `scripts/release`, then SHA256SUMS and the Homebrew bump. - `illogicald --version` / `illogical --version` print 0.1.0. - Not done: signing the checksums, and notarization (curl and brew downloads aren't quarantined, so neither is needed to run). - Caveat: the v0.1.0 run's `publish` job failed twice (asset downloads need the repo public, and the tap's SSH URL) and was finished by hand; both are fixed in `scripts/release`, but the deploy-key path is first exercised by the next tag.
Sign in to join this conversation.
No description provided.