如何通过GitHub Actions/Workflows获取Pull Request的审批者用户名?
在GitHub Action中提取PR已审批者用户名
GitHub原生上下文里没有直接给出已审批者的集合,你需要通过处理PR的评审记录来筛选出已审批的用户,以下是实现步骤:
1. 提取已审批者的工作流Step
在你的GitHub Action工作流中添加一个Step,用jq解析PR的评审记录,筛选出状态为APPROVED的用户并输出:
- name: 获取PR已审批者 id: extract_approvers run: | # 将PR评审记录转为JSON,用jq筛选已审批用户的登录名 APPROVER_LIST=$(echo '${{ toJSON(github.event.pull_request.reviews) }}' | jq -r '.[] | select(.state == "APPROVED") | .user.login') # 将换行分隔的用户名转为逗号分隔的字符串(可选,根据你的脚本需求调整格式) APPROVERS=$(echo "$APPROVER_LIST" | tr '\n' ',' | sed 's/,$//') # 将结果输出为Action变量,供后续Step使用 echo "APPROVERS=$APPROVERS" >> "$GITHUB_OUTPUT"
2. 在后续Step中使用已审批者变量
之后的Step可以通过${{ steps.extract_approvers.outputs.APPROVERS }}获取已审批者的用户名(逗号分隔格式),传入你的自定义脚本:
- name: 执行自定义脚本 run: | # 将审批者变量传入脚本,示例:打印审批者 echo "已审批PR的用户:${{ steps.extract_approvers.outputs.APPROVERS }}" # 或者传入你的脚本文件 ./your-custom-script.sh --approvers "${{ steps.extract_approvers.outputs.APPROVERS }}"
关键说明
github.event.pull_request.reviews包含PR的所有评审历史记录,每条记录包含评审状态(state)和评审用户信息- 如果你需要保留换行分隔的格式,去掉
tr和sed的处理步骤即可 - 若PR暂无审批者,
APPROVERS变量会是空字符串,你的脚本需要处理这种边界情况
内容的提问来源于stack exchange,提问作者Liam Pillay
相关产品推荐
相关产品推荐

