Skip to content

fix(ci): scope nightly release notes to commits since last release - #110

Merged
NonPolynomialTim merged 1 commit into
mainfrom
fix/ci-nightly-notes-since-release
Jul 31, 2026
Merged

fix(ci): scope nightly release notes to commits since last release#110
NonPolynomialTim merged 1 commit into
mainfrom
fix/ci-nightly-notes-since-release

Conversation

@NonPolynomialTim

Copy link
Copy Markdown
Collaborator

Problem

The rolling nightly prerelease notes grow without bound — every nightly re-lists the entire commit history rather than just what's new.

Root cause: publish used generate_release_notes: true on the non-semver nightly tag. GitHub's automatic base-selection can't order nightly against the repo's tag soup (v0.1v2.0.0 plus legacy OpenXcomCoop_*), so it diffs from ~repo start. Deleting/recreating the nightly release each run didn't help — GitHub regenerated the same unbounded list.

Fix

Pin the release-notes diff base to the last official release instead of relying on GitHub's auto base-picker:

  • meta job exports a new lastTag output = git describe --tags --abbrev=0 --match "v[0-9]*"v2.0.0 today. Matches v<digit> to skip legacy junk tags; empty on a tagless repo.
  • Publish now sets generate_release_notes: false. Releases still use the curated CHANGELOG.md body; nightly is published body-less.
  • The notes step now generates the list itself via gh api …/releases/generate-notes -f previous_tag_name=$lastTag, then runs the existing "New Contributors" + by @author strip. Falls back to GitHub's default base when lastTag is empty.

Net: nightly notes span <last v* release>..HEAD and reset at the next official release tag — i.e. "everything since the last release."

Notes

  • Nightly-path only; the versioned-release path is unchanged (still curated CHANGELOG body).
  • Can't be dry-run via workflow_dispatch (non-tag ref → nightly channel → would move the live nightly tag). Exercised on the next push to main. The existing if not "## What's Changed" guard still aborts on malformed notes.

🤖 Generated with Claude Code

The nightly prerelease published with `generate_release_notes: true` on
the non-semver `nightly` tag. GitHub's auto base-selection can't order
`nightly` against the tag soup (v0.1..v2.0.0 + legacy OpenXcomCoop_*),
so it diffs from ~repo start and the notes accumulate every commit ever
made, growing without bound.

Pin the diff base to the last official release instead:
- meta job exports `lastTag` = git describe --match "v[0-9]*" (v2.0.0
  today; skips legacy junk tags; empty on a tagless repo).
- Publish with generate_release_notes: false (release still uses the
  curated CHANGELOG body; nightly is published body-less).
- The notes step now generates the list via
  `gh api .../releases/generate-notes -f previous_tag_name=$lastTag`,
  then runs the existing New-Contributors + `by @author` strip. Falls
  back to GitHub's default base when lastTag is empty.

Net: nightly notes span <last v* release>..HEAD and reset at the next
official release tag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@NonPolynomialTim
NonPolynomialTim enabled auto-merge (squash) July 31, 2026 03:39
@NonPolynomialTim
NonPolynomialTim merged commit 7334aa8 into main Jul 31, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant