@@ -6,16 +6,6 @@ name: Retrigger Sync on Approval
66on :
77 pull_request_review :
88 types : [submitted]
9- workflow_dispatch :
10- inputs :
11- pr_number :
12- description : ' PR number to simulate approval for (for testing)'
13- required : true
14- type : string
15- skip_checks :
16- description : ' Skip fork/author checks (for testing internal PRs)'
17- type : boolean
18- default : true
199
2010permissions :
2111 contents : read
@@ -25,82 +15,56 @@ permissions:
2515jobs :
2616 retrigger-on-approval :
2717 runs-on : ubuntu-latest
28- # Only run for approved reviews OR manual dispatch
29- if : github.event_name == 'workflow_dispatch' || github. event.review.state == 'approved'
18+ # Only run for approved reviews
19+ if : github.event.review.state == 'approved'
3020
3121 steps :
3222 - name : Check if retrigger is needed
3323 id : check
3424 uses : actions/github-script@v7
3525 with :
3626 script : |
37- const isManualTrigger = context.eventName === 'workflow_dispatch';
38- const skipChecks = isManualTrigger && '${{ inputs.skip_checks }}' === 'true';
39-
40- let prNumber, prAuthor, prHeadRepo, prBaseRepo, reviewer, reviewerAssociation;
41-
42- if (isManualTrigger) {
43- // Manual trigger - fetch PR details
44- prNumber = parseInt('${{ inputs.pr_number }}');
45- console.log(`Manual trigger for PR #${prNumber} (skip_checks: ${skipChecks})`);
46-
47- const { data: pr } = await github.rest.pulls.get({
48- owner: context.repo.owner,
49- repo: context.repo.repo,
50- pull_number: prNumber
51- });
52-
53- prAuthor = pr.user.login;
54- prHeadRepo = pr.head.repo.full_name;
55- prBaseRepo = pr.base.repo.full_name;
56- reviewer = context.actor; // Person who triggered the workflow
57- reviewerAssociation = 'MEMBER'; // Assume maintainer for manual trigger
58- } else {
59- // Pull request review trigger
60- prNumber = context.payload.pull_request.number;
61- prAuthor = context.payload.pull_request.user.login;
62- prHeadRepo = context.payload.pull_request.head.repo.full_name;
63- prBaseRepo = context.payload.pull_request.base.repo.full_name;
64- reviewer = context.payload.review.user.login;
65- reviewerAssociation = context.payload.review.author_association;
66- }
27+ const prNumber = context.payload.pull_request.number;
28+ const prAuthor = context.payload.pull_request.user.login;
29+ const prHeadRepo = context.payload.pull_request.head.repo.full_name;
30+ const prBaseRepo = context.payload.pull_request.base.repo.full_name;
31+ const reviewer = context.payload.review.user.login;
32+ const reviewerAssociation = context.payload.review.author_association;
6733
6834 console.log(`PR #${prNumber} approved by ${reviewer} (${reviewerAssociation})`);
6935 console.log(`Author: ${prAuthor}`);
7036 console.log(`Head repo: ${prHeadRepo}`);
7137 console.log(`Base repo: ${prBaseRepo}`);
7238
73- // TODO: UNCOMMENT THESE CHECKS AFTER TESTING
7439 // Check 1: Is this a fork PR?
75- // const isFork = prHeadRepo !== prBaseRepo;
76- // if (!isFork) {
77- // console.log('Not a fork PR - approval gate not needed, skipping retrigger');
78- // core.setOutput('should_retrigger', 'false');
79- // core.setOutput('reason', 'not_fork');
80- // return;
81- // }
82- // console.log('PR is from a fork - approval gate applies');
40+ const isFork = prHeadRepo !== prBaseRepo;
41+ if (!isFork) {
42+ console.log('Not a fork PR - approval gate not needed, skipping retrigger');
43+ core.setOutput('should_retrigger', 'false');
44+ core.setOutput('reason', 'not_fork');
45+ return;
46+ }
47+ console.log('PR is from a fork - approval gate applies');
8348
8449 // Check 2: Is the PR author already trusted? If so, no approval gate was needed
85- // const trustedAssociations = ['OWNER', 'MEMBER', 'COLLABORATOR'];
86- // const authorAssociation = context.payload.pull_request.author_association;
87- // if (trustedAssociations.includes(authorAssociation)) {
88- // console.log(`PR author ${prAuthor} is already trusted (${authorAssociation}) - no approval gate needed`);
89- // core.setOutput('should_retrigger', 'false');
90- // core.setOutput('reason', 'author_trusted');
91- // return;
92- // }
93- // console.log(`PR author ${prAuthor} is not trusted (${authorAssociation}) - approval gate applies`);
50+ const trustedAssociations = ['OWNER', 'MEMBER', 'COLLABORATOR'];
51+ const authorAssociation = context.payload.pull_request.author_association;
52+ if (trustedAssociations.includes(authorAssociation)) {
53+ console.log(`PR author ${prAuthor} is already trusted (${authorAssociation}) - no approval gate needed`);
54+ core.setOutput('should_retrigger', 'false');
55+ core.setOutput('reason', 'author_trusted');
56+ return;
57+ }
58+ console.log(`PR author ${prAuthor} is not trusted (${authorAssociation}) - approval gate applies`);
9459
9560 // Check 3: Is the reviewer a trusted maintainer?
96- // if (!trustedAssociations.includes(reviewerAssociation)) {
97- // console.log(`Reviewer ${reviewer} is not a maintainer (${reviewerAssociation}) - cannot unlock approval gate`);
98- // core.setOutput('should_retrigger', 'false');
99- // core.setOutput('reason', 'reviewer_not_maintainer');
100- // return;
101- // }
102- // console.log(`Reviewer ${reviewer} is a maintainer - approval is valid`);
103- console.log('⚠️ CHECKS COMMENTED OUT FOR TESTING - skipping fork/author/reviewer checks');
61+ if (!trustedAssociations.includes(reviewerAssociation)) {
62+ console.log(`Reviewer ${reviewer} is not a maintainer (${reviewerAssociation}) - cannot unlock approval gate`);
63+ core.setOutput('should_retrigger', 'false');
64+ core.setOutput('reason', 'reviewer_not_maintainer');
65+ return;
66+ }
67+ console.log(`Reviewer ${reviewer} is a maintainer - approval is valid`);
10468
10569 // Check 4: Does translation PR already exist?
10670 const syncBranch = `docs-sync-pr-${prNumber}`;
0 commit comments