返回 CodeWhale
verify-workspace-version.sh
根目录 / scripts / release / verify-workspace-version.sh
1 #!/usr/bin/env bash
2 set -euo pipefail
3
4 expected_version="${1:-}"
5 if [[ -z "${expected_version}" && "${GITHUB_REF:-}" == refs/tags/v* ]]; then
6 expected_version="${GITHUB_REF#refs/tags/v}"
7 fi
8
9 if [[ -z "${expected_version}" ]]; then
10 echo "usage: $0 <version>" >&2
11 exit 1
12 fi
13
14 python3 - "${expected_version}" <<'PY'
15 import json
16 import subprocess
17 import sys
18
19 expected = sys.argv[1]
20 metadata = json.loads(
21 subprocess.check_output(["cargo", "metadata", "--format-version", "1", "--no-deps"])
22 )
23 workspace_members = set(metadata["workspace_members"])
24 packages = [pkg for pkg in metadata["packages"] if pkg["id"] in workspace_members]
25 mismatches = [
26 f"{pkg['name']}={pkg['version']}" for pkg in packages if pkg["version"] != expected
27 ]
28
29 if mismatches:
30 print(f"Tag version {expected} does not match all workspace crates:", file=sys.stderr)
31 for item in mismatches:
32 print(f" - {item}", file=sys.stderr)
33 sys.exit(1)
34
35 print(f"Verified {len(packages)} workspace packages at version {expected}")
36 PY
37
37 lines BASH