Skip to content

Commit 70efd4e

Browse files
committed
chore: add workflow to retarget main PRs to dev automatically
1 parent f5aa68e commit 70efd4e

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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+
}

0 commit comments

Comments
 (0)