Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 25 additions & 32 deletions .github/workflows/bot-approval-required.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,13 @@
# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Bot Approval Required

# 合入门禁:满足以下任一条件本检查即通过(仅统计【当前 head commit】上的评审)——
# 1) AI review 机器人 risemeup1111 对当前 head commit 提交了 APPROVED 评审;或
# 2) sneaxiy 或 From00 任意一个账号对当前 head commit 提交了 APPROVED 评审。
# 评审提交/修改/撤销或推送新 commit 时自动复检;旧 commit 上的审批在 push 新提交后自动失效。
# 2) APPROVERS 名单中任意一个账号对当前 head commit 提交了 APPROVED 评审。
# 推送新 commit(synchronize)或重开 PR 时自动复检;旧 commit 上的审批在 push 新提交后自动失效。
# CI 团队成员可通过 check-bypass(skip-ci label / 评论)豁免本检查。
on:
pull_request:
types: [opened, synchronize, reopened]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Bug 删除 pull_request_review 后,审批提交不会触发门禁复检。

这个 job 只在 pull_requestopened/synchronize/reopened 事件上读取 reviews。若 PR 打开或推送时还没有 risemeup1111sneaxiyFrom00 对当前 head 的 APPROVED,本检查会失败;随后任一账号在同一 head 上 approve 时,不会再有事件重跑 latest_state(),required check 仍保持失败,提示中的“联系 ... 进行 approve”也无法自动放行。

建议恢复 review 事件(至少 submitted,并保留 dismissed 以便撤销审批后复检):

on:
  pull_request:
    types: [opened, synchronize, reopened]
  pull_request_review:
    types: [submitted, edited, dismissed]

pull_request_review:
types: [submitted, edited, dismissed]

permissions:
contents: read
Expand All @@ -31,13 +16,23 @@ permissions:
env:
# AI review 机器人的 GitHub login。
REQUIRED_BOT_LOGIN: risemeup1111
# 机器人未 approve 时,任意一个账号 approve 即可放行的审批账号。
HUMAN_APPROVER_1: sneaxiy
HUMAN_APPROVER_2: From00
# 机器人未 approve 时,名单中任意一个账号 approve 即可放行(空格分隔)。
APPROVERS: "sneaxiy From00"

jobs:
check-bypass:
name: Check bypass
if: ${{ github.repository_owner == 'PaddlePaddle' }}
uses: ./.github/workflows/check-bypass.yml
with:
workflow-name: 'bot-approval-required'
secrets:
github-token: ${{ secrets.GITHUB_TOKEN }}

check-bot-approval:
name: Require review-bot approval
needs: [check-bypass]
if: ${{ needs.check-bypass.outputs.can-skip != 'true' }}
runs-on: ubuntu-latest
steps:
- name: Verify approval status
Expand Down Expand Up @@ -69,29 +64,27 @@ jobs:
'
}

bot_state=$(latest_state "${REQUIRED_BOT_LOGIN}")
approver1_state=$(latest_state "${HUMAN_APPROVER_1}")
approver2_state=$(latest_state "${HUMAN_APPROVER_2}")

if [ "${bot_state}" = "APPROVED" ]; then
if [ "$(latest_state "${REQUIRED_BOT_LOGIN}")" = "APPROVED" ]; then
echo "::notice::AI review 机器人 ${REQUIRED_BOT_LOGIN} 已 approve,本 PR 通过审批门禁。"
exit 0
fi

if [ "${approver1_state}" = "APPROVED" ] || [ "${approver2_state}" = "APPROVED" ]; then
echo "::notice::${HUMAN_APPROVER_1} / ${HUMAN_APPROVER_2} 中已有账号 approve,本 PR 通过审批门禁。"
exit 0
fi
for u in ${APPROVERS}; do
if [ "$(latest_state "$u")" = "APPROVED" ]; then
echo "::notice::审批账号 ${u} 已 approve,本 PR 通过审批门禁。"
exit 0
fi
done

echo "==================================================================="
echo "本PR 尚未通过AI review机器人approve。"
echo "请研发同学按AI review机器人的review 意见修改代码并提交新的commit;或联系 ${HUMAN_APPROVER_1} 和 ${HUMAN_APPROVER_2} 进行 approve。"
echo "请研发同学按AI review机器人的review 意见修改代码并提交新的commit;或联系审批账号(${APPROVERS})中任一人进行 approve。"
echo ""
echo "评审意见处理要求(按优先级):"
echo " - P0(阻塞):必须修复问题并提交新的 commit,仅回复不算解决。"
echo " - P1(高):必须修复问题并提交新的 commit,仅回复不算解决。"
echo " - P2(中):需针对评论进行回复(同意并已修改回复 Done,不同意请给出理由)。"
echo " - P3(低):需针对评论进行回复(同意并已修改回复 Done,不同意请给出理由)。"
echo "==================================================================="
echo "::error::本PR 尚未通过AI review机器人approve。请研发同学按AI review机器人的review 意见修改代码并提交新的commit(P0/P1 必须修复并提交新 commit;P2/P3 需针对评论回复);或联系 ${HUMAN_APPROVER_1} 和 ${HUMAN_APPROVER_2} 进行 approve。"
echo "::error::本PR 尚未通过AI review机器人approve。请研发同学按AI review机器人的review 意见修改代码并提交新的commit(P0/P1 必须修复并提交新 commit;P2/P3 需针对评论回复);或联系审批账号(${APPROVERS})中任一人进行 approve。"
exit 1
Loading