Skip to content

build: musl and Windows ARM64 builds, smarter installers, man page and completions in packages - #19

Merged
borghei merged 6 commits into
mainfrom
feat/platform-builds
Oct 1, 2026
Merged

borghei merged 6 commits into
mainfrom
feat/platform-builds

Conversation

@borghei

@borghei borghei commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Summary

Widens the set of machines the release binaries run on and makes the release pipeline testable before a tag. Existing asset names are unchanged; everything here is additive.

  • Static musl builds for x86_64, ARM64 and ARMv7 via cross: Alpine, Debian 11, Ubuntu 20.04, RHEL 8, NixOS, containers, 32-bit Raspberry Pi.
  • Windows: static C runtime, and a native ARM64 build on windows-11-arm.
  • Release build runs on PRs that touch the pipeline and on manual dispatch. Publishing jobs are gated on tag pushes.
  • Smoke tests run every artifact the runner can execute, including musl ARM under qemu and macOS x86_64 under Rosetta. The Linux ARM64 gnu build moves to a native runner.
  • Packages now ship the man page and bash, zsh and fish completions. Releases also publish .tar.gz and .zip archives.
  • Build provenance attestation on tag releases.
  • install.sh detects musl, old glibc, ARMv7 and Termux, supports INK_VERSION pinning and wget, and no longer uses the rate-limited API. New install.ps1 for Windows.
  • Dropped comrak's unused syntect feature, which removes the C oniguruma dependency.
  • rust-version = 1.90 declared, with a CI job that checks it.

Testing

  • fmt, clippy and all 290 tests pass locally.
  • A musl ARM64 build was built and run in an Alpine container locally.
  • install.sh was run for real against v0.8.0 and v0.7.0, and its detection was checked in Alpine, Debian 11, Ubuntu 20.04 and 22.04 containers.
  • This PR's Release workflow run is the first real execution of the new matrix.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UVcvmQrSXd2eyt32g4ko19

ink never uses comrak's syntect plugin; the feature only pulled in syntect's
onig backend and compiled C oniguruma. ink's own syntect dependency uses the
pure-Rust default-fancy regex engine. The only remaining C dependency is ring
(via rustls), which keeps static musl and cross builds simple.
…w targets

- rust-version = 1.90: the highest rust-version among resolved dependencies
  (quantette via ratatui-image); cargo check --locked passes on 1.90.
- .cargo/config.toml links the MSVC CRT statically for x86_64 and aarch64
  Windows so ink.exe runs without the VC++ redistributable.
- cargo-binstall overrides for the static musl builds (amd64, arm64, armv7)
  and Windows ARM64.
…nance; run on PRs

- New assets (existing names unchanged): ink-linux-{amd64,arm64,armv7}-musl
  built with cross and checked to be static; ink-windows-arm64.exe built
  natively on windows-11-arm; ink-<version>-<os>-<arch>.tar.gz/.zip archives
  with the man page and completions.
- aarch64 glibc builds natively on ubuntu-22.04-arm (glibc guard kept).
- Every binary the runner can execute is smoke-tested (--version and a
  piped --plain render); arm musl under qemu-user, macOS x86_64 under Rosetta.
- Windows builds are checked for dynamic CRT imports.
- .deb/.rpm now ship ink.1 and bash/zsh/fish completions
  (packaging/stage.sh generates them), and the amd64 deb is test-installed.
- Runs on PRs touching the pipeline and on workflow_dispatch; release,
  crates and homebrew only run for a pushed v* tag. Top-level permissions
  are read-only; only the release job can write.
- Build provenance attestation for every asset in SHA256SUMS.
The packaging job's stub binary now answers man/completions so stage.sh
runs as in the release, and the deb and rpm layouts are asserted. The msrv
job builds with the rust-version read from Cargo.toml.
install.sh picks the static musl build on musl, glibc < 2.35 and armv7,
refuses Termux with a cargo install hint, resolves latest via the
releases/latest/download redirect, honours INK_VERSION, falls back to wget,
keeps mandatory SHA256SUMS verification, only uses sudo when needed, and runs
from a main function so a truncated download does nothing.
--print-asset plus INK_TEST_* overrides make detection testable.

install.ps1 installs ink.exe for x64 or ARM64 (x64 fallback for releases
without an ARM64 build) to %LOCALAPPDATA%\Programs\ink after verifying
the checksum, and adds it to the user PATH.
@borghei
borghei merged commit 22276c2 into main Oct 1, 2026
21 checks passed
@borghei
borghei deleted the feat/platform-builds branch October 1, 2026 12:04
@borghei borghei mentioned this pull request Oct 1, 2026
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