File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ name : auto-retarget-main-pr-to-dev
2+
3+ on :
4+ pull_request_target :
5+ types :
6+ - opened
7+ - reopened
8+ - edited
9+ branches :
10+ - main
11+
12+ permissions :
13+ contents : read
14+ issues : write
15+ pull-requests : write
16+
17+ jobs :
18+ retarget :
19+ if : github.actor != 'github-actions[bot]'
20+ runs-on : ubuntu-latest
21+ steps :
22+ - name : Retarget PR base to dev
23+ uses : actions/github-script@v7
24+ with :
25+ script : |
26+ const pr = context.payload.pull_request;
27+ const prNumber = pr.number;
28+ const { owner, repo } = context.repo;
29+
30+ const baseRef = pr.base?.ref;
31+ const headRef = pr.head?.ref;
32+ const desiredBase = "dev";
33+
34+ if (baseRef !== "main") {
35+ core.info(`PR #${prNumber} base is ${baseRef}; nothing to do.`);
36+ return;
37+ }
38+
39+ if (headRef === desiredBase) {
40+ core.info(`PR #${prNumber} is ${desiredBase} -> main; skipping retarget.`);
41+ return;
42+ }
43+
44+ core.info(`Retargeting PR #${prNumber} base from ${baseRef} to ${desiredBase}.`);
45+
46+ try {
47+ await github.rest.pulls.update({
48+ owner,
49+ repo,
50+ pull_number: prNumber,
51+ base: desiredBase,
52+ });
53+ } catch (error) {
54+ core.setFailed(`Failed to retarget PR #${prNumber} to ${desiredBase}: ${error.message}`);
55+ return;
56+ }
57+
58+ const body = [
59+ `This pull request targeted \`${baseRef}\`.`,
60+ "",
61+ `The base branch has been automatically changed to \`${desiredBase}\`.`,
62+ ].join("\n");
63+
64+ try {
65+ await github.rest.issues.createComment({
66+ owner,
67+ repo,
68+ issue_number: prNumber,
69+ body,
70+ });
71+ } catch (error) {
72+ core.warning(`Failed to comment on PR #${prNumber}: ${error.message}`);
73+ }
You can’t perform that action at this time.
0 commit comments