diff options
author | 2025-03-18 15:24:30 +0000 | |
---|---|---|
committer | 2025-03-18 15:24:30 +0000 | |
commit | f3e195562359b062fa8e2b13f1eabafb17f1abbb (patch) | |
tree | a4d8267508ea3600ad6a6c071b1d9acacfb150be | |
parent | e934fa1412a39dd748fbaa89cf7dfba69dcc6641 (diff) | |
download | astro-f3e195562359b062fa8e2b13f1eabafb17f1abbb.tar.gz astro-f3e195562359b062fa8e2b13f1eabafb17f1abbb.tar.zst astro-f3e195562359b062fa8e2b13f1eabafb17f1abbb.zip |
ci: restore workflow (#13456)
Co-authored-by: ascorbic <213306+ascorbic@users.noreply.github.com>
-rw-r--r-- | .github/workflows/check-merge.yml | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/.github/workflows/check-merge.yml b/.github/workflows/check-merge.yml new file mode 100644 index 000000000..a4b4ddb99 --- /dev/null +++ b/.github/workflows/check-merge.yml @@ -0,0 +1,96 @@ +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.' + }); |