fix(cicd): publish the site changelog from the release-notes backfill - #37389
fix(cicd): publish the site changelog from the release-notes backfill#37389sfreudenthaler wants to merge 2 commits into
Conversation
The backfill workflow had one job: it regenerated the GitHub release body and stopped. Nothing carried that body to dev.dotcms.com, so a release whose notes generation failed published an empty site entry that no later backfill could repair. Four entries are sitting empty right now (26.08.28-01, 26.08.31-01, 26.08.31-02, 26.09.02-01) with correct GitHub release bodies behind them. Add a resolve job that recovers the two inputs a backfill can't inherit from a deployment phase, then call the existing publish phase: - Docker image, from Docker Hub. Selected on a 7-hex sha suffix rather than a bare "_", because <version>_tainted tags exist and a looser match prefers them. Verified to reproduce exactly what all four original runs passed. - Availability date, from the release's published_at. publisher.py writes released_date through verbatim on the update path, so the phase's $(date -u +%F) default would relabel an old entry with today. The publish phase gains an optional released_date input for that; omitted, it still defaults to today, so the release pipeline is unchanged. Closes: #37388 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Claude finished @sfreudenthaler's task in 23s —— View job Claude finished @sfreudenthaler's task in 2m 18s —— View job Code ReviewReviewed the two workflow changes against New Issues
Notes (non-blocking, verified correct)
Neither finding is blocking. The first is the more meaningful one — worth closing the date path's failure gap so it matches the (already-hard-failing) image path. • branch |
wezell
left a comment
There was a problem hiding this comment.
good, though you could have just had claude do it from your local
that’s how i did it cuz i wasn’t sure who’d be around to approve. This is so that I don’t have to do it next time ;) |
resolve-site-inputs carried a custom `if` with no status function, leaving it dependent on GitHub's implicit-success() behaviour for jobs. State it explicitly: a backfill whose notes regeneration failed must not go on to republish the site. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Closes: #37388
Problem
Four entries on the public changelog render with a title, date and docker tag but no notes —
26.08.28-01,26.08.31-01,26.08.31-02,26.09.02-01. Their GitHub release bodies are fine (2.2k–6.8k chars). The site never got them.flowchart TD subgraph before["before"] R1[Release run] --> N1["Generate notes<br/>❌ failed"] N1 --> E1["GitHub release body:<br/>empty"] E1 --> P1["Site publish<br/>✅ 'succeeded'<br/>published empty"] B1[Backfill] --> F1["GitHub release body:<br/>repaired"] F1 -.->|no path| P1 end subgraph after["after"] B2[Backfill] --> F2["GitHub release body:<br/>repaired"] F2 --> RS[Resolve site inputs] RS --> P2["Site publish<br/>entry repaired"] end style P1 fill:#ffdddd,stroke:#cc0000 style P2 fill:#ddffdd,stroke:#00aa00cicd_ai-release-notes-backfill.ymlhad exactly one job —Generate Notes. It wrote the GitHub release body and stopped, so once an entry was published empty nothing could ever repair it.(The reason they published empty in the first place is a separate defect: the phase's
[ ! -s ]guard doesn't fire because--jq .bodywrites a bare newline for an empty body — 1 byte, not 0. Tracked separately, deliberately not fixed here.)Change
A
resolve-site-inputsjob recovers the two things a backfill can't inherit from a deployment phase, then hands off to the existing publish phase. Net +78 / −1 across two files, no new tooling.Docker image — selected on a 7-hex sha suffix, not a bare
_:26.08.28-01_taintedand26.08.31-01_taintedboth exist and a looser match prefers them. Verified the selector reproduces exactly what each original run passed:docker_tags26.08.28-01_d5ab3fddotcms/dotcms:26.08.28-01_d5ab3fd ...✅26.08.31-01_a6d1271dotcms/dotcms:26.08.31-01_a6d1271 ...✅26.08.31-02_b1a33f2dotcms/dotcms:26.08.31-02_b1a33f2 ...✅26.09.02-01_2460a36dotcms/dotcms:26.09.02-01_2460a36 ...✅Negative case checked too —
_taintedis not selected.Availability date — from the release's
published_at.publisher.py:154writesreleased_datethrough verbatim on the update path, so the phase's$(date -u +%F)default would have relabelled26.08.28-01as "Available: Sep 3, 2026". The phase gains an optionalreleased_dateinput; omitted, it still defaults to today, so the release pipeline is behaviourally unchanged.Deliberate choices
allow_failure. The release pipeline sets it so a changelog hiccup can never fail a software release (FR-008). A backfill has no release to protect, and a silent failure is the exact condition this PR ends.:<version>tag — the site entry records the deployed image, and a backfill has no deployment to vouch for a guess.Repairing the existing four
Not done by this PR. Once merged, dispatching the backfill for each of the four tags repairs them; the publisher upserts, so it updates the existing entries in place rather than duplicating.
🤖 Generated with Claude Code