From 581b9803e95bbe0684fd345dc9df05f38912e954 Mon Sep 17 00:00:00 2001 From: zhangruijie <2542201615@qq.com> Date: Thu, 18 Jun 2026 10:44:30 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=20PR=20=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E5=88=86=E6=94=AF=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PR 目标为 main 且来源非 dev:自动关闭并评论 - PR 目标非 main 且非 dev:自动将目标分支改为 dev Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/pr-policy.yml | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/pr-policy.yml diff --git a/.github/workflows/pr-policy.yml b/.github/workflows/pr-policy.yml new file mode 100644 index 0000000..01431d6 --- /dev/null +++ b/.github/workflows/pr-policy.yml @@ -0,0 +1,50 @@ +name: PR Base Branch Policy + +on: + pull_request: + types: [opened, reopened] + +permissions: + pull-requests: write + contents: read + +jobs: + enforce-base: + runs-on: ubuntu-latest + steps: + - name: Block non-dev PR targeting main + if: github.event.pull_request.base.ref == 'main' && github.event.pull_request.head.ref != 'dev' + uses: actions/github-script@v7 + with: + script: | + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.pull_request.number, + state: 'closed' + }); + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + body: `🚫 **PR 已自动关闭**\n\n\`main\` 分支只接受来自 \`dev\` 的 PR。\n\n请将目标分支改为 \`dev\`,或者从 \`dev\` 分支发起 PR 到 \`main\`。` + }); + core.setFailed('PR targeting main must come from dev branch'); + + - name: Redirect non-dev PR to target dev + if: github.event.pull_request.base.ref != 'main' && github.event.pull_request.base.ref != 'dev' + uses: actions/github-script@v7 + with: + script: | + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.pull_request.number, + base: 'dev' + }); + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + body: `ℹ️ **目标分支已自动调整为 \`dev\`**\n\n功能分支的 PR 默认合并到 \`dev\`,已自动将目标分支从 \`${context.payload.pull_request.base.ref}\` 修改为 \`dev\`。` + });