Actions middleware #16425
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check mergeability | |
on: pull_request_target | |
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@v7 | |
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@v4 | |
if: steps.blocked.outputs.result != 'true' | |
with: | |
repository: ${{ github.event.pull_request.head.repo.full_name }} | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Get changed files in the .changeset folder | |
id: changed-files | |
uses: tj-actions/changed-files@v45 | |
if: steps.blocked.outputs.result != 'true' | |
with: | |
files: | | |
.changeset/**/*.md | |
- name: Check if any changesets contain minor or major changes | |
id: check | |
if: steps.blocked.outputs.result != 'true' | |
env: | |
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} | |
run: | | |
echo "Checking for changesets marked as minor or major" | |
echo "found=false" >> $GITHUB_OUTPUT | |
regex="[\"']astro[\"']: (minor|major)" | |
for file in ${ALL_CHANGED_FILES}; do | |
if [[ $(cat $file) =~ $regex ]]; then | |
version="${BASH_REMATCH[1]}" | |
echo "version=$version" >> $GITHUB_OUTPUT | |
echo "found=true" >> $GITHUB_OUTPUT | |
echo "$file has a $version release tag" | |
fi | |
done | |
- name: Add label | |
uses: actions/github-script@v7 | |
if: steps.check.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: ${{ steps.check.outputs.version }}'] | |
}); | |
- name: Change PR Status | |
uses: actions/github-script@v7 | |
if: steps.check.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 `${{ steps.check.outputs.version }}` changeset. A reviewer will merge this at the next release if approved.' | |
}); |