fix: avoid pinVersion regression from upstream placeholder version

Upstream main declares [project] version 0.0.0 between releases, which made
the nightly pin regress from 0.21.4 to 0.0.0. Fall back to the latest release
tag's version when the HEAD version is the placeholder, and correct the
current candidate's pinVersion to match. Factor the pyproject version lookup
into update-common.sh so both channels share one implementation.
This commit is contained in:
pullfrog[bot] 2026-09-29 18:52:23 +00:00
commit 5c79db5b06
4 changed files with 27 additions and 11 deletions

View file

@ -28,11 +28,23 @@ if [[ "$current_rev" == "$head_sha" ]]; then
exit 0
fi
upstream_version=$(
gh api -H "Accept: application/vnd.github.raw+json" \
"/repos/NousResearch/hermes-agent/contents/pyproject.toml?ref=${head_sha}" |
python3 -c 'import sys, tomllib; print(tomllib.load(sys.stdin.buffer)["project"]["version"])'
)
upstream_version=$(upstream_pyproject_version "$head_sha")
# Upstream resets the [project] version to a placeholder (0.0.0) on main between
# releases. Pinning that verbatim would regress pinVersion from a real release to
# 0.0.0; update-pins.sh aborts the stable channel on such a downgrade, but the
# nightly tracks unreleased HEAD, so fall back to the latest release's version.
if [[ "$upstream_version" == "0.0.0" ]]; then
release_tag=$(gh api /repos/NousResearch/hermes-agent/releases/latest --jq '.tag_name // empty' || true)
if [[ -n "$release_tag" ]]; then
release_version=$(upstream_pyproject_version "$release_tag" || true)
if [[ -n "$release_version" && "$release_version" != "0.0.0" ]]; then
log "Upstream ${head_sha:0:12} declares a placeholder version; using ${release_tag} version ${release_version}"
upstream_version="$release_version"
fi
fi
fi
python3 - "$upstream_version" <<'PY' || die "upstream pyproject contains an invalid version"
import re, sys
raise SystemExit(0 if re.fullmatch(r"\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?", sys.argv[1]) else 1)