name: Check mergeability on: pull_request permissions: pull-requests: write checks: write statuses: write jobs: check: runs-on: ubuntu-latest steps: - name: Check if there is already a block on this PR id: blocked uses: actions/github-script@v6 env: issue_number: ${{ github.event.number }} with: script: | const { data: reviews } = await github.rest.pulls.listReviews({ owner: context.repo.owner, repo: context.repo.repo, pull_number: process.env.issue_number, }); for (const review of reviews) { if (review.user.login === 'github-actions[bot]' && review.state === 'CHANGES_REQUESTED') { return 'true' } } return 'false' result-encoding: string - uses: actions/checkout@v3 if: steps.blocked.outputs.result != 'true' with: fetch-depth: 0 - name: Get changed files in the .changeset folder id: changed-files uses: tj-actions/changed-files@v35 if: steps.blocked.outputs.result != 'true' with: files: | .changeset/**/*.md - name: Check if any changesets contain minor changes id: minor if: steps.blocked.outputs.result != 'true' run: | echo "Checking for changesets marked as minor" echo '::set-output name=found::false' for file in ${{ steps.changed-files.outputs.all_changed_files }}; do if grep -q "'astro': minor" "$file"; then echo '::set-output name=found::true' echo "$file has a minor release tag" fi done - name: Add label uses: actions/github-script@v6 if: steps.minor.outputs.found == 'true' env: issue_number: ${{ github.event.number }} with: script: | github.rest.issues.addLabels({ issue_number: process.env.issue_number, owner: context.repo.owner, repo: context.repo.repo, labels: ['semver minor'] }); - name: Change PR Status uses: actions/github-script@v6 if: steps.minor.outputs.found == 'true' env: issue_number: ${{ github.event.number }} with: script: | github.rest.pulls.createReview({ owner: context.repo.owner, repo: context.repo.repo, pull_number: process.env.issue_number, event: 'REQUEST_CHANGES', body: 'This PR is blocked because it contains a `minor` changeset. A reviewer will merge this at the next release if approved.' });