From bd616cec49651b46e75aff182a49e86fe5c81fb9 Mon Sep 17 00:00:00 2001 From: Dave Skender <8432125+DaveSkender@users.noreply.github.com> Date: Tue, 2 Jan 2024 20:09:07 -0500 Subject: [PATCH] add pr linter --- .github/workflows/semantic-pr-linter.yml | 70 ++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .github/workflows/semantic-pr-linter.yml diff --git a/.github/workflows/semantic-pr-linter.yml b/.github/workflows/semantic-pr-linter.yml new file mode 100644 index 00000000..517b522f --- /dev/null +++ b/.github/workflows/semantic-pr-linter.yml @@ -0,0 +1,70 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +permissions: + pull-requests: write + +jobs: + main: + name: validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + id: lint_pr_title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + + # Configure additional validation for the subject based on a regex. + # We enforce that the subject starts with an uppercase character. + subjectPattern: ^([A-Z]).+$ + + # If `subjectPattern` is configured, you can use this property to override + # the default error message that is shown when the pattern doesn't match. + # The variables `subject` and `title` can be used within the message. + subjectPatternError: > + The subject "**{subject}**" found in the pull request title "*{title}*" + didn't match the configured pattern. Please ensure that the subject + starts with an uppercase character. + + # If the PR contains one of these newline-delimited labels, the + # validation is skipped. If you want to rerun the validation when + # labels change, you might want to use the `labeled` and `unlabeled` + # event triggers in your workflow. + ignoreLabels: | + bot + ignore-semantic-pull-request + + - uses: marocchino/sticky-pull-request-comment@v2 + # When the previous steps fails, the workflow would stop. By adding this + # condition you can continue the execution with the populated error message. + if: always() && (steps.lint_pr_title.outputs.error_message != null) + with: + header: pr-title-lint-error + message: > + ### Hey there and thank you for opening this pull request! ๐Ÿ‘‹๐Ÿผ + + It looks like your proposed **_Pull request title_** needs to be adjusted. + + >๐Ÿšฉ **Error** ยป ${{ steps.lint_pr_title.outputs.error_message }} + + #### Pull request title naming convention + + Our PR title name taxonomy is `type: Subject`, where **type** is typically + *feat*, *fix*, or *chore*, and **subject** is a phrase (proper noun) that starts with a capitalized letter. + The *chore* type usually has a subject that starts with an action verb like *Add* or *Update*. + Examples: `feat: Admin portal login`, `fix: Divide by zero bug in SMA`, and `chore: Update user docs`. + See the [Conventional Commits specification](https://www.conventionalcommits.org) for more information. + + # Delete a previous comment when the issue has been resolved + - if: ${{ steps.lint_pr_title.outputs.error_message == null }} + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: pr-title-lint-error + delete: true