[PR #212] ci(publish): refuse a release whose version has no CHANGELOG section #212

Open
opened 2026-10-31 22:05:46 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfy-typescript-sdk/pull/212
Author: @mattmillerai
Created: 10/10/2026
Status: 🔄 Open

Base: main ← Head: matt/publish-requires-changelog-section


📝 Commits (2)

  • e748ddd ci(publish): refuse a release whose version has no CHANGELOG section
  • dd0d45e ci(publish): validate before the changelog gate, anchor it, tag prereleases next

📊 Changes

2 files changed (+42 additions, -2 deletions)

View changed files

📝 .github/workflows/publish.yml (+38 -1)
📝 AGENTS.md (+4 -1)

📄 Description

Summary

Releases are tag-driven, and until now nothing tied the release tag to CHANGELOG.md. v0.4.0 shipped straight off ## [Unreleased], so the changelog never got a 0.4.0 section; it is being reconstructed separately.

  • publish.yml: new step Require a CHANGELOG section for the release version. It runs on release events only, right after Set version from release tag has validated the tag as SemVer, and it reads that step's output instead of re-deriving the version. It fails with an actionable error, including how to recover once the Release is already published, unless CHANGELOG.md at the tagged commit has a ## [X.Y.Z] heading line. The match is anchored to a level-2 heading, so a ### [X.Y.Z] heading or a passing mention does not count. Prerelease versions (-rc.1 and the like) are exempt, and +build metadata is ignored when matching.
  • publish.yml, publish job: a prerelease is now published under the next dist-tag (latest otherwise), so a release candidate the gate waves through never becomes what a plain npm install resolves to.
  • AGENTS.md: the "do not bump version" note now says what a release does need: cut the changelog in a PR before tagging.

The workflow_dispatch dry run is unaffected.

ELI5

You can no longer publish version 0.5.0 unless the changelog has a 0.5.0 section. It stops us from shipping a release nobody wrote down.

Provenance

Asked to make the TypeScript release depend on the changelog, after finding that 0.4.0 had no changelog section.

Verified:

  • I ran the gate's script, extracted from the YAML, locally against the current CHANGELOG.md. 0.3.0, 0.2.0 and 0.3.0+build.1 pass. 0.4.0 fails with the actionable error. 1.0.0-rc.1 is skipped.
  • A changelog containing only ### [9.9.9] and a prose mention of ## [9.9.9] fails the gate.
  • The YAML parses. pnpm format:check and pnpm lint pass.

Deviations:

  • None from the requested scope. The prerelease dist-tag and the step reordering came from the Cursor review panel.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/comfy-typescript-sdk/pull/212 **Author:** [@mattmillerai](https://github.com/mattmillerai) **Created:** 10/10/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `matt/publish-requires-changelog-section` --- ### 📝 Commits (2) - [`e748ddd`](https://github.com/Comfy-Org/comfy-typescript-sdk/commit/e748ddd60546b3150965dec4fa36b0d5451380d5) ci(publish): refuse a release whose version has no CHANGELOG section - [`dd0d45e`](https://github.com/Comfy-Org/comfy-typescript-sdk/commit/dd0d45e8699aeb4c1fe059e6b98eb2d7fa5953d2) ci(publish): validate before the changelog gate, anchor it, tag prereleases next ### 📊 Changes **2 files changed** (+42 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/publish.yml` (+38 -1) 📝 `AGENTS.md` (+4 -1) </details> ### 📄 Description ## Summary Releases are tag-driven, and until now nothing tied the release tag to `CHANGELOG.md`. v0.4.0 shipped straight off `## [Unreleased]`, so the changelog never got a 0.4.0 section; it is being reconstructed separately. - **`publish.yml`:** new step `Require a CHANGELOG section for the release version`. It runs on `release` events only, right after `Set version from release tag` has validated the tag as SemVer, and it reads that step's output instead of re-deriving the version. It fails with an actionable error, including how to recover once the Release is already published, unless `CHANGELOG.md` at the tagged commit has a `## [X.Y.Z]` heading line. The match is anchored to a level-2 heading, so a `### [X.Y.Z]` heading or a passing mention does not count. Prerelease versions (`-rc.1` and the like) are exempt, and `+build` metadata is ignored when matching. - **`publish.yml`, publish job:** a prerelease is now published under the `next` dist-tag (`latest` otherwise), so a release candidate the gate waves through never becomes what a plain `npm install` resolves to. - **AGENTS.md:** the "do not bump `version`" note now says what a release does need: cut the changelog in a PR before tagging. The `workflow_dispatch` dry run is unaffected. ## ELI5 You can no longer publish version 0.5.0 unless the changelog has a 0.5.0 section. It stops us from shipping a release nobody wrote down. ## Provenance Asked to make the TypeScript release depend on the changelog, after finding that 0.4.0 had no changelog section. **Verified:** - I ran the gate's script, extracted from the YAML, locally against the current `CHANGELOG.md`. `0.3.0`, `0.2.0` and `0.3.0+build.1` pass. `0.4.0` fails with the actionable error. `1.0.0-rc.1` is skipped. - A changelog containing only `### [9.9.9]` and a prose mention of `## [9.9.9]` fails the gate. - The YAML parses. `pnpm format:check` and `pnpm lint` pass. **Deviations:** - None from the requested scope. The prerelease dist-tag and the step reordering came from the Cursor review panel. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfy-typescript-sdk#212
No description provided.