Skip to content

v0.6.7: musl static linux binaries (dual-arch x64+arm64) — install.sh ship-blocker fix#144

Merged
firstintent merged 2 commits into
mainfrom
f174-musl-static
May 24, 2026
Merged

v0.6.7: musl static linux binaries (dual-arch x64+arm64) — install.sh ship-blocker fix#144
firstintent merged 2 commits into
mainfrom
f174-musl-static

Conversation

@firstintent
Copy link
Copy Markdown
Owner

Summary

  • Ship-blocker: V0.6.6 install.sh succeeded but ccteam --version errored with GLIBC_2.39 not found on Ubuntu 22.04 / Debian 12 / NAS systems pinned to older glibc. Reproduced on two user machines.
  • Root cause: release.yml built x86_64-unknown-linux-gnu on ubuntu-latest (= Ubuntu 24.04, glibc 2.39).
  • F174 fix: linux binaries now statically linked against musl libc; new linux-arm64 prebuilt on ubuntu-24.04-arm. install.sh learns linux-aarch64/linux-arm64. 0 lines of ccteam business code changed.

Changes

  • .github/workflows/release.yml
    • x86_64-unknown-linux-gnux86_64-unknown-linux-musl (ubuntu-latest + apt install musl-tools)
    • New matrix entry: aarch64-unknown-linux-musl on ubuntu-24.04-arm (GitHub-hosted ARM runner, free for public repos)
    • npm lockfile fast-path tightened: runner.os == 'Linux'runner.os == 'Linux' && runner.arch == 'X64' (lockfile only resolves linux-x64 rolldown native binding; arm64 + macOS share the drop-lockfile + npm install --include=optional path)
    • New static-link sanity step: file <bin> | grep -E 'statically linked|static-pie linked', fails build on mismatch (guards against silent regressions if a dep upgrade re-introduces a glibc-linked native lib)
  • install.sh: linux-aarch64|linux-arm64 from err exit 1SUFFIX=linux-arm64. Suffix names stay user-transparent (no -musl qualifier).
  • Cargo.toml: workspace version 0.6.60.6.7; Cargo.lock synced.
  • CLAUDE.md §一 baseline updated (workspace 0.6.7; baseline 1639/1 unchanged — patch is 0 lines of ccteam business code).
  • docs/versions/v0-6-7/README.md: install-fix patch record.

Local smoke-build (this machine: Ubuntu 22.04, glibc 2.35)

$ cargo build --release --target x86_64-unknown-linux-musl --bin ccteam
    Finished `release` profile [optimized] target(s) in 3m 00s
$ file target/x86_64-unknown-linux-musl/release/ccteam
... ELF 64-bit LSB pie executable, x86-64, ... static-pie linked, ...
$ ldd target/x86_64-unknown-linux-musl/release/ccteam
        statically linked
$ ./target/x86_64-unknown-linux-musl/release/ccteam --version
ccteam 0.6.6

Dep audit confirmed musl-safe before commit: TLS via rustls (reqwest + rustls-tls, tokio-tungstenite + rustls-tls-webpki-roots), no OpenSSL / native-tls, nix 0.29 features (signal/fs/process) are POSIX-standard, notify = "8" (inotify-rs 0.10) musl-compatible.

Why musl over ubuntu-22.04 runner

musl static binary has zero glibc dependency, covers Alpine / old CentOS / NAS / OpenWrt as a side effect. ubuntu-22.04 would only pull the floor to glibc 2.35 and GitHub has already announced its image deprecation in 2026; one-shot.

Test plan

  • CI: release workflow's 4-target matrix all green on tag push (linux-x64, linux-arm64, macos-arm64, macos-x64)
  • CI: check workflow green (no business code changed; clippy + fmt + workspace tests should be unaffected)
  • User: after merge + tag v0.6.7 push, two reported machines re-run curl … | sh and ccteam --version outputs ccteam 0.6.7
  • User: arm64 user (when available) confirms linux-arm64 install

🤖 Generated with Claude Code

ccd and others added 2 commits May 25, 2026 00:19
… ship-blocker fix

V0.6.6 prebuilt linux-x64 binary was built on ubuntu-latest (glibc
2.39) and broke installs on Ubuntu 22.04 / Debian 12 / NAS systems
with older glibc — `install.sh` ran clean but `ccteam --version`
errored with `GLIBC_2.39 not found`.

F174:
* release.yml: linux build target → x86_64-unknown-linux-musl
  (ubuntu-latest + musl-tools), add aarch64-unknown-linux-musl on
  ubuntu-24.04-arm. npm lockfile fast-path tightened to runner.arch
  == 'X64' (lockfile only resolves linux-x64 rolldown binding;
  arm64 follows the macOS drop-lockfile path). Static-link sanity
  step (`file | grep statically linked`) gates against silent
  regressions if a dep ever pulls a glibc-linked native lib.
* install.sh: linux-aarch64/linux-arm64 case from error → SUFFIX
  linux-arm64. Suffix names stay user-transparent (no -musl
  qualifier).
* Cargo.toml workspace version 0.6.6 → 0.6.7; Cargo.lock updated.
* CLAUDE.md §一 baseline synced (workspace 0.6.7, V0.6.7 row;
  baseline 1639/1 unchanged — patch is 0 lines of ccteam business
  code).
* docs/versions/v0-6-7/README.md install-fix patch record.

Verified locally: cargo build --release --target
x86_64-unknown-linux-musl produces static-pie linked binary,
`ldd` reports `statically linked`, `--version` runs clean on
glibc 2.35.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CI runner upgraded to rustc 1.95.0 which promotes unnecessary_sort_by
from allow to warn — `-D warnings` then escalates it to a build error.
F139 (commit d7b4201) already addressed one site; this is a residual
in commands.rs::pick_recent_session.

Sister-fix to F174; not a separate finding.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@firstintent firstintent merged commit 477626d into main May 24, 2026
2 checks passed
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