feat(cli): --version/-V + in-app version command + release guard (ADR-0054)
Cargo.toml version is the single source of truth, surfaced by a --version/-V CLI flag and an in-app `version` command (both via cli::version_text -> cli.version_line). release.yaml gains a guard that fails the release unless the v* tag equals v<CARGO_PKG_VERSION>, keeping --version, the release name, and the asset in lockstep. New app command wired across grammar/REGISTRY/dispatch/usage/help/hint-corpus/keys; 6 test-first tests. Also fixes a stale "macOS deferred" comment in release.yaml. ADR-0054 + README index + plan-doc step 1.
This commit is contained in:
@@ -5,11 +5,15 @@
|
||||
# Matrix (D1, cross-built from Linux x86_64 via cargo-zigbuild):
|
||||
# x86_64-unknown-linux-musl aarch64-unknown-linux-musl (static, D2)
|
||||
# x86_64-pc-windows-gnu aarch64-pc-windows-gnullvm (standalone .exe)
|
||||
# macOS is deferred — its arboard/AppKit link needs Apple's SDK (see ADR-ci-001).
|
||||
# D3 package-manager manifests layer on later.
|
||||
# The two macOS targets are built separately by the dispatched
|
||||
# release-macos.yaml (native Tart runner; ADR-ci-003 amendment), uploading to
|
||||
# the same release. D3 package-manager manifests layer on later.
|
||||
#
|
||||
# Tests run once (host) before the matrix, so a tag can never publish untested
|
||||
# code, even one pointing at a commit that was never gated on a branch.
|
||||
# code, even one pointing at a commit that was never gated on a branch. The
|
||||
# version guard (ADR-0054) refuses to publish a tag whose vX.Y.Z disagrees with
|
||||
# Cargo.toml's version, keeping `--version`, the release name, and the asset in
|
||||
# lockstep.
|
||||
name: release
|
||||
on:
|
||||
push:
|
||||
@@ -23,6 +27,22 @@ jobs:
|
||||
image: git.lazyeval.net/oli/rdbms-playground-ci:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: version guard — tag must equal Cargo.toml version (ADR-0054)
|
||||
shell: bash
|
||||
env:
|
||||
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"
|
||||
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
|
||||
fi
|
||||
- name: test
|
||||
run: nix develop -c cargo test --no-fail-fast
|
||||
|
||||
|
||||
Reference in New Issue
Block a user