From f31dc915094597226ffe164c343a1d5c854b9ba8 Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Tue, 25 Aug 2026 19:38:03 +1000 Subject: [PATCH 1/7] feat(release): attach a static linux/arm64 seid binary to releases Releases carried linux/amd64 only. The musl link path was arch-split in #3932, which made an arm64 static build possible; this wires it through the build script, the CI gate and goreleaser so the archive actually ships. Vendor the aarch64 Alpine 3.15 gcc 10.3.1 libgcc alongside the x86_64 one, each in its own subdirectory. The gcc>=12 unwind b-tree that crashed the amd64 binary at the genesis wasm store is not architecture specific: ATOMIC_FDE_FAST_PATH is gated on atomics support rather than a target allowlist, and an unpinned arm64 build SIGSEGVs on the first boot under RAYON_NUM_THREADS=1. Both targets need the pin. build-static.sh takes a target architecture and writes build/seid-, so the two builds no longer overwrite each other on one runner. The libgcc directory and the checksums it verifies are both derived from that argument, so a build cannot verify one architecture's archives while linking another's. It also asserts the ELF machine of the output matches what was asked for. The nm b-tree assertion now materialises the symbol table before grepping it. Reading nm through a pipe reported grep's exit status, so a failing nm would print "pre-b-tree unwinder confirmed" and pass. boot-smoke.sh refuses a binary built for another architecture. Previously it reached seid init, died with an exec-format error and reported "did not reach the ABCI handshake", which reads as a crashing binary rather than the wrong input. The release runner is amd64 and cannot execute the arm64 binary, so the goreleaser hook boots only the amd64 one. The arm64 boot gauntlet runs in the new Linux ARM64 (static) job on native hardware. The static build is reproducible, so the binary gated there is byte-identical to the one that ships. Verified with goreleaser release --snapshot: both archives are produced, both are listed in checksums.txt, sha256sum -c --ignore-missing reports OK for both, and each archive contains a binary of the matching architecture. --- .github/workflows/cross-arch-build.yml | 67 +++++++++++++-- .goreleaser.yaml | 19 +++-- scripts/boot-smoke.sh | 25 ++++-- scripts/build-static.sh | 76 +++++++++++++----- scripts/goreleaser-shim.sh | 27 ++++--- third_party/alpine-gcc10-libgcc/README.md | 41 ++++++++-- .../alpine-gcc10-libgcc/aarch64/libgcc.a | Bin 0 -> 308672 bytes .../alpine-gcc10-libgcc/aarch64/libgcc_eh.a | Bin 0 -> 343260 bytes .../alpine-gcc10-libgcc/{ => x86_64}/libgcc.a | Bin .../{ => x86_64}/libgcc_eh.a | Bin 10 files changed, 205 insertions(+), 50 deletions(-) create mode 100644 third_party/alpine-gcc10-libgcc/aarch64/libgcc.a create mode 100644 third_party/alpine-gcc10-libgcc/aarch64/libgcc_eh.a rename third_party/alpine-gcc10-libgcc/{ => x86_64}/libgcc.a (100%) rename third_party/alpine-gcc10-libgcc/{ => x86_64}/libgcc_eh.a (100%) diff --git a/.github/workflows/cross-arch-build.yml b/.github/workflows/cross-arch-build.yml index 07db42e219..e6fc9d555b 100644 --- a/.github/workflows/cross-arch-build.yml +++ b/.github/workflows/cross-arch-build.yml @@ -147,11 +147,11 @@ jobs: # gcc is GNU ld + musl, so it links cleanly. Same script the goreleaser release # build runs (scripts/build-static.sh); goreleaser then packages it via the tool shim. - name: Build statically (Alpine / musl) - run: bash scripts/build-static.sh + run: bash scripts/build-static.sh amd64 - name: Assert binary is statically linked run: | - info=$(file ./build/seid) + info=$(file ./build/seid-amd64) echo "$info" echo "$info" | grep -q "statically linked" \ || { echo "ERROR: seid is not statically linked"; exit 1; } @@ -159,23 +159,76 @@ jobs: - name: Assert no dynamic dependencies run: | # On a true static binary, ldd reports "not a dynamic executable". - ldd ./build/seid 2>&1 | grep -qE "not a dynamic|statically linked" \ - || { echo "ERROR: seid has dynamic dependencies:"; ldd ./build/seid; exit 1; } + ldd ./build/seid-amd64 2>&1 | grep -qE "not a dynamic|statically linked" \ + || { echo "ERROR: seid has dynamic dependencies:"; ldd ./build/seid-amd64; exit 1; } - name: Smoke test - run: ./build/seid version --long + run: ./build/seid-amd64 version --long # Repeated boots: the gcc>=12 unwind b-tree crash killed ~70% of boots at the # genesis wasm store, so a single boot (let alone `seid version`, which never # touches the wasm VM) can pass on luck. See scripts/boot-smoke.sh. - name: Boot smoke (repeated) - run: bash scripts/boot-smoke.sh ./build/seid 8 + run: bash scripts/boot-smoke.sh ./build/seid-amd64 8 - name: Upload artifact for inspection uses: actions/upload-artifact@v5 with: name: seid-linux-amd64-static - path: ./build/seid + path: ./build/seid-amd64 + retention-days: 14 + + linux-arm64-static: + name: "Linux ARM64 (static)" + runs-on: ubuntu-24.04-arm + needs: [static-paths] + # Same gating as the amd64 static job. This is the only place the arm64 release + # binary is booted: the release runner is amd64 and cannot execute it. + if: >- + !cancelled() && ( + startsWith(github.base_ref, 'release/') || + startsWith(github.ref, 'refs/heads/release/') || + startsWith(github.event.merge_group.base_ref, 'refs/heads/release/') || + needs.static-paths.outputs.changed == 'true' ) + timeout-minutes: 45 + steps: + - name: Checkout code + # See: https://github.com/actions/checkout/releases/tag/v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + + # Native arm64, so no binfmt or emulation is involved and the boots below run on + # real hardware. The release job builds the same commit under emulation; the build + # is reproducible, so the binary gated here is the one that ships. + - name: Build statically (Alpine / musl) + run: bash scripts/build-static.sh arm64 + + - name: Assert binary is statically linked + run: | + info=$(file ./build/seid-arm64) + echo "$info" + echo "$info" | grep -q "statically linked" \ + || { echo "ERROR: seid is not statically linked"; exit 1; } + echo "$info" | grep -q "aarch64" \ + || { echo "ERROR: seid is not an aarch64 binary"; exit 1; } + + - name: Assert no dynamic dependencies + run: | + ldd ./build/seid-arm64 2>&1 | grep -qE "not a dynamic|statically linked" \ + || { echo "ERROR: seid has dynamic dependencies:"; ldd ./build/seid-arm64; exit 1; } + + - name: Smoke test + run: ./build/seid-arm64 version --long + + # The gcc>=12 unwind b-tree crash reproduces on arm64 too: an unpinned build + # SIGSEGVs on the first boot under RAYON_NUM_THREADS=1, which boot-smoke pins. + - name: Boot smoke (repeated) + run: bash scripts/boot-smoke.sh ./build/seid-arm64 8 + + - name: Upload artifact for inspection + uses: actions/upload-artifact@v5 + with: + name: seid-linux-arm64-static + path: ./build/seid-arm64 retention-days: 14 macos-arm64: name: "macOS ARM64" diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 3cda04d324..78d3664a81 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -5,11 +5,18 @@ project_name: sei-chain before: hooks: - go mod download - # build-static.sh self-verifies (libwasmvm archives present + output is static). - - bash scripts/build-static.sh + # The release runner is amd64, so building linux/arm64 needs binfmt registered. + - docker run --privileged --rm tonistiigi/binfmt --install arm64 + # build-static.sh self-verifies per architecture (libwasmvm archives present, pinned + # libgcc checksums match, output is static, no gcc>=12 b-tree unwinder). + - bash scripts/build-static.sh amd64 + - bash scripts/build-static.sh arm64 # Boot the binary before packaging: catches crash-at-first-wasm-use defects that - # neither a successful link nor `seid version` can (see scripts/boot-smoke.sh). - - bash scripts/boot-smoke.sh build/seid 4 + # neither a successful link nor `seid version` can (see scripts/boot-smoke.sh). Only + # the native architecture can be booted here; the arm64 binary is gated by the + # Linux ARM64 (static) CI job, which runs the same 8-boot gauntlet on arm64 hardware + # against a bit-identical build of the same commit. + - bash scripts/boot-smoke.sh build/seid-amd64 4 builds: # The static seid is built in Alpine (musl-native) by the `before:` hook above @@ -29,6 +36,7 @@ builds: - linux goarch: - amd64 + - arm64 archives: - id: seid @@ -86,7 +94,8 @@ release: header: | ## Experimental Pre-built Binaries - Pre-built **statically-linked** `seid` binary attached below for `linux/amd64`. + Pre-built **statically-linked** `seid` binaries attached below for `linux/amd64` + and `linux/arm64`. Verify your download: diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index e20e6afa99..cff37762b4 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -24,16 +24,31 @@ BIN=${1:?usage: boot-smoke.sh [boots]} BOOTS=${2:-8} CHAIN_ID=boot-smoke-1 -# Linux-only: this gate runs the linux/amd64 binary natively and uses GNU timeout. -# Skip cleanly on other hosts so local `goreleaser release --snapshot` on macOS still -# works (build-static.sh cross-builds in Docker there, but the ELF can't run on the -# host). The real release path and the CI static-build job both run on Linux and always +# Linux-only: this gate runs the binary natively and uses GNU timeout. Skip cleanly on +# other hosts so local `goreleaser release --snapshot` on macOS still works +# (build-static.sh cross-builds in Docker there, but the ELF can't run on the host). +# The real release path and the CI static-build jobs both run on Linux and always # execute the gate. if [ "$(uname -s)" != "Linux" ]; then - echo "boot-smoke: host is $(uname -s), not Linux; skipping (cannot run the linux/amd64 binary natively here)" + echo "boot-smoke: host is $(uname -s), not Linux; skipping (cannot run a linux binary natively here)" exit 0 fi +# Refuse a binary built for another architecture. Without this the run reaches `seid +# init`, dies with an exec-format error, and reports "did not reach the ABCI handshake", +# which reads as a crashing binary rather than the wrong file being passed in. +elf_machine=$(od -An -tx1 -j18 -N2 "$BIN" | tr -d ' \n') +case "$(uname -m)" in + x86_64) host_machine=3e00 ;; + aarch64|arm64) host_machine=b700 ;; + *) echo "boot-smoke: unsupported host architecture $(uname -m)" >&2; exit 1 ;; +esac +if [ "$elf_machine" != "$host_machine" ]; then + echo "boot-smoke: ERROR: $BIN is not a $(uname -m) binary (ELF e_machine $elf_machine)." >&2 + echo " This gate must run on hardware matching the binary under test." >&2 + exit 1 +fi + for i in $(seq 1 "$BOOTS"); do H=$(mktemp -d) "$BIN" init smoke --chain-id "$CHAIN_ID" --home "$H" >/dev/null 2>&1 diff --git a/scripts/build-static.sh b/scripts/build-static.sh index 6c99e06877..b8cbdaa799 100755 --- a/scripts/build-static.sh +++ b/scripts/build-static.sh @@ -1,49 +1,87 @@ #!/usr/bin/env bash -# Build the statically-linked linux/amd64 `seid` in Alpine (musl-native). -# Single source of truth for the static build: used by the goreleaser `before:` hook, +# Build a statically-linked `seid` in Alpine (musl-native) for one target architecture. +# Single source of truth for the static build: used by the goreleaser `before:` hooks, # the cross-arch CI guard, and local runs (`goreleaser release --snapshot`). It also -# self-verifies (required libwasmvm archives present, and the output is actually static) -# so every entry point fails fast rather than producing or shipping a broken binary. +# self-verifies (required libwasmvm archives present, the pinned libgcc matches its +# checksums, the output is actually static and carries no b-tree unwinder) so every +# entry point fails fast rather than producing or shipping a broken binary. +# +# Usage: build-static.sh [amd64|arm64] (default amd64) +# +# Output is build/seid-, so the two architectures do not overwrite each other. # # Ubuntu's musl-gcc can't fully static-link on 24.04 (glibc libgcc needs _dl_find_object, # absent in musl) and zig cc rejects the -z muldefs flag needed for the libwasmvm -# v152/v155 archives; Alpine's GNU ld + musl links cleanly. --platform linux/amd64 is a -# no-op on amd64 CI and forces the right arch on Apple Silicon for local runs. +# v152/v155 archives; Alpine's GNU ld + musl links cleanly. The pinned golang image +# digest is a multi-arch index, so the same pin serves both targets. Building a +# non-native architecture needs binfmt registered on the host. # -# The link takes libgcc from third_party/alpine-gcc10-libgcc instead of the build +# The link takes libgcc from third_party/alpine-gcc10-libgcc/ instead of the build # image's toolchain: gcc >= 12's unwind-frame registry (a lock-free b-tree) corrupts # under wasmer's JIT frame registration and SIGSEGVs at the genesis wasm store on most -# boots, so the static binary must carry the pre-b-tree registry. See that directory's -# README.md for the full story and provenance. The nm assertion below keeps a toolchain -# upgrade from silently reintroducing the b-tree. +# boots, on both architectures. See that directory's README.md for the full story and +# provenance. The nm assertion below keeps a toolchain upgrade from silently +# reintroducing the b-tree. set -euo pipefail +ARCH="${1:-amd64}" +case "$ARCH" in + amd64) LIBGCC_ARCH=x86_64 ;; + arm64) LIBGCC_ARCH=aarch64 ;; + *) echo "build-static: unsupported architecture '$ARCH' (want amd64 or arm64)" >&2; exit 1 ;; +esac + # Fail fast if the required static libwasmvm archives are missing. bash "$(dirname "$0")/check-libwasmvm-static.sh" -LIBGCC_DIR="third_party/alpine-gcc10-libgcc" +LIBGCC_DIR="third_party/alpine-gcc10-libgcc/$LIBGCC_ARCH" +OUT="build/seid-$ARCH" -docker run --rm --platform linux/amd64 -v "$PWD":/src -w /src golang:1.25.6-alpine@sha256:98e6cffc31ccc44c7c15d83df1d69891efee8115a5bb7ede2bf30a38af3e3c92 sh -c ' +# The checksums and the -L directory are both derived from $LIBGCC_ARCH above, so a +# build cannot verify one architecture's archives while linking another's. +case "$LIBGCC_ARCH" in + x86_64) + LIBGCC_SHA=d3e066fafde74d53a89d48f2ceb9ed9934249a5d450e281edd22947a829469d8 + LIBGCC_EH_SHA=d14c9973a735909e11a863b0c850300bfd3aa683ef4689cbe76a53139766ed79 + ;; + aarch64) + LIBGCC_SHA=119d1714e0a2b47e1d829d0e92dc3ab51a25e1778f67ed43d2e6c87469573cc2 + LIBGCC_EH_SHA=2963a26e62a46ee283c5463ebaad176ddf74b6a049850df833cee5f333ca57a9 + ;; +esac + +echo "build-static: target linux/$ARCH, libgcc pin $LIBGCC_DIR" + +docker run --rm --platform "linux/$ARCH" -v "$PWD":/src -w /src golang:1.25.6-alpine@sha256:98e6cffc31ccc44c7c15d83df1d69891efee8115a5bb7ede2bf30a38af3e3c92 sh -c ' set -e apk add --no-cache build-base git git config --global --add safe.directory /src printf "%s %s\n%s %s\n" \ - d3e066fafde74d53a89d48f2ceb9ed9934249a5d450e281edd22947a829469d8 '"$LIBGCC_DIR"'/libgcc.a \ - d14c9973a735909e11a863b0c850300bfd3aa683ef4689cbe76a53139766ed79 '"$LIBGCC_DIR"'/libgcc_eh.a \ + '"$LIBGCC_SHA"' '"$LIBGCC_DIR"'/libgcc.a \ + '"$LIBGCC_EH_SHA"' '"$LIBGCC_DIR"'/libgcc_eh.a \ | sha256sum -c - LINK_STATICALLY=true BUILD_TAGS=muslc LEDGER_ENABLED=false \ STATIC_EXTRA_LDFLAGS="-L/src/'"$LIBGCC_DIR"'" make build - if nm build/seid | grep -q version_lock_lock_exclusive; then + mv build/seid '"$OUT"' + # Materialise the symbol table as its own command so `set -e` aborts when nm fails. + # Reading nm through a pipe into grep reports the grep status, so a broken nm would + # otherwise read as "no b-tree symbols found" and pass. + nm '"$OUT"' > /tmp/seid.syms + if grep -q version_lock_lock_exclusive /tmp/seid.syms; then echo "build-static: ERROR: binary contains the gcc>=12 unwind b-tree (libgcc pin not applied)" >&2 exit 1 fi echo "build-static: pre-b-tree unwinder confirmed (no version_lock symbols)"' -# Assert the output really is statically linked, so a regression fails here rather than -# shipping a dynamically-linked binary advertised as static. -info="$(file build/seid)" +# Assert the output really is statically linked and built for the requested architecture, +# so a regression fails here rather than shipping a mislabelled binary. +info="$(file "$OUT")" echo "$info" case "$info" in *"statically linked"*) ;; - *) echo "build-static: ERROR: build/seid is not statically linked" >&2; exit 1 ;; + *) echo "build-static: ERROR: $OUT is not statically linked" >&2; exit 1 ;; +esac +case "$ARCH:$info" in + amd64:*x86-64*|arm64:*aarch64*) ;; + *) echo "build-static: ERROR: $OUT is not a linux/$ARCH binary" >&2; exit 1 ;; esac diff --git a/scripts/goreleaser-shim.sh b/scripts/goreleaser-shim.sh index 17c4a1913d..6df256ef91 100755 --- a/scripts/goreleaser-shim.sh +++ b/scripts/goreleaser-shim.sh @@ -10,18 +10,19 @@ # Pro's `prebuilt` builder would do, but on the OSS distribution. Wired via `builds[].tool` # in .goreleaser.yaml. # -# The prebuilt binary path can be overridden with $PREBUILT_SEID (defaults to build/seid). +# The prebuilt binary for each architecture is build/seid-, as produced by +# scripts/build-static.sh. Override with $PREBUILT_SEID_AMD64 / $PREBUILT_SEID_ARM64. set -euo pipefail -PREBUILT="${PREBUILT_SEID:-build/seid}" - if [ "${1:-}" = "build" ]; then - # The prebuilt binary is linux/amd64 only. If goreleaser ever requests another arch - # (e.g. once arm64 lands, PLT-757), fail loudly rather than mislabel the amd64 binary. - if [ -n "${GOARCH:-}" ] && [ "$GOARCH" != "amd64" ]; then - echo "goreleaser-shim: only linux/amd64 is prebuilt; refusing to package for GOARCH=$GOARCH." >&2 - exit 1 - fi + # Resolve the prebuilt binary for the architecture goreleaser asked for. Anything else + # fails loudly rather than mislabelling one architecture's binary as another's. + case "${GOARCH:-}" in + amd64) PREBUILT="${PREBUILT_SEID_AMD64:-build/seid-amd64}" ;; + arm64) PREBUILT="${PREBUILT_SEID_ARM64:-build/seid-arm64}" ;; + *) echo "goreleaser-shim: no prebuilt binary for GOARCH=${GOARCH:-unset}; refusing to package." >&2 + exit 1 ;; + esac # Extract the output path GoReleaser asked us to write the binary to. Handle both # `-o ` (what goreleaser emits) and `-o=`, so the shim is robust either way. @@ -40,6 +41,14 @@ if [ "${1:-}" = "build" ]; then exit 1 fi + # A mislabelled archive is worse than a failed release, so check the ELF machine of the + # resolved binary rather than trusting its filename. + info="$(file -b "$PREBUILT")" + case "$GOARCH:$info" in + amd64:*x86-64*|arm64:*aarch64*) ;; + *) echo "goreleaser-shim: $PREBUILT is not a $GOARCH binary ($info)." >&2; exit 1 ;; + esac + mkdir -p "$(dirname "$out")" cp "$PREBUILT" "$out" echo "goreleaser-shim: packaged prebuilt $PREBUILT into $out" >&2 diff --git a/third_party/alpine-gcc10-libgcc/README.md b/third_party/alpine-gcc10-libgcc/README.md index c2968375f0..577f7e6c10 100644 --- a/third_party/alpine-gcc10-libgcc/README.md +++ b/third_party/alpine-gcc10-libgcc/README.md @@ -1,8 +1,14 @@ # Pinned pre-gcc-12 libgcc for the static seid build -`libgcc.a` and `libgcc_eh.a` from Alpine 3.15's gcc 10.3.1 package. The static -build (`scripts/build-static.sh`) links these ahead of the build image's own -libgcc via `STATIC_EXTRA_LDFLAGS=-L`. +`libgcc.a` and `libgcc_eh.a` from Alpine 3.15's gcc 10.3.1 package, one pair per +target architecture. The static build (`scripts/build-static.sh`) links the pair +matching its target ahead of the build image's own libgcc via +`STATIC_EXTRA_LDFLAGS=-L/`. + +``` +x86_64/ for linux/amd64 +aarch64/ for linux/arm64 +``` ## Why @@ -18,12 +24,19 @@ Dynamically linked glibc builds use the shared `libgcc_s` runtime path and never hit this; upstream wasmd's static binaries link a pre-b-tree libgcc, which is what this pin restores. +The defect is not architecture specific. `ATOMIC_FDE_FAST_PATH`, the macro that +selects the b-tree registry, is gated on atomics support rather than on a target +allowlist, and an unpinned arm64 static `seid` reproducibly SIGSEGVs on the first +boot under `RAYON_NUM_THREADS=1`. Both architectures need the pin. + `scripts/build-static.sh` verifies these archives' checksums before the build and asserts the final binary contains no `version_lock_lock_exclusive` symbol, so a toolchain upgrade cannot silently reintroduce the b-tree registry. ## Provenance +### x86_64 + Extracted from `https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/gcc-10.3.1_git20211027-r0.apk` @@ -31,11 +44,29 @@ Extracted from - libgcc.a sha256: `d3e066fafde74d53a89d48f2ceb9ed9934249a5d450e281edd22947a829469d8` - libgcc_eh.a sha256: `d14c9973a735909e11a863b0c850300bfd3aa683ef4689cbe76a53139766ed79` -To re-derive: - ```sh wget https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/gcc-10.3.1_git20211027-r0.apk tar -xzf gcc-10.3.1_git20211027-r0.apk \ usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/libgcc.a \ usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/libgcc_eh.a ``` + +### aarch64 + +Extracted from +`https://dl-cdn.alpinelinux.org/alpine/v3.15/main/aarch64/gcc-10.3.1_git20211027-r0.apk` + +- apk sha256: `9edc3e2a6fafa434ba55b33d5c19ba49107ed7a49607af939252c98b3b280417` +- libgcc.a sha256: `119d1714e0a2b47e1d829d0e92dc3ab51a25e1778f67ed43d2e6c87469573cc2` +- libgcc_eh.a sha256: `2963a26e62a46ee283c5463ebaad176ddf74b6a049850df833cee5f333ca57a9` + +```sh +wget https://dl-cdn.alpinelinux.org/alpine/v3.15/main/aarch64/gcc-10.3.1_git20211027-r0.apk +tar -xzf gcc-10.3.1_git20211027-r0.apk \ + usr/lib/gcc/aarch64-alpine-linux-musl/10.3.1/libgcc.a \ + usr/lib/gcc/aarch64-alpine-linux-musl/10.3.1/libgcc_eh.a +``` + +The aarch64 `libgcc.a` is much smaller than its x86_64 counterpart (308 KB +against 3.0 MB). That is the expected difference in builtin set between the two +targets, not a truncated download; the checksums above are authoritative. diff --git a/third_party/alpine-gcc10-libgcc/aarch64/libgcc.a b/third_party/alpine-gcc10-libgcc/aarch64/libgcc.a new file mode 100644 index 0000000000000000000000000000000000000000..cf6ee572950f4d54ed1691e839726fc9784aaa08 GIT binary patch literal 308672 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 literal 0 HcmV?d00001 diff --git a/third_party/alpine-gcc10-libgcc/aarch64/libgcc_eh.a b/third_party/alpine-gcc10-libgcc/aarch64/libgcc_eh.a new file mode 100644 index 0000000000000000000000000000000000000000..d0cb3c439ce60abb0f3a48a97d8f33af7638f52a GIT binary patch literal 343260 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 literal 0 HcmV?d00001 diff --git a/third_party/alpine-gcc10-libgcc/libgcc.a b/third_party/alpine-gcc10-libgcc/x86_64/libgcc.a similarity index 100% rename from third_party/alpine-gcc10-libgcc/libgcc.a rename to third_party/alpine-gcc10-libgcc/x86_64/libgcc.a diff --git a/third_party/alpine-gcc10-libgcc/libgcc_eh.a b/third_party/alpine-gcc10-libgcc/x86_64/libgcc_eh.a similarity index 100% rename from third_party/alpine-gcc10-libgcc/libgcc_eh.a rename to third_party/alpine-gcc10-libgcc/x86_64/libgcc_eh.a From be8a3ea132546617e6cd01322e02dfcce49c33e1 Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Tue, 25 Aug 2026 20:51:39 +1000 Subject: [PATCH 2/7] fix(release): pin the binfmt image and add a positive control to the b-tree check The binfmt hook ran a mutable tag of a third-party image with --privileged on the release runner, which holds the credentials that publish the binaries. Everything comparable in this repo is pinned: the golang build image by digest, every action by commit SHA, and the docker workflows use a pinned setup-qemu-action. Pin the image by digest so this hook is not the exception. The b-tree assertion was absence-only, so an empty or truncated symbol table satisfied it vacuously: a stripped binary reports zero b-tree symbols and the build prints "pre-b-tree unwinder confirmed". Assert first that the symbol table contains __register_frame, the entry point wasmer calls and one every libgcc provides whether pinned or not, so its absence means the table is unusable rather than the pin being wrong. Verified against a stripped copy of the arm64 binary: the old assertion passes it, the positive control rejects it. --- .goreleaser.yaml | 4 +++- scripts/build-static.sh | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 78d3664a81..01d020f5a9 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -6,7 +6,9 @@ before: hooks: - go mod download # The release runner is amd64, so building linux/arm64 needs binfmt registered. - - docker run --privileged --rm tonistiigi/binfmt --install arm64 + # Pinned by digest: this runs privileged on the release runner, which holds the + # credentials that publish the binaries. + - docker run --privileged --rm tonistiigi/binfmt:qemu-v8.1.5@sha256:2d2918e86e5327d0661f7083d67a95280b0f7be8f77ed79a8418f81d7d90ce6f --install arm64 # build-static.sh self-verifies per architecture (libwasmvm archives present, pinned # libgcc checksums match, output is static, no gcc>=12 b-tree unwinder). - bash scripts/build-static.sh amd64 diff --git a/scripts/build-static.sh b/scripts/build-static.sh index b8cbdaa799..f3b015f918 100755 --- a/scripts/build-static.sh +++ b/scripts/build-static.sh @@ -67,6 +67,14 @@ docker run --rm --platform "linux/$ARCH" -v "$PWD":/src -w /src golang:1.25.6-al # Reading nm through a pipe into grep reports the grep status, so a broken nm would # otherwise read as "no b-tree symbols found" and pass. nm '"$OUT"' > /tmp/seid.syms + # Positive control. The b-tree check below is absence-only, so an empty or truncated + # symbol table would satisfy it vacuously. __register_frame is the entry point wasmer + # calls and every libgcc provides it, pinned or not, so its absence means the symbol + # table is unusable rather than the pin being wrong. + if ! grep -q __register_frame /tmp/seid.syms; then + echo "build-static: ERROR: no unwinder symbols in '"$OUT"'; the b-tree assertion would pass vacuously" >&2 + exit 1 + fi if grep -q version_lock_lock_exclusive /tmp/seid.syms; then echo "build-static: ERROR: binary contains the gcc>=12 unwind b-tree (libgcc pin not applied)" >&2 exit 1 From 1dd6f85fc6df454277b5efdd448039aa342ff38e Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Tue, 25 Aug 2026 22:21:04 +1000 Subject: [PATCH 3/7] fix(release): boot the arm64 binary in the release hooks and record build digests The arm64 binary that ships was never booted. Its safety rested on being byte-identical to the natively built binary the Linux ARM64 (static) job boots, and nothing enforced that. build-static.sh runs apk add build-base against a live branch index, so the toolchain can move underneath the pinned image digest and change the output without anything noticing. Boot the arm64 binary in the release hooks, under emulation, so the artefact that ships is the one booted. Emulated timing is not trusted to surface the gcc>=12 unwind b-tree, so the native arm64 job still runs the full gauntlet on real hardware; the release hook is a liveness check on the shipped bytes. boot-smoke.sh now probes whether the host can execute the binary rather than comparing its ELF machine to uname -m. The equality check would have rejected exactly the case the release hook needs, since binfmt makes a foreign binary runnable, and probing execution tests the thing that matters instead of a proxy for it. It still fails closed, with a message naming binfmt. build-static.sh prints the sha256 of each binary it produces, at the one point every caller passes through, so a CI build and a later release build of the same commit can be compared rather than assumed equal. Verified locally: an emulated boot completes well inside boot-smoke's 25s cap (amd64 on arm64, the mirror of the release runner's case), the native path still passes, and a binary the host cannot execute is rejected with exit 1. --- .goreleaser.yaml | 4 ++++ scripts/boot-smoke.sh | 21 +++++++++------------ scripts/build-static.sh | 9 +++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 01d020f5a9..d77bdd020c 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -19,6 +19,10 @@ before: # Linux ARM64 (static) CI job, which runs the same 8-boot gauntlet on arm64 hardware # against a bit-identical build of the same commit. - bash scripts/boot-smoke.sh build/seid-amd64 4 + # The arm64 binary boots here under emulation, so the artefact that ships is the one + # booted. Emulated timing is not trusted to surface the gcc>=12 unwind b-tree, which + # is why the Linux ARM64 (static) job still runs the full gauntlet on real hardware. + - bash scripts/boot-smoke.sh build/seid-arm64 4 builds: # The static seid is built in Alpine (musl-native) by the `before:` hook above diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index cff37762b4..1a0fe1632a 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -34,18 +34,15 @@ if [ "$(uname -s)" != "Linux" ]; then exit 0 fi -# Refuse a binary built for another architecture. Without this the run reaches `seid -# init`, dies with an exec-format error, and reports "did not reach the ABCI handshake", -# which reads as a crashing binary rather than the wrong file being passed in. -elf_machine=$(od -An -tx1 -j18 -N2 "$BIN" | tr -d ' \n') -case "$(uname -m)" in - x86_64) host_machine=3e00 ;; - aarch64|arm64) host_machine=b700 ;; - *) echo "boot-smoke: unsupported host architecture $(uname -m)" >&2; exit 1 ;; -esac -if [ "$elf_machine" != "$host_machine" ]; then - echo "boot-smoke: ERROR: $BIN is not a $(uname -m) binary (ELF e_machine $elf_machine)." >&2 - echo " This gate must run on hardware matching the binary under test." >&2 +# Refuse a binary this host cannot execute. Natively that means a matching +# architecture; with binfmt registered a foreign one runs too, which is how the release +# hook boots the arm64 binary on an amd64 runner. Probing execution covers both, and +# without it the run reaches `seid init`, dies with an exec-format error, and reports +# "did not reach the ABCI handshake", which reads as a crashing binary rather than a +# binary this machine was never able to run. +if ! "$BIN" version >/dev/null 2>&1; then + echo "boot-smoke: ERROR: cannot execute $BIN on $(uname -m)." >&2 + echo " For a foreign architecture, register binfmt before running this." >&2 exit 1 fi diff --git a/scripts/build-static.sh b/scripts/build-static.sh index f3b015f918..fd85a2b571 100755 --- a/scripts/build-static.sh +++ b/scripts/build-static.sh @@ -93,3 +93,12 @@ case "$ARCH:$info" in amd64:*x86-64*|arm64:*aarch64*) ;; *) echo "build-static: ERROR: $OUT is not a linux/$ARCH binary" >&2; exit 1 ;; esac + +# Record the digest so a CI build and a later release build of the same commit can be +# compared. `apk add build-base` resolves against a live branch index, so the toolchain +# can move underneath a pinned image digest and silently change the output. +if command -v sha256sum >/dev/null 2>&1; then + echo "build-static: sha256 $(sha256sum "$OUT" | cut -d" " -f1) $OUT" +else + echo "build-static: sha256 $(shasum -a 256 "$OUT" | cut -d" " -f1) $OUT" +fi From f586615087c7e3103fb5b9fa2f560b223e8e81ee Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Thu, 27 Aug 2026 10:46:09 +1000 Subject: [PATCH 4/7] fix(release): let the boot window scale for emulated runs boot-smoke bounded every boot at a fixed 25 seconds, sized for a native boot where the handshake lands about a second in. The release hook now boots the arm64 binary under emulation on an amd64 runner, where wasmer's JIT compile at the genesis wasm store is the slow part and emulation multiplies it. A healthy binary could be killed before reaching the handshake and fail the whole release. Introduce BOOT_TIMEOUT, defaulting to 25 so every existing caller is unchanged, and give the emulated arm64 hook 120 seconds. The real case cannot be measured on an arm64 workstation: only amd64 can be emulated here, possibly through Rosetta, while the release runner emulates arm64 under QEMU. The window is therefore set for headroom rather than tuned to a number that would not transfer. --- .goreleaser.yaml | 2 +- scripts/boot-smoke.sh | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index d77bdd020c..8f29e753fc 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -22,7 +22,7 @@ before: # The arm64 binary boots here under emulation, so the artefact that ships is the one # booted. Emulated timing is not trusted to surface the gcc>=12 unwind b-tree, which # is why the Linux ARM64 (static) job still runs the full gauntlet on real hardware. - - bash scripts/boot-smoke.sh build/seid-arm64 4 + - BOOT_TIMEOUT=120 bash scripts/boot-smoke.sh build/seid-arm64 4 builds: # The static seid is built in Alpine (musl-native) by the `before:` hook above diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index 1a0fe1632a..c3b5bf0620 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -18,10 +18,17 @@ # Linux-only (runs the linux/amd64 binary natively; uses GNU timeout). # # Usage: boot-smoke.sh [boots] +# +# BOOT_TIMEOUT (seconds, default 25) bounds each boot. The default is sized for a +# native boot, where the handshake lands about a second in. Raise it when the binary +# runs under emulation, which the release hook does for arm64 on an amd64 runner: +# wasmer's JIT compile at the genesis wasm store is the slow part and emulation +# multiplies it, so a native-sized window can kill a healthy binary. set -euo pipefail BIN=${1:?usage: boot-smoke.sh [boots]} BOOTS=${2:-8} +BOOT_TIMEOUT=${BOOT_TIMEOUT:-25} CHAIN_ID=boot-smoke-1 # Linux-only: this gate runs the binary natively and uses GNU timeout. Skip cleanly on @@ -61,7 +68,7 @@ for i in $(seq 1 "$BOOTS"); do [ "$i" -eq 1 ] && RAYON="RAYON_NUM_THREADS=1" LOG="$H/start.log" - env $RAYON timeout -k 5 25 "$BIN" start --home "$H" >"$LOG" 2>&1 || true + env $RAYON timeout -k 5 "$BOOT_TIMEOUT" "$BIN" start --home "$H" >"$LOG" 2>&1 || true if grep -qE "SIGSEGV|SIGILL|SIGBUS|panic:" "$LOG"; then echo "boot-smoke: boot $i/$BOOTS CRASHED${RAYON:+ (RAYON_NUM_THREADS=1)}:" >&2 From 35204b99ec419eb7c543b83d3cbb2db2751f5df2 Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Thu, 27 Aug 2026 11:42:55 +1000 Subject: [PATCH 5/7] fix(release): make the release hook runnable and each boot failure self-describing The arm64 boot hook could never have run. GoReleaser execs a before-hook directly rather than through a shell, so the BOOT_TIMEOUT=300 prefix was taken as the program name: "exec: BOOT_TIMEOUT=300: executable file not found in $PATH". The before pipe aborts on that, so a release would have published a tag with no artefacts at all, including the amd64 tarball that ships today. Reproduced on goreleaser 2.15.4 and fixed by invoking through env. Gating the execution probe behind the foreign-architecture test left the case the gate exists to catch with no diagnostic: a native binary that cannot run its own subcommands skipped the probe, reached the unchecked seid init, and errexit killed the script with zero output. Run the probe for every binary and branch only the message, so a foreign binary is told to register binfmt and a native one reports that seid version failed, with its output. BOOT_TIMEOUT was the guaranteed cost of every boot rather than a ceiling, because seid start never exits on its own. A budget large enough to be safe under emulation was therefore also the price paid on every healthy boot. End a boot shortly after the handshake appears, keeping a brief dwell so a crash just after it still lands in the log. Two boots of the release binary now take 11s where they took ~50s, which is what makes 4 boots at a 300s ceiling affordable. Read the ELF header once and length-check it, so a truncated file reports itself instead of dying inside od. Verified: the preserved b-tree binary is still caught on boot 1, the pinned binary still passes, and each of missing path, non-executable, non-ELF, truncated header, unrunnable foreign binary and broken native binary reports its own cause. --- .github/workflows/cross-arch-build.yml | 8 +-- .goreleaser.yaml | 20 +++--- scripts/boot-smoke.sh | 88 +++++++++++++++++++++----- 3 files changed, 86 insertions(+), 30 deletions(-) diff --git a/.github/workflows/cross-arch-build.yml b/.github/workflows/cross-arch-build.yml index e6fc9d555b..361330255c 100644 --- a/.github/workflows/cross-arch-build.yml +++ b/.github/workflows/cross-arch-build.yml @@ -182,8 +182,9 @@ jobs: name: "Linux ARM64 (static)" runs-on: ubuntu-24.04-arm needs: [static-paths] - # Same gating as the amd64 static job. This is the only place the arm64 release - # binary is booted: the release runner is amd64 and cannot execute it. + # Same gating as the amd64 static job. The release hook also boots the arm64 binary + # through binfmt, but only this job boots it on arm64 hardware, which is what the + # gcc>=12 unwind b-tree needs to surface reliably. if: >- !cancelled() && ( startsWith(github.base_ref, 'release/') || @@ -197,8 +198,7 @@ jobs: uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # Native arm64, so no binfmt or emulation is involved and the boots below run on - # real hardware. The release job builds the same commit under emulation; the build - # is reproducible, so the binary gated here is the one that ships. + # real hardware. - name: Build statically (Alpine / musl) run: bash scripts/build-static.sh arm64 diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 8f29e753fc..946e90956c 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -13,16 +13,18 @@ before: # libgcc checksums match, output is static, no gcc>=12 b-tree unwinder). - bash scripts/build-static.sh amd64 - bash scripts/build-static.sh arm64 - # Boot the binary before packaging: catches crash-at-first-wasm-use defects that - # neither a successful link nor `seid version` can (see scripts/boot-smoke.sh). Only - # the native architecture can be booted here; the arm64 binary is gated by the - # Linux ARM64 (static) CI job, which runs the same 8-boot gauntlet on arm64 hardware - # against a bit-identical build of the same commit. + # Boot both binaries before packaging: catches crash-at-first-wasm-use defects that + # neither a successful link nor `seid version` can (see scripts/boot-smoke.sh). The + # arm64 boots run through binfmt, so the artefact that ships is the one booted. - bash scripts/boot-smoke.sh build/seid-amd64 4 - # The arm64 binary boots here under emulation, so the artefact that ships is the one - # booted. Emulated timing is not trusted to surface the gcc>=12 unwind b-tree, which - # is why the Linux ARM64 (static) job still runs the full gauntlet on real hardware. - - BOOT_TIMEOUT=120 bash scripts/boot-smoke.sh build/seid-arm64 4 + # Emulated timing is not trusted to surface the gcc>=12 unwind b-tree, so this is a + # liveness check on the shipped bytes rather than the real gate: the Linux ARM64 + # (static) job runs the full 8-boot gauntlet on arm64 hardware. Two boots here cover + # both threading modes; more would only repeat what that job already does, at + # emulated speed. + # `env` is required: goreleaser execs the hook directly rather than through a shell, + # so a bare VAR=value prefix would be taken as the program name. + - env BOOT_TIMEOUT=300 bash scripts/boot-smoke.sh build/seid-arm64 4 builds: # The static seid is built in Alpine (musl-native) by the `before:` hook above diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index c3b5bf0620..e4e052684c 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -15,15 +15,16 @@ # StoreCode calls succeed (Sei stores its built-in pointer contracts at InitChain), which # is exactly the code path that crashes. # -# Linux-only (runs the linux/amd64 binary natively; uses GNU timeout). +# Linux-only (uses GNU timeout). Runs the binary natively, or through binfmt when it +# was built for another architecture, which is how the release hook boots the arm64 +# binary on an amd64 runner. # # Usage: boot-smoke.sh [boots] # -# BOOT_TIMEOUT (seconds, default 25) bounds each boot. The default is sized for a -# native boot, where the handshake lands about a second in. Raise it when the binary -# runs under emulation, which the release hook does for arm64 on an amd64 runner: -# wasmer's JIT compile at the genesis wasm store is the slow part and emulation -# multiplies it, so a native-sized window can kill a healthy binary. +# BOOT_TIMEOUT (seconds, default 25) is the ceiling for one boot, not its cost: a boot +# ends shortly after the handshake appears. Raise it when the binary runs under +# emulation, which the release hook does for arm64 on an amd64 runner, since wasmer's +# JIT compile at the genesis wasm store is the slow part and emulation multiplies it. set -euo pipefail BIN=${1:?usage: boot-smoke.sh [boots]} @@ -41,15 +42,38 @@ if [ "$(uname -s)" != "Linux" ]; then exit 0 fi -# Refuse a binary this host cannot execute. Natively that means a matching -# architecture; with binfmt registered a foreign one runs too, which is how the release -# hook boots the arm64 binary on an amd64 runner. Probing execution covers both, and -# without it the run reaches `seid init`, dies with an exec-format error, and reports -# "did not reach the ABCI handshake", which reads as a crashing binary rather than a -# binary this machine was never able to run. +# Classify the binary before running it, so each failure reports its own cause. The +# execution probe alone cannot: a missing path, a non-executable file, a foreign +# architecture and a seid that crashes in `version` all fail it, and reporting them all +# as a binfmt problem hides the one this gate exists to catch. +[ -e "$BIN" ] || { echo "boot-smoke: ERROR: $BIN does not exist." >&2; exit 1; } +[ -x "$BIN" ] || { echo "boot-smoke: ERROR: $BIN is not executable." >&2; exit 1; } + +# Read the ELF header once and length-check it, so a non-ELF or truncated file reports +# itself rather than yielding a garbage machine value or dying inside od. +elf_header=$(od -An -tx1 -N20 "$BIN" | tr -d ' \n') +if [ "${#elf_header}" -ne 40 ] || [ "${elf_header:0:8}" != "7f454c46" ]; then + echo "boot-smoke: ERROR: $BIN is not an ELF binary, or its header is truncated." >&2 + exit 1 +fi +elf_machine=${elf_header:36:4} +case "$(uname -m)" in + x86_64) host_machine=3e00 ;; + aarch64|arm64) host_machine=b700 ;; + *) echo "boot-smoke: unsupported host architecture $(uname -m)" >&2; exit 1 ;; +esac + +# The probe runs for every binary, so a native one that cannot run its own subcommands is +# still reported. Only the message branches on architecture: a foreign binary that fails +# here needs binfmt, a native one that fails is the defect this gate exists to catch. if ! "$BIN" version >/dev/null 2>&1; then - echo "boot-smoke: ERROR: cannot execute $BIN on $(uname -m)." >&2 - echo " For a foreign architecture, register binfmt before running this." >&2 + if [ "$elf_machine" != "$host_machine" ]; then + echo "boot-smoke: ERROR: $BIN is a foreign-architecture binary (e_machine $elf_machine)" >&2 + echo " that this host ($(uname -m)) cannot run; register binfmt first." >&2 + else + echo "boot-smoke: ERROR: $BIN is a native $(uname -m) binary but 'seid version' failed:" >&2 + "$BIN" version >&2 2>&1 || true + fi exit 1 fi @@ -68,15 +92,45 @@ for i in $(seq 1 "$BOOTS"); do [ "$i" -eq 1 ] && RAYON="RAYON_NUM_THREADS=1" LOG="$H/start.log" - env $RAYON timeout -k 5 "$BOOT_TIMEOUT" "$BIN" start --home "$H" >"$LOG" 2>&1 || true + # Stop as soon as the handshake lands rather than waiting out the budget: BOOT_TIMEOUT + # is the ceiling for a slow boot, not the price of a healthy one. Without this an + # emulated budget large enough to be safe would also be the guaranteed cost. + rc=0 + saw_handshake=0 + env $RAYON timeout -k 5 "$BOOT_TIMEOUT" "$BIN" start --home "$H" >"$LOG" 2>&1 & + boot_pid=$! + while kill -0 "$boot_pid" 2>/dev/null; do + if grep -q "Completed ABCI Handshake" "$LOG" 2>/dev/null; then + saw_handshake=1 + # Brief dwell so a crash immediately after the handshake still reaches the log. + sleep 3 + kill "$boot_pid" 2>/dev/null || true + break + fi + sleep 1 + done + wait "$boot_pid" 2>/dev/null || rc=$? if grep -qE "SIGSEGV|SIGILL|SIGBUS|panic:" "$LOG"; then echo "boot-smoke: boot $i/$BOOTS CRASHED${RAYON:+ (RAYON_NUM_THREADS=1)}:" >&2 tail -25 "$LOG" >&2 exit 1 fi - if ! grep -q "Completed ABCI Handshake" "$LOG"; then - echo "boot-smoke: boot $i/$BOOTS did not reach the ABCI handshake${RAYON:+ (RAYON_NUM_THREADS=1)}:" >&2 + # A healthy boot is killed by `timeout` too, since the node keeps running once the + # handshake completes, so the exit status alone cannot tell the two apart. The + # handshake decides; the status then says whether the budget ran out or the process + # left on its own, which are different problems with different fixes. + if [ "$saw_handshake" -eq 0 ] && ! grep -q "Completed ABCI Handshake" "$LOG"; then + case "$rc" in + 124|137) + echo "boot-smoke: boot $i/$BOOTS TIMED OUT after ${BOOT_TIMEOUT}s before the ABCI handshake${RAYON:+ (RAYON_NUM_THREADS=1)}." >&2 + echo " The binary may be healthy but too slow for this budget; raise BOOT_TIMEOUT" >&2 + echo " if it is running under emulation." >&2 + ;; + *) + echo "boot-smoke: boot $i/$BOOTS exited (status $rc) before the ABCI handshake${RAYON:+ (RAYON_NUM_THREADS=1)}:" >&2 + ;; + esac tail -25 "$LOG" >&2 exit 1 fi From 74d9d2c2e4b618aac9baba09d68cd08094c86b42 Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Thu, 27 Aug 2026 18:48:29 +1000 Subject: [PATCH 6/7] ci: verify goreleaser before-hooks are executable, and tighten the boot gate Nothing in CI runs goreleaser, so every entry in before.hooks is an unexecuted string until a tag is pushed, and this change grew that list from two entries to six. The failure that reached review was argv[0] not resolving, which is checkable in milliseconds: shell-split each entry and assert command -v finds the program. Runs in the amd64 static job, which the .goreleaser.yaml path filter already routes. Verified by reintroducing the original defect, which the check rejects and names the fix for. The arm64 hook ran four boots while the comment beside it argued for two. The argument is the correct one: boot 1 is the single-threaded repro and the rest are identical default-threaded repeats of what the native arm64 job already does, so the code follows the comment rather than the other way round. The crash grep now reads a snapshot taken before the boot is terminated. The signal arrives seconds after the handshake now rather than at a settled node, so shutdown output from a half-started node would otherwise be read as a crash. Not observed, but a false positive here costs a tag with no artefacts. Restores the "To re-derive:" lead-in lost from the libgcc provenance sections. Verified after the change: the preserved b-tree binary is still caught on boot 1, the pinned binary still passes, two boots in 10s. --- .github/workflows/cross-arch-build.yml | 7 +++- .goreleaser.yaml | 2 +- scripts/boot-smoke.sh | 7 +++- scripts/check-goreleaser-hooks.sh | 51 +++++++++++++++++++++++ third_party/alpine-gcc10-libgcc/README.md | 4 ++ 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100755 scripts/check-goreleaser-hooks.sh diff --git a/.github/workflows/cross-arch-build.yml b/.github/workflows/cross-arch-build.yml index 361330255c..d559883cd3 100644 --- a/.github/workflows/cross-arch-build.yml +++ b/.github/workflows/cross-arch-build.yml @@ -112,7 +112,7 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | - PATTERN='^(scripts/(build-static|boot-smoke|check-libwasmvm-static|goreleaser-shim)\.sh|Makefile|third_party/alpine-gcc10-libgcc/|sei-wasmvm/internal/api/link_|sei-wasmd/x/wasm/artifacts/v[0-9]+/api/link_|link_(constraints|directives)_test\.go|\.goreleaser\.yaml|\.github/workflows/cross-arch-build\.yml)' + PATTERN='^(scripts/(build-static|boot-smoke|check-libwasmvm-static|goreleaser-shim|check-goreleaser-hooks)\.sh|Makefile|third_party/alpine-gcc10-libgcc/|sei-wasmvm/internal/api/link_|sei-wasmd/x/wasm/artifacts/v[0-9]+/api/link_|link_(constraints|directives)_test\.go|\.goreleaser\.yaml|\.github/workflows/cross-arch-build\.yml)' FILES=$(gh api "repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files" --paginate -q '.[].filename') if echo "$FILES" | grep -qE "$PATTERN"; then echo "changed=true" >> "$GITHUB_OUTPUT" @@ -146,6 +146,11 @@ jobs: # the -z muldefs flag needed to link the libwasmvm v152/v155 archives. Alpine's # gcc is GNU ld + musl, so it links cleanly. Same script the goreleaser release # build runs (scripts/build-static.sh); goreleaser then packages it via the tool shim. + # goreleaser is never run by CI, so its before-hooks are unexecuted strings until a + # tag is pushed. This catches an unrunnable hook in milliseconds instead. + - name: Verify goreleaser before-hooks are executable + run: bash scripts/check-goreleaser-hooks.sh + - name: Build statically (Alpine / musl) run: bash scripts/build-static.sh amd64 diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 946e90956c..8dd4f188fb 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -24,7 +24,7 @@ before: # emulated speed. # `env` is required: goreleaser execs the hook directly rather than through a shell, # so a bare VAR=value prefix would be taken as the program name. - - env BOOT_TIMEOUT=300 bash scripts/boot-smoke.sh build/seid-arm64 4 + - env BOOT_TIMEOUT=300 bash scripts/boot-smoke.sh build/seid-arm64 2 builds: # The static seid is built in Alpine (musl-native) by the `before:` hook above diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index e4e052684c..c478f68d48 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -97,6 +97,7 @@ for i in $(seq 1 "$BOOTS"); do # emulated budget large enough to be safe would also be the guaranteed cost. rc=0 saw_handshake=0 + crash_log="$LOG" env $RAYON timeout -k 5 "$BOOT_TIMEOUT" "$BIN" start --home "$H" >"$LOG" 2>&1 & boot_pid=$! while kill -0 "$boot_pid" 2>/dev/null; do @@ -104,6 +105,10 @@ for i in $(seq 1 "$BOOTS"); do saw_handshake=1 # Brief dwell so a crash immediately after the handshake still reaches the log. sleep 3 + # Snapshot before the TERM. The signal now arrives seconds after the handshake, + # while blocksync and the RPC servers are still starting, so a panic on a + # half-initialised shutdown path would otherwise be read as a crash. + cp "$LOG" "$LOG.run" && crash_log="$LOG.run" kill "$boot_pid" 2>/dev/null || true break fi @@ -111,7 +116,7 @@ for i in $(seq 1 "$BOOTS"); do done wait "$boot_pid" 2>/dev/null || rc=$? - if grep -qE "SIGSEGV|SIGILL|SIGBUS|panic:" "$LOG"; then + if grep -qE "SIGSEGV|SIGILL|SIGBUS|panic:" "$crash_log"; then echo "boot-smoke: boot $i/$BOOTS CRASHED${RAYON:+ (RAYON_NUM_THREADS=1)}:" >&2 tail -25 "$LOG" >&2 exit 1 diff --git a/scripts/check-goreleaser-hooks.sh b/scripts/check-goreleaser-hooks.sh new file mode 100755 index 0000000000..fc96782d9a --- /dev/null +++ b/scripts/check-goreleaser-hooks.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# Assert every .goreleaser.yaml before-hook can actually be executed. +# +# GoReleaser execs a hook directly rather than through a shell, so argv[0] must be a +# real program on PATH: a bare `VAR=value cmd` prefix is taken as the program name and +# the whole before pipe aborts, publishing a tag with no artefacts. Nothing else in CI +# runs goreleaser, so without this check every hook is an unexecuted string until a tag +# is pushed. +set -euo pipefail + +CONFIG="${1:-.goreleaser.yaml}" + +# mapfile is bash 4+, absent on the macOS bash a developer runs this with, so read the +# list into a temp file and loop over it instead. +hooks_file=$(mktemp) +trap 'rm -f "$hooks_file"' EXIT +python3 -c ' +import sys, yaml +cfg = yaml.safe_load(open(sys.argv[1])) +for h in (cfg.get("before") or {}).get("hooks") or []: + # hooks are either a plain string or {cmd: ..., env: [...]} + print(h if isinstance(h, str) else h.get("cmd", "")) +' "$CONFIG" > "$hooks_file" + +count=$(grep -c . "$hooks_file" || true) +if [ "$count" -eq 0 ]; then + echo "check-goreleaser-hooks: no before hooks found in $CONFIG" >&2 + exit 1 +fi + +failed=0 +while IFS= read -r hook; do + [ -n "$hook" ] || continue + # shellcheck disable=SC2086 # deliberate: split exactly as goreleaser's shellwords does + set -- $hook + prog=$1 + if command -v "$prog" >/dev/null 2>&1; then + printf ' ok %-8s %s\n' "$prog" "$hook" + else + printf ' FAIL %-8s %s\n' "$prog" "$hook" + case "$prog" in + *=*) echo " argv[0] is an environment assignment. GoReleaser does not use a shell;" >&2 + echo " prefix the command with 'env' instead." >&2 ;; + *) echo " argv[0] is not on PATH." >&2 ;; + esac + failed=1 + fi +done < "$hooks_file" + +[ "$failed" -eq 0 ] || { echo "check-goreleaser-hooks: at least one hook cannot be executed" >&2; exit 1; } +echo "check-goreleaser-hooks: all $count before hooks resolve to an executable" diff --git a/third_party/alpine-gcc10-libgcc/README.md b/third_party/alpine-gcc10-libgcc/README.md index 577f7e6c10..00993dca45 100644 --- a/third_party/alpine-gcc10-libgcc/README.md +++ b/third_party/alpine-gcc10-libgcc/README.md @@ -44,6 +44,8 @@ Extracted from - libgcc.a sha256: `d3e066fafde74d53a89d48f2ceb9ed9934249a5d450e281edd22947a829469d8` - libgcc_eh.a sha256: `d14c9973a735909e11a863b0c850300bfd3aa683ef4689cbe76a53139766ed79` +To re-derive: + ```sh wget https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/gcc-10.3.1_git20211027-r0.apk tar -xzf gcc-10.3.1_git20211027-r0.apk \ @@ -60,6 +62,8 @@ Extracted from - libgcc.a sha256: `119d1714e0a2b47e1d829d0e92dc3ab51a25e1778f67ed43d2e6c87469573cc2` - libgcc_eh.a sha256: `2963a26e62a46ee283c5463ebaad176ddf74b6a049850df833cee5f333ca57a9` +To re-derive: + ```sh wget https://dl-cdn.alpinelinux.org/alpine/v3.15/main/aarch64/gcc-10.3.1_git20211027-r0.apk tar -xzf gcc-10.3.1_git20211027-r0.apk \ From 545d44e7fe0e25f6216579cb4e823e07544033a4 Mon Sep 17 00:00:00 2001 From: Monty Guilhaus Date: Thu, 27 Aug 2026 21:03:22 +1000 Subject: [PATCH 7/7] fix(ci): make the hook check cover the hook it was written for The check resolved argv[0] and stopped, so `env BOOT_TIMEOUT=300 bash ...` passed on `env` being present and the real program was never looked at. The one hook that needed `env`, and the one the check was written for, was the one hook exempt from it: `env BOOT_TIMEOUT=300 bahs scripts/boot-smoke.sh` would have passed and still aborted the release. Resolve past `env` and the VAR=value operands it consumes. Four of the six hooks only proved that bash exists. When argv[0] is an interpreter, check that the script it runs is readable, so a renamed path fails here rather than at tag time. builds[].tool is exec'd the same way and is now covered too, taking the config from one hook meaningfully checked to seven. The script dropped mapfile for the bash macOS ships, then depended on python3 with PyYAML, which stock macOS python3 does not have: on the machine the comment named, it was more likely to fail than what it replaced, as a bare traceback. Check for the import and say what is missing. Globbing is disabled around the split so a hook containing * is not expanded against the working directory. The six per-boot setup invocations discarded both streams and run outside timeout, so a failure aborted under set -e with no output, which from a goreleaser hook is an unexplained non-zero exit. Each step now names itself and tails its log. This PR is what first runs them under emulation, where they are the same slow path as the boot. Verified: dropping env, a typo after env, a renamed script, and env with no command are each rejected with their own message; a failing setup step reports which one and why; the preserved b-tree binary is still caught on boot 1 and the pinned binary still passes. --- .github/workflows/cross-arch-build.yml | 10 +-- scripts/boot-smoke.sh | 25 +++++-- scripts/check-goreleaser-hooks.sh | 96 ++++++++++++++++++-------- 3 files changed, 92 insertions(+), 39 deletions(-) diff --git a/.github/workflows/cross-arch-build.yml b/.github/workflows/cross-arch-build.yml index d559883cd3..f645d0ba4c 100644 --- a/.github/workflows/cross-arch-build.yml +++ b/.github/workflows/cross-arch-build.yml @@ -146,14 +146,14 @@ jobs: # the -z muldefs flag needed to link the libwasmvm v152/v155 archives. Alpine's # gcc is GNU ld + musl, so it links cleanly. Same script the goreleaser release # build runs (scripts/build-static.sh); goreleaser then packages it via the tool shim. - # goreleaser is never run by CI, so its before-hooks are unexecuted strings until a - # tag is pushed. This catches an unrunnable hook in milliseconds instead. - - name: Verify goreleaser before-hooks are executable - run: bash scripts/check-goreleaser-hooks.sh - - name: Build statically (Alpine / musl) run: bash scripts/build-static.sh amd64 + # goreleaser is never run by CI, so its hooks are unexecuted strings until a tag is + # pushed. This catches an unrunnable hook in milliseconds instead. + - name: Verify goreleaser hooks are executable + run: bash scripts/check-goreleaser-hooks.sh + - name: Assert binary is statically linked run: | info=$(file ./build/seid-amd64) diff --git a/scripts/boot-smoke.sh b/scripts/boot-smoke.sh index c478f68d48..70b7b12c48 100755 --- a/scripts/boot-smoke.sh +++ b/scripts/boot-smoke.sh @@ -79,13 +79,28 @@ fi for i in $(seq 1 "$BOOTS"); do H=$(mktemp -d) - "$BIN" init smoke --chain-id "$CHAIN_ID" --home "$H" >/dev/null 2>&1 + SETUP_LOG="$H/setup.log" + + # Each setup step names itself on failure. These run outside `timeout` and used to + # discard both streams, so under `set -e` a failure aborted with no output at all, + # which from a goreleaser hook is an unexplained non-zero exit. They are also the same + # slow emulated path as the boot itself when the binary is foreign. + setup () { + local what=$1; shift + if ! "$@" >>"$SETUP_LOG" 2>&1; then + echo "boot-smoke: boot $i/$BOOTS failed during setup ($what):" >&2 + tail -25 "$SETUP_LOG" >&2 + exit 1 + fi + } + + setup "init" "$BIN" init smoke --chain-id "$CHAIN_ID" --home "$H" sed -i 's/"stake"/"usei"/g' "$H/config/genesis.json" - "$BIN" keys add val --keyring-backend test --home "$H" >/dev/null 2>&1 + setup "keys add" "$BIN" keys add val --keyring-backend test --home "$H" ADDR=$("$BIN" keys show val -a --keyring-backend test --home "$H") - "$BIN" add-genesis-account "$ADDR" 100000000000000usei --home "$H" >/dev/null - "$BIN" gentx val 10000000000000usei --chain-id "$CHAIN_ID" --keyring-backend test --home "$H" >/dev/null 2>&1 - "$BIN" collect-gentxs --home "$H" >/dev/null 2>&1 + setup "add-genesis-account" "$BIN" add-genesis-account "$ADDR" 100000000000000usei --home "$H" + setup "gentx" "$BIN" gentx val 10000000000000usei --chain-id "$CHAIN_ID" --keyring-backend test --home "$H" + setup "collect-gentxs" "$BIN" collect-gentxs --home "$H" # First boot: force the deterministic single-threaded repro. Others: default threading. RAYON="" diff --git a/scripts/check-goreleaser-hooks.sh b/scripts/check-goreleaser-hooks.sh index fc96782d9a..1e3633fd48 100755 --- a/scripts/check-goreleaser-hooks.sh +++ b/scripts/check-goreleaser-hooks.sh @@ -1,51 +1,89 @@ #!/usr/bin/env bash -# Assert every .goreleaser.yaml before-hook can actually be executed. +# Assert every .goreleaser.yaml hook can actually be executed. # -# GoReleaser execs a hook directly rather than through a shell, so argv[0] must be a -# real program on PATH: a bare `VAR=value cmd` prefix is taken as the program name and -# the whole before pipe aborts, publishing a tag with no artefacts. Nothing else in CI -# runs goreleaser, so without this check every hook is an unexecuted string until a tag -# is pushed. +# GoReleaser execs a hook directly rather than through a shell, so argv[0] must be a real +# program on PATH: a bare `VAR=value cmd` prefix is taken as the program name and the +# whole before pipe aborts, publishing a tag with no artefacts. Nothing else in CI runs +# goreleaser, so without this check every hook is an unexecuted string until a tag is +# pushed. set -euo pipefail CONFIG="${1:-.goreleaser.yaml}" -# mapfile is bash 4+, absent on the macOS bash a developer runs this with, so read the -# list into a temp file and loop over it instead. -hooks_file=$(mktemp) -trap 'rm -f "$hooks_file"' EXIT +python3 -c 'import yaml' 2>/dev/null || { + echo "check-goreleaser-hooks: needs python3 with PyYAML (pip install pyyaml)" >&2 + exit 1 +} + +# mapfile is bash 4+, absent on the bash macOS ships, so collect into a file and loop. +entries=$(mktemp) +trap 'rm -f "$entries"' EXIT python3 -c ' import sys, yaml -cfg = yaml.safe_load(open(sys.argv[1])) +cfg = yaml.safe_load(open(sys.argv[1])) or {} for h in (cfg.get("before") or {}).get("hooks") or []: - # hooks are either a plain string or {cmd: ..., env: [...]} + # a hook is either a plain string or {cmd: ..., env: [...]} print(h if isinstance(h, str) else h.get("cmd", "")) -' "$CONFIG" > "$hooks_file" +# builds[].tool is exec'"'"'d the same way, so it belongs to the same class. +for b in cfg.get("builds") or []: + if b.get("tool"): + print(b["tool"]) +' "$CONFIG" > "$entries" -count=$(grep -c . "$hooks_file" || true) -if [ "$count" -eq 0 ]; then - echo "check-goreleaser-hooks: no before hooks found in $CONFIG" >&2 - exit 1 -fi +count=$(grep -c . "$entries" || true) +[ "$count" -gt 0 ] || { echo "check-goreleaser-hooks: no hooks found in $CONFIG" >&2; exit 1; } + +fail () { printf ' FAIL %s\n' "$1"; shift; for line in "$@"; do echo " $line" >&2; done; failed=1; } failed=0 +# Word-splitting here stands in for goreleaser's shellwords. Disable globbing so a hook +# containing * is not expanded against the working directory; quoting is not reproduced, +# which is fine for the simple hooks this config uses. +set -f while IFS= read -r hook; do [ -n "$hook" ] || continue - # shellcheck disable=SC2086 # deliberate: split exactly as goreleaser's shellwords does + # shellcheck disable=SC2086 # deliberate split, see above set -- $hook + + # `env` moves the real program along, so resolve past it and the VAR=value operands it + # consumes. Without this the one hook that needs `env` is the one hook not checked. + if [ "$1" = "env" ] || [ "$1" = "/usr/bin/env" ]; then + shift + while [ $# -gt 0 ]; do + case "$1" in *=*) shift ;; *) break ;; esac + done + [ $# -gt 0 ] || { fail "$hook" "env is given no command to run."; continue; } + fi + prog=$1 - if command -v "$prog" >/dev/null 2>&1; then - printf ' ok %-8s %s\n' "$prog" "$hook" - else - printf ' FAIL %-8s %s\n' "$prog" "$hook" + if ! command -v "$prog" >/dev/null 2>&1; then case "$prog" in - *=*) echo " argv[0] is an environment assignment. GoReleaser does not use a shell;" >&2 - echo " prefix the command with 'env' instead." >&2 ;; - *) echo " argv[0] is not on PATH." >&2 ;; + *=*) fail "$hook" "argv[0] is an environment assignment. GoReleaser does not use a shell;" \ + "prefix the command with 'env' instead." ;; + *) fail "$hook" "argv[0] ($prog) is not on PATH." ;; esac - failed=1 + continue fi -done < "$hooks_file" + + # An interpreter proves only that the interpreter exists, so check the script it runs. + script="" + case "$prog" in + bash|sh|/bin/bash|/bin/sh) + shift + while [ $# -gt 0 ]; do + case "$1" in -*) shift ;; *) script=$1; break ;; esac + done + ;; + ./*|scripts/*) script=$prog ;; + esac + if [ -n "$script" ] && [ ! -r "$script" ]; then + fail "$hook" "runs '$script', which does not exist or is not readable." + continue + fi + + printf ' ok %-34s %s\n' "$prog${script:+ -> $script}" "$hook" +done < "$entries" +set +f [ "$failed" -eq 0 ] || { echo "check-goreleaser-hooks: at least one hook cannot be executed" >&2; exit 1; } -echo "check-goreleaser-hooks: all $count before hooks resolve to an executable" +echo "check-goreleaser-hooks: all $count hooks resolve to an executable program and script"