fix(release): atomic JSON writes, CHANGELOG marker guard, --message validation

This commit is contained in:
Alex 2026-05-22 19:26:51 +02:00
parent 9627486288
commit 46f0b7724d

View File

@ -11,7 +11,14 @@ shift || true
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run) DRY_RUN=1 ;;
--message) MESSAGE="$2"; shift ;;
--message)
if [[ $# -lt 2 || -z "${2:-}" ]]; then
echo "ERROR: --message требует непустой аргумент"
exit 1
fi
MESSAGE="$2"
shift
;;
*) echo "Unknown arg: $1"; exit 1 ;;
esac
shift
@ -63,17 +70,22 @@ import json, sys
version = sys.argv[1]
plugin_json, mcp_json, marketplace_json = sys.argv[2], sys.argv[3], sys.argv[4]
# Phase 1: load all files (fail fast if anything is broken)
with open(plugin_json) as f: p = json.load(f)
p["version"] = version
with open(plugin_json, "w") as f: json.dump(p, f, indent=2, ensure_ascii=False); f.write("\n")
with open(mcp_json) as f: m = json.load(f)
m["mcpServers"]["222a-seo-audit"]["headers"]["X-Plugin-Version"] = version
with open(mcp_json, "w") as f: json.dump(m, f, indent=2, ensure_ascii=False); f.write("\n")
with open(marketplace_json) as f: mk = json.load(f)
# Phase 2: mutate in memory
p["version"] = version
m["mcpServers"]["222a-seo-audit"]["headers"]["X-Plugin-Version"] = version
mk["plugins"][0]["version"] = version
with open(marketplace_json, "w") as f: json.dump(mk, f, indent=2, ensure_ascii=False); f.write("\n")
# Phase 3: write all files (still not fully atomic across files, but all loads succeeded
# so each individual write is a clean replace of a parsed structure)
for path, data in [(plugin_json, p), (mcp_json, m), (marketplace_json, mk)]:
with open(path, "w") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
f.write("\n")
print(f"Updated version to {version} in 3 files")
PY
@ -82,6 +94,13 @@ PY
CHANGELOG="plugins/222a-seo-audit/CHANGELOG.md"
TODAY="$(date +%Y-%m-%d)"
# Проверка, что в CHANGELOG есть якорь [Unreleased]
if ! grep -q '^## \[Unreleased\]' "$CHANGELOG"; then
echo "ERROR: в $CHANGELOG нет секции '## [Unreleased]' — релиз остановлен"
echo "Восстановите якорь и запустите снова."
exit 1
fi
if [[ -n "$MESSAGE" ]]; then
# Вставить новую секцию после "## [Unreleased]"
TMP="$(mktemp)"