ci: add musl Linux targets to release builds#430
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds the communique tool to the configuration and introduces a mise.lock file. However, the linux-arm64-musl entry in the lock file incorrectly points to a gnu binary, which will fail on musl-based systems. Additionally, the CI workflow changes mentioned in the PR description are missing from the current implementation.
|
|
||
| [tools] | ||
| age = "latest" | ||
| communique = "latest" |
There was a problem hiding this comment.
The pull request description states that x86_64-unknown-linux-musl and aarch64-unknown-linux-musl are being added to the release matrix. However, the current diff only includes changes to mise.toml and mise.lock for the communique tool. The actual modifications to the CI release workflow (e.g., .github/workflows/release.yml) or Cargo.toml that would implement these new build targets are missing from this pull request.
| [tools.communique."platforms.linux-arm64-musl"] | ||
| checksum = "sha256:7be8c2a327212b41e7d39c9866f49c09c26beddfcdfbde1289804c836c45797b" | ||
| url = "https://github.com/jdx/communique/releases/download/v1.0.1/communique-aarch64-unknown-linux-gnu.tar.gz" | ||
| url_api = "https://api.github.com/repos/jdx/communique/releases/assets/400318499" |
There was a problem hiding this comment.
The linux-arm64-musl platform entry for communique incorrectly points to the gnu target binary (communique-aarch64-unknown-linux-gnu.tar.gz) and uses its checksum. This binary will fail to execute on musl-based distributions like Alpine Linux due to the missing glibc dependency. If a musl-specific binary is available for communique, this entry should be updated with the correct URL and checksum; otherwise, it should be removed to avoid providing a broken tool in musl environments.
Greptile SummaryThis PR adds Confidence Score: 4/5Safe to merge the TUI refactor portion, but the musl release targets will likely fail to build until the libudev-dev and aws-lc-rs toolchain issues are resolved. Two P1 build-blocking issues flagged in prior review threads (libudev-dev glibc/musl ABI mismatch in Cross.toml, aws-lc-rs missing CMake in cross musl images) remain unaddressed. The tui/app.rs and tui/event.rs changes are correct. Score is 4 rather than lower because fail-fast is disabled so existing targets are unaffected, and the only new finding is a P2 style concern in event.rs. Cross.toml — the musl pre-build steps copy the gnu libudev-dev pattern verbatim, which will produce a linker error at cross-compile time. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[git push tag] --> B[build-binaries matrix]
B --> C[macOS arm64 / x86_64\ncargo]
B --> D[Linux gnu arm64 / x86_64\ncross + Cross.toml pre-build]
B --> E[Linux musl x86_64\ncross + Cross.toml pre-build\n⚠️ libudev-dev glibc mismatch]
B --> F[Linux musl arm64\ncross + Cross.toml pre-build\n⚠️ libudev-dev glibc mismatch]
B --> G[Windows msvc\ncargo]
C & D & E & F & G --> H[upload-artifact]
H --> I[create-release\ncollect + publish assets]
I --> J[enhance-release\ncommunique AI notes]
Reviews (6): Last reviewed commit: "[autofix.ci] apply automated fixes (atte..." | Re-trigger Greptile |
Alpine Linux and other musl-based distros can't run the glibc-linked binaries. Add x86_64-unknown-linux-musl and aarch64-unknown-linux-musl to the release matrix so users can install fnox on Alpine. Fixes #428 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3370a4a to
9d77fbc
Compare
The musl targets need the same libudev-dev pre-build step as the GNU targets for ctap-hid-fido2 → hidapi to compile. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit c1f004a. Configure here.
| "dpkg --add-architecture $CROSS_DEB_ARCH", | ||
| "apt-get update", | ||
| "apt-get install -y libudev-dev:$CROSS_DEB_ARCH", | ||
| ] |
There was a problem hiding this comment.
Glibc libudev-dev incompatible with musl cross-compilation targets
High Severity
The musl target sections install libudev-dev via apt-get, which provides glibc-linked libraries and objects. The hidapi crate (depended on by ctap-hid-fido2) requires libudev via pkg-config for its default linux-static-hidraw backend. When the musl linker attempts to link against glibc's libudev, it will fail due to ABI incompatibility. This configuration was copy-pasted from the glibc targets but is not valid for musl — musl targets need either a musl-compiled libudev (e.g., from Alpine's eudev-dev) or a different hidapi backend like linux-static-libusb.
Reviewed by Cursor Bugbot for commit c1f004a. Configure here.


Summary
x86_64-unknown-linux-muslandaarch64-unknown-linux-muslto the release matrix so fnox can run on Alpine Linux and other musl-based distroscrossbuild-tool path (same as the glibc targets)Why
Discussion #428 reports that
fnoxfails on Alpine withcannot execute: required file not found— the error you get when a dynamically-linked glibc binary is run on a musl system. The current release only shipslinux-gnubinaries, so mise-installed fnox can't run on Alpine.The project is already set up for this: Cargo.toml already vendors OpenSSL and dbus for Linux cross-compilation, and
taiki-e/upload-rust-binary-actionhandles musl targets viacross.Reviewer notes
keyringpulls in libdbus viasync-secret-service— already vendored, so it should build; users on Alpine who want the keychain provider will still need libsecret at runtimearboard(TUI clipboard) won't have X11/Wayland in a headless Alpine container — clipboard copy will no-op there, which is fineTest plan
fnox --versionruns on an Alpine container🤖 Generated with Claude Code
Note
Medium Risk
Moderate risk because it changes the release build matrix and cross-compilation setup, which could cause CI failures or missing/incorrect release artifacts if the new targets don’t build cleanly.
Overview
Adds
x86_64-unknown-linux-muslandaarch64-unknown-linux-muslto the GitHub Actions release build matrix so releases produce musl-linked Linux artifacts alongside existing glibc builds.Updates
Cross.tomlwith per-targetpre-buildsteps for the new musl targets (installinglibudev-dev, including multi-arch setup for aarch64) to support successfulcrosscompilation.Reviewed by Cursor Bugbot for commit c1f004a. Bugbot is set up for automated code reviews on this repo. Configure here.