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 d262fb2d..749b8933 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Changelog ## [Unreleased] -## [02.56.11] --- 2026-07-05 +### 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.11] --- 2026-07-05