如何在GitHub Actions中获取PR所有者的邮箱地址?
解决GitHub Action中PR所有者邮箱为空的问题
问题根源
- 上下文路径错误:你之前写的
github.event.pull_request.owner.email指向的是仓库所有者的邮箱,并非PR发起者;github.event.pull_request.pull_request.user.email多嵌套了一层pull_request,正确路径应为github.event.pull_request.user.email。 - 隐私限制:即使路径正确,GitHub默认不会在事件Payload中返回用户的私有邮箱——只有当用户在GitHub个人设置中把邮箱设为公开时,
user.email字段才会有值。
可行解决方案
方案1:依赖用户设置公开邮箱(简单但不可控)
让PR发起者在GitHub个人设置的「Emails」页面,取消勾选「Keep my email addresses private」选项,将邮箱设为公开。之后${{ github.event.pull_request.user.email }}就能正常获取到值。
方案2:通过GitHub API获取邮箱(可靠,无需用户修改设置)
使用GitHub API调取PR作者的邮箱信息,需借助GITHUB_TOKEN授权,示例代码如下:
jobs: run-custom-action: runs-on: ubuntu-latest steps: # 调用GitHub API获取用户邮箱 - name: Fetch PR author email id: fetch-email uses: octokit/request-action@v2.x with: route: GET /users/${{ github.event.pull_request.user.login }} headers: '{"Accept": "application/vnd.github.v3+json"}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 执行你的自定义Action - name: Run custom action uses: your/your-custom-action@v1 with: user-email: ${{ fromJSON(steps.fetch-email.outputs.data).email }}
注意:如果用户所有邮箱均设为私有,API仍会返回空值,但这种情况极少发生。
方案3:使用提交记录中的邮箱(备选)
如果不需要严格匹配PR所有者的GitHub账号邮箱,可直接取PR分支最后一次提交的作者邮箱,路径为:
with: user-email: "${{ github.event.pull_request.head.commit.author.email }}"
该值不受GitHub隐私设置影响,但可能与PR所有者的账号邮箱不一致(比如用户提交代码时用了本地配置的其他邮箱)。
内容的提问来源于stack exchange,提问作者Fallenreaper
相关产品推荐
相关产品推荐

