Skip to content

ci(release): lead draft release notes with a Get started + Download header#801

Merged
moonming merged 4 commits into
mainfrom
docs/release-draft-getting-started
Jul 22, 2026
Merged

ci(release): lead draft release notes with a Get started + Download header#801
moonming merged 4 commits into
mainfrom
docs/release-draft-getting-started

Conversation

@moonming

Copy link
Copy Markdown
Collaborator

What & why

Follow-up to the v0.4.0 release: its notes were a bare auto-generated What's Changed list, so I hand-added a Get started + Download header (docs, self-hosted quickstart, docker pull) — the same Kong-style entry points our published releases show. This PR makes that header automatic for every future draft instead of a manual step.

Changes

  • .github/release-notes-header.md (new) — the header template: Documentation + self-hosted quickstart links, and a version-stamped docker pull ghcr.io/api7/aisix:__VERSION__ block. __VERSION__/__MINOR__ are substituted from the tag.
  • .github/workflows/release-draft.yml — now checks out the repo, stamps the tag version into the template, appends GitHub's generated notes (via the releases/generate-notes API), and creates the draft with --notes-file. Behavior otherwise unchanged: still draft-only, still no-op if a release already exists, still flags --prerelease for -rc tags.
  • RELEASING.md — step 2 updated: the header + full-changelog link are pre-filled, so polishing = inserting highlights in the middle; change the header via the template, not per release.

Notes / accuracy

  • Image tag carries no leading v (0.4.0), matching docker-image.yml's output; the git tag stays v0.4.0.
  • __MINOR__ is ${VERSION%.*} — exact for stable (0.4.00.4); for -rc tags it's approximate, which is why the header phrases rolling tags as "listed on the package page" rather than hard-claiming them.
  • Verified locally: YAML lints clean, and the assembled body for v0.4.0 renders correctly (header → --- → What's Changed → Full Changelog).

Test plan

  • Next vX.Y.Z tag push produces a draft whose body leads with the Get started + Download header above What's Changed.
  • docker pull line in the draft resolves (image tag published by docker-image.yml).

🤖 Generated with Claude Code

…eader

The release-draft workflow produced a bare 'What's Changed' list, so every
draft had to be hand-edited to add docs and docker-pull links before it was
useful to a new user (the Kong-style entry points our published releases show).

Make that automatic: a version-stamped header template
(.github/release-notes-header.md) with docs + self-hosted quickstart links and
the 'docker pull ghcr.io/api7/aisix:X.Y.Z' command is spliced above the
auto-generated notes. release-draft.yml now checks out the repo, stamps the
tag version into the template, and appends GitHub's generated notes.

RELEASING.md updated: the header and full-changelog link are pre-filled, so
polishing means inserting highlights in the middle, not re-adding the install
snippet. Edit the template, not each release, to change the header.
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6f73ba8e-64ba-4d8a-8b09-d06cc5c4d1f8

📥 Commits

Reviewing files that changed from the base of the PR and between b3ac72c and 8d7c13d.

📒 Files selected for processing (3)
  • .github/release-notes-header.md
  • .github/workflows/release-draft.yml
  • RELEASING.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/release-draft-getting-started

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

moonming added 2 commits July 22, 2026 12:01
…Changed

The header PR fixed the top of the draft but left the middle a bare
auto-generated commit list — the mechanical part maintainers had to
restructure by hand every release. Seed the themed-section skeleton
(headline, highlights, routing/guardrails/observability/security/API/MCP&A2A,
breaking-changes) as an HTML comment right after the header divider, so every
draft opens with the house structure inline instead of only in RELEASING.md.
The comment is invisible in published output, so an unpolished draft still
renders cleanly.
Address independent-audit findings on the release-draft header:

- MEDIUM: a -rc draft printed a `X.Y` rolling tag (e.g. 0.5.0-rc) that
  docker/metadata-action never publishes for pre-release semver. Move the
  rolling-tags sentence into a __ROLLING_TAGS__ template slot and branch it:
  stable releases keep 'Rolling tags (X.Y, latest)…'; prereleases say
  'Other image tags…' with no copy-pasteable tag that would 404.
- MEDIUM: align actions/checkout to @v6, the repo-wide convention (every
  other workflow pins @v6); the new step had @v4.
- LOW: fall back to a bare 'What's Changed' heading if generate-notes errors,
  so a transient API hiccup still yields a draft with the header.
@moonming

Copy link
Copy Markdown
Collaborator Author

Independent audit — resolved (no HIGH)

Cold audit (verified against main + PR head) returned no HIGH, two MEDIUM, two LOW. All addressed in cfc60d5:

  • MEDIUM — prerelease advertised a nonexistent X.Y tag. ${VERSION%.*} on v0.5.0-rc.1 yielded 0.5.0-rc, but docker/metadata-action skips major.minor for pre-release semver, so that tag is never pushed. Fixed: the rolling-tags sentence is now a __ROLLING_TAGS__ template slot, branched in the workflow — stable keeps Rolling tags (X.Y, latest)…; prereleases say Other image tags… with no copy-pasteable tag that would 404. (The actionable docker pull …:__VERSION__ line was always valid.)
  • MEDIUM — actions/checkout@v4 off-convention. Every other workflow pins @v6; aligned.
  • LOW — generate-notes failure aborted the step before the draft was created. Added a fallback to a bare ## What's Changed heading so a transient API hiccup still yields a draft with the header.
  • LOW (informational) — sed injection. Confirmed safe: the v*.*.* trigger glob can't match /, and semver tags carry no &/#. No change.

Verified locally: YAML lints clean; assembled body for both v0.4.0 and v0.5.0-rc.1 stamps the version correctly, leaves no placeholders, keeps the scaffold comment, and (rc) advertises no bogus rolling tag.

Rebased onto @moonming's aa204eb (curated-notes scaffold) rather than clobbering it.

@moonming
moonming merged commit 5a4ca3c into main Jul 22, 2026
10 checks passed
@moonming
moonming deleted the docs/release-draft-getting-started branch July 22, 2026 04:12
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

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