History

chore: add workflow to retarget main PRs to dev automatically

Luis Pater committed 7 months ago

Commit 70efd4e1 parent f5aa68e1 file · +73 −0Browse files

Showing the changes to .github (1 of 1 file). Show all

Unified · Split

.github/workflows/auto-retarget-main-pr-to-dev.yml+73−0
@@ -0,0 +1,73 @@
1name: auto-retarget-main-pr-to-dev
2
3on:
4 pull_request_target:
5 types:
6 - opened
7 - reopened
8 - edited
9 branches:
10 - main
11
12permissions:
13 contents: read
14 issues: write
15 pull-requests: write
16
17jobs:
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 }