diff --git a/.github/workflows/pr-checklist-check.yml b/.github/workflows/pr-checklist-check.yml new file mode 100644 index 000000000..6346ef4e0 --- /dev/null +++ b/.github/workflows/pr-checklist-check.yml @@ -0,0 +1,74 @@ +# This workflow checks whether the PR author checked the "I did NOT read" item +# in the PR checklist. If so, it posts a reminder comment and closes the PR. +name: PR Checklist Check + +on: + pull_request_target: + types: [opened, edited, reopened, synchronize] + +jobs: + check-checklist: + runs-on: ubuntu-latest + permissions: + pull-requests: write + issues: write + + steps: + - name: Check if user checked "我没有认真阅读" + id: check + uses: actions/github-script@v7 + with: + script: | + const body = context.payload.pull_request.body || ''; + + // 精确匹配完整的 checklist 项:- [x] 或 - [X] 后跟完整句子,忽略大小写和多余空格 + const regex = /-+\s*\[\s*[xX]\s*\]\s*⚠️\s*我\*\*没有\*\*认真阅读以上内容,直接提交。/im; + const isBad = regex.test(body); + + return isBad; + result-encoding: string + + - name: Comment and close PR if checklist violated + if: steps.check.outputs.result == 'true' + uses: actions/github-script@v7 + with: + script: | + const prNumber = context.payload.pull_request.number; + const author = context.payload.pull_request.user.login; + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: | + 👋 @${author} + + 您的 PR 未通过检查清单校验 —— 检测到您勾选了「我**没有**认真阅读以上内容,直接提交」。 + + 请按照以下规则重新提交 PR: + + 1. 请仔细阅读 PR 模板中的所有说明。 + 2. 本次开发请**基于 \`dev\` 分支**进行,并将 PR 目标分支设置为**开发分支(\`dev\`)**(除非极其紧急的情况才允许合并到主分支)。 + 3. 完成上述检查后,请重新发起 PR。 + + 本 PR 已自动关闭,请按规范重新拉起。感谢您的贡献!🙏 + + --- + + Your PR failed the checklist validation — the item "I **did not** read the above carefully before submitting" was checked. + + Please follow these rules and reopen a new PR: + + 1. Read all the instructions in the PR template carefully. + 2. Make sure your development is **based on the \`dev\` branch**, and set the PR target branch to the **development branch (\`dev\`)** (only merge to main if extremely urgent). + 3. Once you have reviewed everything, please open a new PR. + + This PR has been automatically closed. Please reopen a correct one. Thank you for your contribution! 🙏 + }); + + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber, + state: 'closed' + });