Skip to content

ci: attach a prebuilt x86_64 binary to each release - #75

Merged
martinus merged 1 commit into
masterfrom
release-binaries
Jul 19, 2026
Merged

ci: attach a prebuilt x86_64 binary to each release#75
martinus merged 1 commit into
masterfrom
release-binaries

Conversation

@martinus

Copy link
Copy Markdown
Owner

Adds .github/workflows/release.yml so every release automatically gets a downloadable prebuilt binary — the top install-friction item before launch.

How it works

  • Trigger: release: published (exactly what scripts/release.sh publish produces), plus workflow_dispatch with a tag input to backfill an existing release (e.g. v1.2.0).
  • Build: on Ubuntu 22.04 deliberately — a low glibc floor (2.35) so the binary also runs on older distros. fetch-depth: 0 so git describe --tags stamps the clean version.
  • Package: strips the binary and tars it as oans-X.Y.Z-linux-x86_64.tar.gz (+ .sha256), bundling the man page, zsh completion, README, LICENSE, and an INSTALL.txt with install steps, the runtime library list, and the exact ldd output.
  • Upload: gh release upload --clobber (needs only the built-in GITHUB_TOKEN; permissions: contents: write).

Runtime deps are minimal — ldd confirms just glib-2.0, sqlite3, blkid, mount, uuid (libbsd/xxhash are compiled in). Stripped tarball is ~77 KB locally.

Docs

  • README Quick start now points at the prebuilt binary before the build-from-source path.
  • CLAUDE.md release note updated (previously said "Releases attach no build artifacts").

To backfill v1.2.0 after merge

Actions → Release binaries → Run workflow → tag v1.2.0.

Note: a fully static binary isn't practical (glib pulls in pcre2/z/ffi/…), so this is a dynamic build against ubiquitous libraries — the pragmatic, reliable choice.

🤖 Generated with Claude Code

Add .github/workflows/release.yml: on a published release (what
scripts/release.sh publish creates) it builds oans on Ubuntu 22.04 — an
intentionally low glibc floor so the binary runs on older distros too — strips
it, and attaches oans-X.Y.Z-linux-x86_64.tar.gz (+ .sha256) to the release. The
tarball bundles the man page, zsh completion, README, LICENSE and an INSTALL.txt
listing the five runtime libraries (glib/sqlite/blkid/mount/uuid) plus the exact
ldd output. workflow_dispatch with a tag input backfills assets for an existing
release (e.g. v1.2.0).

Also point the README Quick start at the prebuilt binary and update the CLAUDE.md
release note (was "Releases attach no build artifacts").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@martinus
martinus merged commit 885973c into master Jul 19, 2026
2 checks passed
@martinus
martinus deleted the release-binaries branch July 19, 2026 08:38
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