From 20b0a69ec8250097d79234caa336c9a017c39b30 Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Thu, 14 Nov 2024 03:24:23 -0500 Subject: [PATCH] chore: Add check-pr.yml github workflow --- .github/workflows/check-pr.yml | 86 ++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 .github/workflows/check-pr.yml diff --git a/.github/workflows/check-pr.yml b/.github/workflows/check-pr.yml new file mode 100644 index 0000000..bc2aacc --- /dev/null +++ b/.github/workflows/check-pr.yml @@ -0,0 +1,86 @@ +name: Check Pull Requests + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + - labeled + - unlabeled + merge_group: + +permissions: + pull-requests: write + +jobs: + check-title: + runs-on: ubuntu-latest + steps: + - name: Check PR title + if: github.event_name == 'pull_request_target' + uses: amannn/action-semantic-pull-request@v5 + id: check_pr_title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Add comment indicating we require pull request titles to follow conventional commits specification + - uses: marocchino/sticky-pull-request-comment@v2 + if: always() && (steps.check_pr_title.outputs.error_message != null) + with: + header: pr-title-lint-error + message: | + Thank you for opening this pull request! + + We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted. + + Details: + + > ${{ steps.check_pr_title.outputs.error_message }} + + # Delete a previous comment when the issue has been resolved + - if: ${{ steps.check_pr_title.outputs.error_message == null }} + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: pr-title-lint-error + delete: true + + check-breaking-change-label: + runs-on: ubuntu-latest + env: + # use an environment variable to pass untrusted input to the script + # see https://securitylab.github.com/research/github-actions-untrusted-input/ + PR_TITLE: ${{ github.event.pull_request.title }} + steps: + - name: Check breaking change label + id: check_breaking_change + run: | + pattern='^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(\w+\))?!:' + # Check if pattern matches + if echo "${PR_TITLE}" | grep -qE "$pattern"; then + echo "breaking_change=true" >> $GITHUB_OUTPUT + else + echo "breaking_change=false" >> $GITHUB_OUTPUT + fi + - name: Add label + if: steps.check_breaking_change.outputs.breaking_change == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['Type: Breaking Change'] + }) + + do-not-merge: + if: ${{ contains(github.event.*.labels.*.name, 'do not merge') }} + name: Prevent Merging + runs-on: ubuntu-latest + steps: + - name: Check for label + run: | + echo "Pull request is labeled as 'do not merge'" + echo "This workflow fails so that the pull request cannot be merged" + exit 1