fix(ci): read release version from Cargo.toml, not cargo metadata (ADR-0054)
ci / gate (push) Successful in 3m12s
release / test (push) Successful in 2m44s
release / build (aarch64-pc-windows-gnullvm) (push) Successful in 3m56s
release / build (aarch64-unknown-linux-musl) (push) Successful in 4m18s
release / build (x86_64-pc-windows-gnu) (push) Successful in 4m39s
release / build (x86_64-unknown-linux-musl) (push) Successful in 3m50s
ci / gate (push) Successful in 3m12s
release / test (push) Successful in 2m44s
release / build (aarch64-pc-windows-gnullvm) (push) Successful in 3m56s
release / build (aarch64-unknown-linux-musl) (push) Successful in 4m18s
release / build (x86_64-pc-windows-gnu) (push) Successful in 4m39s
release / build (x86_64-unknown-linux-musl) (push) Successful in 3m50s
The ADR-0054 version guard piped `nix develop -c cargo metadata` to node, but the flake devShell prints a banner to stdout — corrupting the JSON pipe, so the guard aborted under `set -e` and the v0.2.0 release failed there (before building anything). Replace it with a toolchain-free `grep -m1 '^version = ' Cargo.toml` (the anchor excludes dependency `version =` keys). No real version mismatch occurred — the tagged commit has version 0.2.0.
This commit is contained in:
@@ -33,12 +33,17 @@ jobs:
|
||||
TAG: ${{ github.ref_name }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# CARGO_PKG_VERSION is the single source of truth; the binary reports
|
||||
# it via --version / the `version` command. Parse it from cargo
|
||||
# metadata (node is in the CI image; avoids assuming jq).
|
||||
VER=$(nix develop -c cargo metadata --no-deps --format-version 1 \
|
||||
| node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>process.stdout.write(JSON.parse(s).packages[0].version))')
|
||||
echo "tag=$TAG cargo=$VER"
|
||||
# Read the [package] version straight from Cargo.toml — toolchain-free
|
||||
# and robust. (An earlier `nix develop -c cargo metadata | node` version
|
||||
# broke: the flake devShell prints a banner to stdout, corrupting the
|
||||
# JSON pipe.) `^version = ` is anchored, so it matches only the package
|
||||
# version, never the `version = ` inside dependency inline tables.
|
||||
VER=$(grep -m1 '^version = ' Cargo.toml | sed -E 's/^version = "(.*)"/\1/')
|
||||
echo "tag=$TAG cargo=v$VER"
|
||||
if [ -z "$VER" ]; then
|
||||
echo "ERROR: could not read the package version from Cargo.toml" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$TAG" != "v$VER" ]; then
|
||||
echo "ERROR: release tag '$TAG' != 'v$VER' (Cargo.toml). Bump Cargo.toml to the release version, commit, then retag (ADR-0054)." >&2
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user