Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: label prs based on conventional commit (#1121)
<!-- markdownlint-disable MD041 --> #### What this PR does / why we need it This makes sure that PR titles pass the conventional commit specification and we add labels based on its conventional context. The following structure is used for this verification: ``` // We know this regex looks scary, but it's just to match the Conventional Commit format // It parses out a Title into several named regex groups, which we can use to extract various semantic patterns: // - type: The type of change (feat, fix, etc.) // - scope: The scope of the change (optional and set in brackets) // - breaking: A flag to indicate a breaking change (!) // - subject: The subject of the change // Example: feat(scope)!: add new feature // ^^^^ ^^^^^ ^ ^^^^^^^^^^^^^^^ // type scope subject const regex = new RegExp( `^(((Initial commit)|(Merge [^\\r\\n]+(\\s)[^\\r\\n]+((\\s)((\\s)[^\\r\\n]+)+)*(\\s)?)|^((?<type>${allowedTypes})(\\((?<scope>[\\w\\-]+)\\))?(?<breaking>!?): (?<subject>[^\\r\\n]+((\\s)((\\s)[^\\r\\n]+)+)*))(\\s)?)$)` ´); ``` Success Example: ``` Verify that the PR title follows the Conventional Commit format Type-to-Label Mapping: { feat: 'kind/enhancement', fix: 'fix', chore: 'chore', docs: 'kind/documentation', test: 'kind/test', perf: 'kind/performance' } Scope-to-Label Mapping: { deps: 'dependencies' } Allowed Types: feat|fix|chore|docs|test|perf PR Title: chore(deps)!: bump the go group across 1 directory with 13 updates Regex: /^(((Initial commit)|(Merge [^\r\n]+(\s)[^\r\n]+((\s)((\s)[^\r\n]+)+)*(\s)?)|^((?<type>feat|fix|chore|docs|test|perf)(\((?<scope>[\w\-]+)\))?(?<breaking>!?): (?<subject>[^\r\n]+((\s)((\s)[^\r\n]+)+)*))(\s)?)$)/ Match: true Adding breaking change label Adding labels: breaking,chore,dependencies ``` Failure Example: ``` Verify that the PR title follows the Conventional Commit format Type-to-Label Mapping: { feat: 'kind/enhancement', fix: 'fix', chore: 'chore', docs: 'kind/documentation', test: 'kind/test', perf: 'kind/performance' } Scope-to-Label Mapping: { deps: 'dependencies' } Allowed Types: feat|fix|chore|docs|test|perf PR Title: my invalid specification Regex: /^(((Initial commit)|(Merge [^\r\n]+(\s)[^\r\n]+((\s)((\s)[^\r\n]+)+)*(\s)?)|^((?<type>feat|fix|chore|docs|test|perf)(\((?<scope>[\w\-]+)\))?(?<breaking>!?): (?<subject>[^\r\n]+((\s)((\s)[^\r\n]+)+)*))(\s)?)$)/ Match: false Invalid PR title format. Make sure you named the PR after the specification at https://www.conventionalcommits.org/en/v1.0.0/#specification. Exiting... ``` Example runs: - https://github.com/open-component-model/ocm-cicd-playground/actions/runs/11956664562/job/33331956823?pr=11 - https://github.com/open-component-model/ocm-cicd-playground/actions/runs/11956694707/job/33332056532?pr=11 - https://github.com/open-component-model/ocm-cicd-playground/actions/runs/11956707588/job/33332099851?pr=11 #### Which issue(s) this PR fixes <!-- Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> This makes sure that our Pull Request Titles are correctly setup via conventional commits and also automatically labelled. To configure its label settings (which labels to apply) you can use the following env variables ``` - uses: actions/github-script@v7 env: TYPE_TO_LABEL: | { "feat":"kind/enhancement", "fix":"fix", "chore":"chore", "docs":"kind/documentation", "test":"kind/test", "perf":"kind/performance" } SCOPE_TO_LABEL: | { "deps":"dependencies" } BREAKING_CHANGE_LABEL: "breaking" # ... ```
- Loading branch information