Repository navigation
ci: GitHub Actions for checks and tag-driven releases - #19
Conversation
ci.yml runs typecheck and tests on PRs and pushes to main. release.yml, on a v* tag, reuses those checks, builds all assets once, smoke-tests each binary on its native OS/arch runner, then publishes. Previously only the darwin-arm64 binary was ever executed before shipping. release.ts gains --build-only / --publish-only so CI and the local path share one implementation; suffixed tags publish as pre-releases so the installer's releases/latest URL skips them. Verified locally: tsc, release --build-only, smoke script on linux-x64. Workflows themselves not yet run on GitHub. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
beejsbj
left a comment
There was a problem hiding this comment.
Independent review: approve with nits
Reviewer: fresh-context Claude Opus 5.5 subagent at head 70f0bbf. Cross-provider reviewers were unavailable today (ChatGPT/Codex weekly limit, Fable limit, opencode 403), so this shares a model with the author. Findings were verified against the v0.4.4-rc1 Release run and the branch protection API.
Verified OK
- The required
checkcontext comes from the CI workflow job namedcheck. The release's reusable call shows up ascheck / checkand doesn't stand in for it. - Permissions: the repo default is read. Only
publishgetscontents: write. No secrets, nopull_request_target. - Ordering is check -> build -> smoke matrix -> publish.
needs: smokeblocks publish if any leg fails. Artifact digests match between build and publish, and all 4 native smoke legs passed. - The local fallback (
build()thenpublish()) is intact on reading.
Low / nits (follow-ups, not blocking)
- Publish is not idempotent. Re-running after a partial publish, or tagging after a local-fallback release, fails red with "already exists". Fix:
gh release viewfirst, thenupload --clobber. - Any
v*tag on any commit publishes. A stable tag pushed by mistake on a branch commit would become Latest. Fix: an ancestor-of-main guard for tags without a suffix, or a tag ruleset. - Add a top-level
permissions: contents: readso the workflows don't depend on the repo setting. - The smoke test asserts exit codes only. One fixture session plus a
searchwould prove that search works, not just that the schema builds. actions/checkout@v4anddownload-artifact@v4give Node 20 deprecation warnings. Bump to v5.
Verdict: safe to merge as the CI and release gate.
What
ci.yml:tsc --noEmit+bun teston every PR and push to main.release.yml: on av*tag, reuse CI checks, build all assets once on Linux, smoke-test each binary on its native runner (linux-x64, linux-arm64, darwin-arm64, darwin-x64), then publish the GitHub release.scripts/release.ts:--build-only/--publish-onlymodes so CI and the local fallback share one implementation. Tags with a suffix (v0.5.0-rc1) publish as pre-releases, whichinstall.sh'sreleases/latestskips.scripts/smoke-binary.sh: runs--help,unify,listagainst throwaway dirs (exercises bun:sqlite FTS5).Why
There was no CI. Merges weren't gated, and three of four shipped binaries had never been executed before release.
Verification
release --build-onlyproduced 5 assets, smoke script passes on linux-x64.ci.yml.release.ymlto be verified with av0.4.4-rc1pre-release tag on this branch.Not done
🤖 Generated with Claude Code