diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 5ed7cf7..f11bef0 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -52,7 +52,7 @@ jobs: - name: Install release tooling run: pnpm install --frozen-lockfile - name: Verify releasable commit messages - run: node scripts/commit/verify-release-commits.mjs + run: pnpm exec node scripts/commit/verify-release-commits.mjs - name: Semantic release run: pnpm exec semantic-release env: diff --git a/package.json b/package.json index ee55c1b..1b05ddc 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/exec": "^7.0.0", "@semantic-release/release-notes-generator": "^14.0.3", + "conventional-commits-parser": "^6.4.0", "semantic-release": "^25.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b2c1899..15cd0a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@semantic-release/release-notes-generator': specifier: ^14.0.3 version: 14.1.1(semantic-release@25.0.5(typescript@5.9.3)) + conventional-commits-parser: + specifier: ^6.4.0 + version: 6.4.0 semantic-release: specifier: ^25.0.2 version: 25.0.5(typescript@5.9.3) diff --git a/scripts/commit/verify-release-commits.mjs b/scripts/commit/verify-release-commits.mjs index c854f6e..d90dba2 100644 --- a/scripts/commit/verify-release-commits.mjs +++ b/scripts/commit/verify-release-commits.mjs @@ -4,7 +4,9 @@ * Exit 0 always — semantic-release still decides release/no-op. */ import { execSync } from 'node:child_process'; -import parser from 'conventional-commits-parser'; +import { CommitParser } from 'conventional-commits-parser'; + +const parser = new CommitParser(); const RELEASABLE = new Set(['feat', 'fix', 'perf', 'ci', 'refactor']); @@ -32,8 +34,14 @@ const unparseable = []; const releasable = []; for (const { hash, subject } of commits) { - const parsed = parser.sync(subject); - if (!parsed.type) { + let parsed; + try { + parsed = parser.parse(subject); + } catch { + unparseable.push({ hash: hash.slice(0, 7), subject }); + continue; + } + if (!parsed?.type) { unparseable.push({ hash: hash.slice(0, 7), subject }); continue; }