astro/.github/workflows/check-merge.yml
Matthew Phillips 5546c86868
Add action to check if PR can be merged (#4848)
* Add action to check if PR can be merged

* Add the "semver minor" label

* Only apply the block if not already done so
2022-09-23 11:13:03 -04:00

69 lines
2.7 KiB
YAML

name: Check mergeability
on: pull_request # run on pull request events
permissions:
# grant write permission on the pull-requests endpoint
pull-requests: write
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Retrieve existing PR reviews
id: set-reviews
run: |
echo ::set-output name=reviews::$(curl --request GET \
--url https://api.github.com/repos/${{github.repository}}/pulls/${{github.event.number}}/reviews \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}')
- name: Check if there is already a block on this PR
id: set-blocks
run: |
echo ::set-output name=blocks::$(echo '${{ steps.set-reviews.outputs.reviews }}' \
| jq '.[] | select(.user.id == 41898282 and .state == "CHANGES_REQUESTED") | length' \
| uniq)
- uses: actions/checkout@v3
if: steps.set-blocks.outputs.blocks == ''
with:
fetch-depth: 0
- name: Get changed files in the .changeset folder
id: changed-files
uses: tj-actions/changed-files@v29
if: steps.set-blocks.outputs.blocks == ''
with:
files: |
.changeset/**/*.md
- name: Check if any changesets contain minor changes
id: find-blockers
if: steps.set-blocks.outputs.blocks == ''
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
if: steps.find-blockers.outputs.found == 'true'
run: |
curl --request POST \
--url https://api.github.com/repos/${{github.repository}}/issues/${{github.event.number}}/labels \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
-d '["semver minor"]'
- name: Send PR review
if: steps.find-blockers.outputs.found == 'true'
run: | # approve the pull request
curl --request POST \
--url https://api.github.com/repos/${{github.repository}}/pulls/${{github.event.number}}/reviews \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
-d '{"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."}'