Skip to content

feat(release): add static x86_64 linux musl binary - #103

Open
cardin wants to merge 1 commit into
plannotator:mainfrom
cardin:feat/static-linux-musl
Open

cardin wants to merge 1 commit into
plannotator:mainfrom
cardin:feat/static-linux-musl

Conversation

@cardin

@cardin cardin commented Oct 15, 2026

Copy link
Copy Markdown

feat(release): add a static x86_64 Linux musl binary

Fixes #102

Summary

  • Add x86_64-unknown-linux-musl to the release build matrix without replacing GNU/Linux assets.
  • Install the musl linker for that target and let the existing artifact/checksum/publish steps include the additional binary.
  • Before publishing, smoke-test the musl binary in Debian Bullseye (glibc 2.31) and Alpine containers without installing a compiler or compatibility libraries.
  • Document when to choose the static binary and how to verify its checksum.

Motivation

The v0.9.4 x86_64 GNU release binary requires GLIBC_2.32, GLIBC_2.33, and GLIBC_2.34, so it fails to start on a host running glibc 2.31. A locally built musl binary works on the affected machine, including interactive annotation through the unofficial OpenCode adapter.

An additional musl asset provides a download-only workaround without requiring a system glibc upgrade or a Rust/C build environment on users' machines.

Tests

scripts/smoke-musl.sh accepts a binary path and verifies:

  • The executable reports the workspace version.
  • A fresh document has no annotations.
  • Creating and exporting an annotation preserves the selected quote and feedback.
  • A document snapshot renders the expected heading.

The release workflow runs this script inside both minimal Linux environments.

Local validation completed against upstream commit f35f70ebd392198f0ab0299ecbdc9c834184c899:

  • Built the checked-out source with Rust 1.96 in Alpine using cargo build --release --locked -p plannotator-tui --target x86_64-unknown-linux-musl --jobs 2.
  • Ran the smoke script against that binary in both debian:bullseye-slim and alpine:3.24; both passed.
  • Validated shell syntax, parsed the release YAML, checked the matrix and build-step shell syntax, and ran git diff --check.
  • cargo fmt --all --check passed in Docker.
  • cargo clippy --workspace --all-targets --locked --jobs 2 -- -D warnings passed in Docker with the musl target.

The GitHub-hosted Ubuntu/musl-tools build path and the release publishing workflow have not been executed locally. Full workspace tests were not run locally for this release-configuration/docs-only patch; normal upstream CI still needs to pass.

Scope

  • x86_64 only: this is the architecture of the confirmed reproduction and tested workaround.
  • No application-code, dependency, Homebrew tap, or existing asset-name changes.
  • ARM64 musl support can follow separately with native validation.

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.

Provide static musl Linux binaries for compatibility with older glibc

1 participant