推送更新Pull Request时检查已有评论并触发GitHub Workflow
解决方案
要在PR同步(synchronize)到develop分支时检查PR是否存在指定评论,你不能直接依赖github.event.pull_request_comment(该字段仅在评论创建/更新事件中存在),需要通过GitHub API主动查询PR的评论列表,再进行匹配判断。
具体实现步骤
- 保留原触发条件:保持Workflow在PR同步到develop时触发。
- 调用GitHub API获取PR评论:利用GitHub内置的
GITHUB_TOKEN调用API拉取目标PR的所有评论。 - 过滤匹配指定评论内容:使用
jq工具解析API返回的JSON数据,检查是否存在包含目标内容的评论。 - 根据检查结果控制Workflow后续执行:将检查结果设为输出变量,后续步骤通过
if条件判断是否继续执行。
完整Workflow配置示例
name: Check PR Comment on Sync on: pull_request: branches: [develop] types: [synchronize] jobs: check-comment: runs-on: ubuntu-latest outputs: has_target_comment: ${{ steps.check.outputs.has_target_comment }} steps: - name: Check if target comment exists id: check env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} REPO: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} TARGET_COMMENT: "需要匹配的评论内容" # 替换成你要检查的评论文本 run: | # 调用GitHub API获取PR评论 RESPONSE=$(curl -s -H "Authorization: token $GH_TOKEN" \ "https://api.github.com/repos/$REPO/issues/$PR_NUMBER/comments") # 使用jq过滤是否存在包含目标内容的评论 MATCH=$(echo "$RESPONSE" | jq --arg TARGET "$TARGET_COMMENT" '.[] | .body | contains($TARGET)' | grep -q true && echo "true" || echo "false") # 设置输出变量 echo "has_target_comment=$MATCH" >> $GITHUB_OUTPUT run-triggered-job: needs: check-comment if: ${{ needs.check-comment.outputs.has_target_comment == 'true' }} runs-on: ubuntu-latest steps: - name: Execute triggered task run: | echo "PR存在指定评论,触发后续任务" # 这里写你需要执行的操作
关键说明
- 权限设置:
GITHUB_TOKEN默认拥有pull-requests: read权限,足够获取PR评论列表,无需额外配置 secrets。 - 匹配逻辑:示例中用
contains()匹配包含目标文本的评论,你可以根据需求调整jq表达式(比如精确匹配用==)。 - 输出变量传递:通过
jobs.<job-id>.outputs将检查结果传递给后续任务,实现条件触发。
内容的提问来源于stack exchange,提问作者just_front
相关产品推荐
相关产品推荐

