diff --git a/README.md b/README.md index c782e38..ffb2234 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,6 @@ logger.debug("state", () => buildHugeSnapshot()); // skipped when debug is suppr Woodpecker verifies pull requests and `main`, reports CI to Mattermost, then automatically releases from Conventional Commits merged to `main`. It updates `package.json` and `CHANGELOG.md`, creates a `vX.Y.Z` tag, and publishes to the private `@mifi` registry. -Use `fix:` for a patch, `feat:` for a minor release, and `!` or a `BREAKING CHANGE:` footer for a major release. Commits such as `docs:`, `test:`, and `chore:` do not release a package. +Use `fix:` for a patch, `feat:` for a minor release, and `feat!` / `fix!` (or a `BREAKING CHANGE:` footer) for a major release. Commits such as `docs:`, `test:`, and `chore:` do not release a package. The release workflow uses the existing global `gitea_package_token`, `gitea_registry_username`, `gitea_release_token`, `mattermost_bot_access_token`, `mattermost_tests_channel_id`, `mattermost_pushes_channel_id`, and `mattermost_post_api_url` secrets. diff --git a/release.config.cjs b/release.config.cjs index c5cbc3f..2114e9c 100644 --- a/release.config.cjs +++ b/release.config.cjs @@ -5,13 +5,23 @@ const repositoryUrl = ? `https://${encodeURIComponent(releaseUsername)}:${encodeURIComponent(releaseToken)}@git.mifi.dev/mifi/logger.git` : "https://git.mifi.dev/mifi/logger.git"; +/** + * Default Angular preset rejects `feat!` / `fix!` headers entirely (no release). + * These parser options match Conventional Commits so `!` becomes a BREAKING CHANGE note. + */ +const conventionalCommitParserOpts = { + headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/, + breakingHeaderPattern: /^(\w*)(?:\((.*)\))?!: (.*)$/, + noteKeywords: ["BREAKING CHANGE", "BREAKING-CHANGE"], +}; + module.exports = { branches: ["main"], repositoryUrl, tagFormat: "v${version}", plugins: [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", + ["@semantic-release/commit-analyzer", { parserOpts: conventionalCommitParserOpts }], + ["@semantic-release/release-notes-generator", { parserOpts: conventionalCommitParserOpts }], ["@semantic-release/changelog", { changelogFile: "CHANGELOG.md" }], "@semantic-release/npm", [