From 3a1e5a49363b10e0760e91dfa1ae05e354486493 Mon Sep 17 00:00:00 2001 From: Adi-204 Date: Sun, 9 Aug 2026 17:35:22 +0530 Subject: [PATCH 1/5] ci: add PR check for changeset and release title alignment Prevents merged PRs from pairing a changeset with a scoped title that skips Release (e.g. fix(hooks):). Fixes asyncapi/generator#2203 --- .../verify-changeset-release-alignment.yml | 43 +++++++++++++++++++ Development.md | 2 + 2 files changed, 45 insertions(+) create mode 100644 .github/workflows/verify-changeset-release-alignment.yml diff --git a/.github/workflows/verify-changeset-release-alignment.yml b/.github/workflows/verify-changeset-release-alignment.yml new file mode 100644 index 0000000000..1dfd6bb0ac --- /dev/null +++ b/.github/workflows/verify-changeset-release-alignment.yml @@ -0,0 +1,43 @@ +# v1: changeset .md in the PR diff and release-style PR title must both be present or both absent. +name: Verify changeset release alignment + +on: + pull_request: + types: [opened, reopened, synchronize, edited, ready_for_review] + +permissions: + contents: read + +jobs: + verify-changeset-release-alignment: + name: Verify changeset release alignment + runs-on: ubuntu-latest + if: > + !github.event.pull_request.draft && + github.event.pull_request.user.login != 'asyncapi-bot' && + github.event.pull_request.user.login != 'dependabot[bot]' && + github.event.pull_request.user.login != 'dependabot-preview[bot]' + env: + # Human squash-merge titles that trigger Release (see release-with-changesets.yml; chore(release): is bot-only and skipped above). + TITLE_TRIGGERS_RELEASE: ${{ startsWith(github.event.pull_request.title, 'fix:') || startsWith(github.event.pull_request.title, 'fix!:') || startsWith(github.event.pull_request.title, 'feat:') || startsWith(github.event.pull_request.title, 'feat!:') }} + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: filter + with: + filters: | + changeset_md: + - '.changeset/**.md' + + - name: Changeset in PR but title will not trigger Release + if: steps.filter.outputs.changeset_md == 'true' && env.TITLE_TRIGGERS_RELEASE != 'true' + run: | + echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!:. See Development.md#release-process." + exit 1 + + - name: Release title but no changeset in PR + if: steps.filter.outputs.changeset_md != 'true' && env.TITLE_TRIGGERS_RELEASE == 'true' + run: | + echo "::error title=Changeset / release title mismatch::Release-style PR title but no .changeset/*.md in this PR. Add a changeset or use a non-release title (docs:, chore:, …). See Development.md#release-process." + exit 1 diff --git a/Development.md b/Development.md index 70911a8ecf..ab2aeccd52 100644 --- a/Development.md +++ b/Development.md @@ -113,6 +113,8 @@ feat: add new feature To ensure successful workflow execution, all PR titles must follow the Conventional Commits format and PR titles should start with a lowercase character. Incorrect PR titles can cause workflow failures, preventing PRs from being merged. For the PR titles you can refer to [this guide](CONTRIBUTING.md?plain=1#L60) +**Changesets and Release:** If the PR includes a new or updated `.changeset/*.md` file, the title must start with `fix:`, `fix!:`, `feat:`, or `feat!:`—not a scoped title like `fix(hooks):`. CI job **Verify changeset release alignment** checks that a changeset and one of those titles appear together. (`chore(release):` is used by release bot PRs, which skip this check.) See [Release process](#release-process) below. + #### Manual 1. Create a new release markdown file in the `.changeset` directory. The filename should indicate what the change is about. From 504772f937254008f35a3d0d1c91f530886843f4 Mon Sep 17 00:00:00 2001 From: Adi-204 Date: Sun, 9 Aug 2026 17:42:14 +0530 Subject: [PATCH 2/5] ci: shorten changeset alignment error messages --- .github/workflows/verify-changeset-release-alignment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/verify-changeset-release-alignment.yml b/.github/workflows/verify-changeset-release-alignment.yml index 1dfd6bb0ac..74ad89fc61 100644 --- a/.github/workflows/verify-changeset-release-alignment.yml +++ b/.github/workflows/verify-changeset-release-alignment.yml @@ -33,11 +33,11 @@ jobs: - name: Changeset in PR but title will not trigger Release if: steps.filter.outputs.changeset_md == 'true' && env.TITLE_TRIGGERS_RELEASE != 'true' run: | - echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!:. See Development.md#release-process." + echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!: (not fix(hooks):)." exit 1 - name: Release title but no changeset in PR if: steps.filter.outputs.changeset_md != 'true' && env.TITLE_TRIGGERS_RELEASE == 'true' run: | - echo "::error title=Changeset / release title mismatch::Release-style PR title but no .changeset/*.md in this PR. Add a changeset or use a non-release title (docs:, chore:, …). See Development.md#release-process." + echo "::error title=Changeset / release title mismatch::Release-style PR title but no .changeset/*.md in this PR. Add a changeset or use a non-release title (docs:, chore:, …)." exit 1 From d49317c9a300f57adb4fa76768c607a6392c31da Mon Sep 17 00:00:00 2001 From: Adi-204 Date: Sun, 9 Aug 2026 17:52:39 +0530 Subject: [PATCH 3/5] ci: inherit GITHUB_TOKEN defaults and link release docs in errors --- .github/workflows/verify-changeset-release-alignment.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/verify-changeset-release-alignment.yml b/.github/workflows/verify-changeset-release-alignment.yml index 74ad89fc61..a1b5ff0f6b 100644 --- a/.github/workflows/verify-changeset-release-alignment.yml +++ b/.github/workflows/verify-changeset-release-alignment.yml @@ -5,9 +5,6 @@ on: pull_request: types: [opened, reopened, synchronize, edited, ready_for_review] -permissions: - contents: read - jobs: verify-changeset-release-alignment: name: Verify changeset release alignment @@ -33,11 +30,11 @@ jobs: - name: Changeset in PR but title will not trigger Release if: steps.filter.outputs.changeset_md == 'true' && env.TITLE_TRIGGERS_RELEASE != 'true' run: | - echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!: (not fix(hooks):)." + echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!: (not fix(hooks):). More info: https://github.com/asyncapi/generator/blob/master/Development.md#release-process" exit 1 - name: Release title but no changeset in PR if: steps.filter.outputs.changeset_md != 'true' && env.TITLE_TRIGGERS_RELEASE == 'true' run: | - echo "::error title=Changeset / release title mismatch::Release-style PR title but no .changeset/*.md in this PR. Add a changeset or use a non-release title (docs:, chore:, …)." + echo "::error title=Changeset / release title mismatch::Release-style PR title but no .changeset/*.md in this PR. Add a changeset or use a non-release title (docs:, chore:, …). More info: https://github.com/asyncapi/generator/blob/master/Development.md#release-process" exit 1 From 60f430307e7797424bbb60c2dfeacfcf0357a0c8 Mon Sep 17 00:00:00 2001 From: Adi-204 Date: Sun, 9 Aug 2026 17:54:16 +0530 Subject: [PATCH 4/5] chore: revert Development.md; add temporary test changeset for CI --- .changeset/test-release-alignment-ci.md | 5 +++++ Development.md | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .changeset/test-release-alignment-ci.md diff --git a/.changeset/test-release-alignment-ci.md b/.changeset/test-release-alignment-ci.md new file mode 100644 index 0000000000..2477f2f8d8 --- /dev/null +++ b/.changeset/test-release-alignment-ci.md @@ -0,0 +1,5 @@ +--- +"@asyncapi/generator": patch +--- + +Temporary changeset to test verify-changeset-release-alignment CI on PR #2204. Remove before merge. diff --git a/Development.md b/Development.md index ab2aeccd52..70911a8ecf 100644 --- a/Development.md +++ b/Development.md @@ -113,8 +113,6 @@ feat: add new feature To ensure successful workflow execution, all PR titles must follow the Conventional Commits format and PR titles should start with a lowercase character. Incorrect PR titles can cause workflow failures, preventing PRs from being merged. For the PR titles you can refer to [this guide](CONTRIBUTING.md?plain=1#L60) -**Changesets and Release:** If the PR includes a new or updated `.changeset/*.md` file, the title must start with `fix:`, `fix!:`, `feat:`, or `feat!:`—not a scoped title like `fix(hooks):`. CI job **Verify changeset release alignment** checks that a changeset and one of those titles appear together. (`chore(release):` is used by release bot PRs, which skip this check.) See [Release process](#release-process) below. - #### Manual 1. Create a new release markdown file in the `.changeset` directory. The filename should indicate what the change is about. From c688183bca2f7fe4c5c7ec0803df3c56fe42eba1 Mon Sep 17 00:00:00 2001 From: Adi-204 Date: Sun, 9 Aug 2026 17:58:34 +0530 Subject: [PATCH 5/5] ci: simplify changeset title error message; remove test changeset --- .changeset/test-release-alignment-ci.md | 5 ----- .github/workflows/verify-changeset-release-alignment.yml | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 .changeset/test-release-alignment-ci.md diff --git a/.changeset/test-release-alignment-ci.md b/.changeset/test-release-alignment-ci.md deleted file mode 100644 index 2477f2f8d8..0000000000 --- a/.changeset/test-release-alignment-ci.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@asyncapi/generator": patch ---- - -Temporary changeset to test verify-changeset-release-alignment CI on PR #2204. Remove before merge. diff --git a/.github/workflows/verify-changeset-release-alignment.yml b/.github/workflows/verify-changeset-release-alignment.yml index a1b5ff0f6b..9d9aeb4afd 100644 --- a/.github/workflows/verify-changeset-release-alignment.yml +++ b/.github/workflows/verify-changeset-release-alignment.yml @@ -30,7 +30,7 @@ jobs: - name: Changeset in PR but title will not trigger Release if: steps.filter.outputs.changeset_md == 'true' && env.TITLE_TRIGGERS_RELEASE != 'true' run: | - echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!: (not fix(hooks):). More info: https://github.com/asyncapi/generator/blob/master/Development.md#release-process" + echo "::error title=Changeset / release title mismatch::This PR changes .changeset/*.md but the squash-merge title will not trigger Release. Use fix:, fix!:, feat:, or feat!: at the start of the title. More info: https://github.com/asyncapi/generator/blob/master/Development.md#release-process" exit 1 - name: Release title but no changeset in PR