如何将原始用户关联至GitHub Bot触发的GitHub Workflows
解决Bot触发Workflow时通知原始用户的问题
核心问题:自定义GitHub Bot触发Workflow后,系统默认的actor是Bot账号,导致Workflow运行的通知无法触达发起操作的原始用户(比如合并PR、推送代码的用户),需要让原始用户能收到通知。
下面是几个可行的解决方法:
手动在Workflow里指定通知对象
Bot触发Workflow时,把原始用户的用户名(比如从触发事件里拿到的sender.login)作为参数传给Workflow。比如调用GitHub API触发时,加上inputs字段:curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token YOUR_BOT_TOKEN" \ https://api.github.com/repos/OWNER/REPO/actions/workflows/WORKFLOW_ID/dispatches \ -d '{"ref":"main","inputs":{"original_user":"USER_LOGIN"}}'然后在Workflow的通知步骤里直接用这个参数,比如发Issue评论:
- name: 发送Workflow结果通知 uses: actions/github-script@v6 with: script: | github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: `@${{ inputs.original_user }} 你触发的Workflow已完成,状态:${{ job.status }}` })通过关联的Issue/PR获取原始用户
如果Workflow是和特定Issue或PR绑定的,Bot触发时带上对应的编号,Workflow里用GitHub API拉取该Issue/PR的创建者或操作用户,以此作为通知对象:- name: 获取原始操作用户 id: get_original_user uses: actions/github-script@v6 with: script: | const prInfo = await github.rest.pulls.get({ owner: context.repo.owner, repo: context.repo.repo, pull_number: ${{ inputs.pr_number }} }) return prInfo.data.user.login result-encoding: string - name: 定向发送通知 uses: actions/github-script@v6 with: script: | github.rest.issues.createComment({ issue_number: ${{ inputs.pr_number }}, owner: context.repo.owner, repo: context.repo.repo, body: `@${{ steps.get_original_user.outputs.result }} 你的Workflow运行结束,状态:${{ job.status }}` })关闭默认通知,用自定义逻辑替代
GitHub默认的Workflow通知是基于actor的,没法直接修改接收人。可以先在仓库设置里关闭Workflow的默认通知,然后在Workflow里实现自己的通知逻辑,直接把消息发给原始用户,方式可以是Issue评论、邮件或者团队聊天工具通知。
内容的提问来源于stack exchange,提问作者WoodyWoodsta
相关产品推荐
相关产品推荐

