From 5175ab9d5bf586854874aa370d69d1baf4e8cda0 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sun, 5 Jul 2026 17:20:37 -0500 Subject: [PATCH] fix(release): make changelog promote idempotent (no duplicate version headers) The promote step unconditionally inserted "## [version]" after "## [Unreleased]" on every build, so repeated or same-version releases produced empty, duplicated version headers (e.g. two "## [02.56.07]"). Guard the insert on the version header not already being present. Local stopgap; the same fix is needed in the template auto-release.yml (tracked in Template-Generic). Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- .mokogitea/workflows/auto-release.yml | 11 +++++++---- CHANGELOG.md | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.mokogitea/workflows/auto-release.yml b/.mokogitea/workflows/auto-release.yml index 1bb92072..f2063cbd 100644 --- a/.mokogitea/workflows/auto-release.yml +++ b/.mokogitea/workflows/auto-release.yml @@ -380,10 +380,13 @@ jobs: import sys version, date = sys.argv[1], sys.argv[2] content = open('CHANGELOG.md').read() - old = '## [Unreleased]' - new = f'## [Unreleased]\n\n## [{version}] --- {date}' - content = content.replace(old, new, 1) - open('CHANGELOG.md', 'w').write(content) + marker = f'## [{version}]' + # Idempotent: only promote when this version header isn't already present, + # otherwise re-runs (or same-version builds) create empty duplicate headers. + if marker not in content: + new = f'## [Unreleased]\n\n{marker} --- {date}' + content = content.replace('## [Unreleased]', new, 1) + open('CHANGELOG.md', 'w').write(content) " "$VERSION" "$DATE" git add CHANGELOG.md git commit -m "chore: promote changelog [Unreleased] → [${VERSION}]" || true diff --git a/CHANGELOG.md b/CHANGELOG.md index 9792d5fa..f84c1675 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog ## [Unreleased] +### Fixed +- Release automation: the changelog-promote step is now idempotent — it only inserts a `## [version]` header when that version isn't already present, preventing the empty, duplicated version headers that repeated/same-version builds were producing. (workflow) + ## [02.56.08] --- 2026-07-05 ## [02.56.08] --- 2026-07-05