|
1 | 1 | name: Assign XLS Number |
2 | 2 |
|
3 | 3 | on: |
4 | | - pull_request_review: |
5 | | - types: [submitted] |
| 4 | + pull_request_target: |
| 5 | + types: [opened, synchronize, reopened, ready_for_review] |
6 | 6 |
|
7 | 7 | jobs: |
| 8 | + check-approval: |
| 9 | + runs-on: ubuntu-latest |
| 10 | + name: Check for Write+ Approval |
| 11 | + outputs: |
| 12 | + has_write_approval: ${{ steps.check-approval.outputs.has_write_approval }} |
| 13 | + steps: |
| 14 | + - name: Check for write+ approval |
| 15 | + id: check-approval |
| 16 | + uses: actions/github-script@v7 |
| 17 | + with: |
| 18 | + script: | |
| 19 | + const { data: reviews } = await github.rest.pulls.listReviews({ |
| 20 | + owner: context.repo.owner, |
| 21 | + repo: context.repo.repo, |
| 22 | + pull_number: context.payload.pull_request.number |
| 23 | + }); |
| 24 | +
|
| 25 | + // Get only approved reviews |
| 26 | + const approvals = reviews.filter(review => review.state === 'APPROVED'); |
| 27 | +
|
| 28 | + // Check each approver's permission level |
| 29 | + for (const approval of approvals) { |
| 30 | + const { data: permissionLevel } = await github.rest.repos.getCollaboratorPermissionLevel({ |
| 31 | + owner: context.repo.owner, |
| 32 | + repo: context.repo.repo, |
| 33 | + username: approval.user.login |
| 34 | + }); |
| 35 | +
|
| 36 | + const permission = permissionLevel.permission; |
| 37 | + if (['write', 'admin', 'maintain'].includes(permission)) { |
| 38 | + console.log(`Found write+ approval from ${approval.user.login} (${permission})`); |
| 39 | + core.setOutput('has_write_approval', 'true'); |
| 40 | + return; |
| 41 | + } |
| 42 | + } |
| 43 | +
|
| 44 | + console.log('No write+ approval found'); |
| 45 | + core.setOutput('has_write_approval', 'false'); |
| 46 | +
|
8 | 47 | assign-xls-number: |
9 | 48 | runs-on: ubuntu-latest |
10 | 49 | name: Assign XLS Number to Draft |
11 | | - # Only run when the review is an approval |
12 | | - if: github.event.review.state == 'approved' |
| 50 | + needs: check-approval |
| 51 | + if: needs.check-approval.outputs.has_write_approval == 'true' |
13 | 52 | permissions: |
14 | 53 | pull-requests: write |
15 | 54 | issues: write |
|
0 commit comments