pallet-proxy: add try_state invariant checks #135208
Workflow file for this run
This file contains hidden or 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: Review-Trigger | |
| on: | |
| pull_request_target: | |
| types: | |
| - opened | |
| - reopened | |
| - synchronize | |
| - review_requested | |
| - review_request_removed | |
| - ready_for_review | |
| pull_request_review: | |
| jobs: | |
| trigger-review-bot: | |
| # (It is not a draft) && (it is not a review || it is an approving review) | |
| if: ${{ github.event.pull_request.draft != true && (github.event_name != 'pull_request_review' || (github.event.review && github.event.review.state == 'APPROVED')) }} | |
| runs-on: ubuntu-latest | |
| name: trigger review bot | |
| steps: | |
| - name: Skip merge queue | |
| if: ${{ contains(github.ref, 'gh-readonly-queue') }} | |
| run: exit 0 | |
| - name: Get PR data | |
| id: comments | |
| run: | | |
| echo "bodies=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments --jq '[.comments[].body]')" >> "$GITHUB_OUTPUT" | |
| echo "reviews=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews --jq '[.[].state]')" >> "$GITHUB_OUTPUT" | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: Fail when author pushes new code | |
| # Require new reviews when the author is pushing and he is not a member | |
| if: | | |
| contains(fromJson(steps.comments.outputs.reviews), 'APPROVED') && | |
| github.event_name == 'pull_request_target' && | |
| github.event.action == 'synchronize' && | |
| github.event.sender.login == github.event.pull_request.user.login && | |
| github.event.pull_request.author_association != 'CONTRIBUTOR' && | |
| github.event.pull_request.author_association != 'MEMBER' | |
| run: | | |
| # We get the list of reviewers who approved the PR | |
| REVIEWERS=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews \ | |
| --jq '{reviewers: [.[] | select(.state == "APPROVED") | .user.login]}') | |
| # We request them to review again. | |
| echo $REVIEWERS | gh api --silent --method POST repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/requested_reviewers --input - | |
| APPROVERS=$(echo "$REVIEWERS" | jq -r '.reviewers | map("@" + .) | join(", ")') | |
| tee -a "$GITHUB_STEP_SUMMARY" <<EOF | |
| ## Review required | |
| **What failed:** @${{ github.event.pull_request.user.login }} (association \`${{ github.event.pull_request.author_association }}\`) | |
| pushed \`${{ github.event.pull_request.head.sha }}\` after this pull request was already approved. | |
| An approval only covers the code it was given for, so a push from an author outside the | |
| organisation invalidates it. | |
| **What needs to be done:** review has been re-requested from ${APPROVERS}. | |
| Once a new approval lands, this workflow re-runs and the check passes. | |
| The author does not need to change anything. | |
| EOF | |
| echo "::error title=Review required::Author pushed new commits after approval, a new approval from ${APPROVERS} is needed" | |
| exit 1 | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: Comment requirements | |
| # If the previous step failed and github-actions hasn't commented yet we comment instructions | |
| if: failure() && !contains(fromJson(steps.comments.outputs.bodies), 'Review required! Latest push from author must always be reviewed') | |
| run: | | |
| gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --body "Review required! Latest push from author must always be reviewed" | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| COMMENTS: ${{ steps.comments.outputs.users }} | |
| - name: Get PR number | |
| env: | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| run: | | |
| echo "Saving PR number: $PR_NUMBER" | |
| mkdir -p ./pr | |
| echo $PR_NUMBER > ./pr/pr_number | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| name: Save PR number | |
| with: | |
| name: pr_number | |
| path: pr/ | |
| retention-days: 5 |