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 @@
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+ }