Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ jobs:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
# musl needs the musl-gcc wrapper/linker from musl-tools (Alpine static build).
musl: true
- target: aarch64-unknown-linux-gnu
os: ubuntu-24.04-arm
- target: x86_64-apple-darwin
Expand All @@ -30,6 +34,9 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install musl toolchain
if: matrix.musl
run: sudo apt-get update && sudo apt-get install -y musl-tools
- uses: Swatinem/rust-cache@v2
- run: cargo test --quiet
# SHA-pinned: this action handles the OIDC token.
Expand Down
5 changes: 2 additions & 3 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
- Model cascade + concurrent multi-model consensus over any OpenAI-compatible endpoint;
bounded retry with backoff on transient provider errors.
- Verified `curl | sh` install script with SHA-256 checksum verification; prebuilt
release binaries for four targets.
release binaries for five targets, including x86_64 musl (Alpine) for static-libc
systems.
- Sigstore keyless signing of release artifacts (cosign, GitHub OIDC); the installer
verifies the signature when cosign is present and refuses a stripped signature
unless explicitly overridden.
Expand All @@ -36,8 +37,6 @@
- `postil respond` parity on GitLab/Bitbucket/Azure (today it is GitHub-only), and a
visible error reply when the hosted bot exhausts its retries (today a dead respond
job is only logged).
- musl (Alpine) prebuilt target; the installer currently refuses musl and points at
the source build.
- An `/evidence` benchmark: Postil's own silence rate and confirmed-finding rate on
public OSS PRs, with raw envelopes.

Expand Down
10 changes: 7 additions & 3 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@
aarch64|arm64) arch_part="aarch64" ;;
*) err "unsupported architecture: $arch ($FROM_SOURCE)" ;;
esac
# The prebuilt Linux binaries link glibc; a musl libc (Alpine) cannot run them.
if [ "$os" = "Linux" ] && ldd --version 2>&1 | grep -qi musl; then
err "musl libc detected (Alpine?); no musl prebuilt yet ($FROM_SOURCE)"
# glibc and musl binaries are not interchangeable, so pick the matching libc on
# Linux. Alpine and other musl systems report "musl" in `ldd --version`; the
# presence of the musl loader (/lib/ld-musl-*) is a fallback when ldd is absent.
if [ "$os" = "Linux" ]; then
if { ldd --version 2>&1 | grep -qi musl; } || ls /lib/ld-musl-* >/dev/null 2>&1; then
os_part="unknown-linux-musl"
fi

Check failure on line 56 in install.sh

View check run for this annotation

postil-dev / postil/review

Installer constructs non-existent aarch64-musl target

The musl detection sets `os_part="unknown-linux-musl"` for any Linux architecture, but the release matrix only publishes `x86_64-unknown-linux-musl`. On an `aarch64` musl host the installer will request `aarch64-unknown-linux-musl`, which does not exist, regressing from the previous clear source-build error. Restrict the musl mapping to `arch_part="x86_64"` and keep the source-build error for other architectures.
Comment on lines +53 to +56

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

error Installer constructs non-existent aarch64-musl target
error · confidence 0.90 · kind: risk

The musl detection sets os_part="unknown-linux-musl" for any Linux architecture, but the release matrix only publishes x86_64-unknown-linux-musl. On an aarch64 musl host the installer will request aarch64-unknown-linux-musl, which does not exist, regressing from the previous clear source-build error. Restrict the musl mapping to arch_part="x86_64" and keep the source-build error for other architectures.

fi
target="${arch_part}-${os_part}"

Expand Down
Loading