agent-desktop/scripts/check-release-consistency.sh
2026-05-19 18:41:57 -07:00

87 lines
2.2 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
fail() {
echo "FAIL: $*" >&2
exit 1
}
read_toml_version() {
sed -n 's/^version *= *"\([^"]*\)".*/\1/p' Cargo.toml | head -1
}
read_json_version() {
local file="$1"
sed -n 's/.*"version" *: *"\([^"]*\)".*/\1/p' "$file" | head -1
}
read_manifest_version() {
sed -n 's/.*"\." *: *"\([^"]*\)".*/\1/p' .release-please-manifest.json | head -1
}
lock_version_for() {
local package="$1"
awk -v target="$package" '
/^\[\[package\]\]/ {
if (name == target) {
print version
found = 1
exit
}
name = ""
version = ""
next
}
/^name = / {
name = $3
gsub(/"/, "", name)
next
}
/^version = / {
version = $3
gsub(/"/, "", version)
next
}
END {
if (!found && name == target) {
print version
}
}
' Cargo.lock
}
workspace_version="$(read_toml_version)"
npm_version="$(read_json_version npm/package.json)"
manifest_version="$(read_manifest_version)"
[[ -n "$workspace_version" ]] || fail "could not read workspace version from Cargo.toml"
[[ -n "$npm_version" ]] || fail "could not read npm package version"
[[ -n "$manifest_version" ]] || fail "could not read release-please manifest version"
[[ "$npm_version" == "$workspace_version" ]] \
|| fail "npm/package.json version ${npm_version} does not match Cargo.toml ${workspace_version}"
[[ "$manifest_version" == "$workspace_version" ]] \
|| fail ".release-please-manifest.json version ${manifest_version} does not match Cargo.toml ${workspace_version}"
packages=(
agent-desktop
agent-desktop-core
agent-desktop-ffi
agent-desktop-linux
agent-desktop-macos
agent-desktop-windows
)
for package in "${packages[@]}"; do
lock_version="$(lock_version_for "$package")"
[[ -n "$lock_version" ]] || fail "Cargo.lock is missing ${package}"
[[ "$lock_version" == "$workspace_version" ]] \
|| fail "Cargo.lock ${package} version ${lock_version} does not match Cargo.toml ${workspace_version}"
done
cargo metadata --locked --no-deps --format-version 1 >/dev/null
echo "OK: release metadata is internally consistent for ${workspace_version}"