GitHub Actions: how to build a pull request as if it were merged?

chr*_*bia 5 github-actions

我对GitHub Actions感到非常兴奋。

我现在使用Travis-CI和AppVeyor,它们具有“ PR”(拉请求)构建,可以构建代码,就像合并了拉请求一样。

我想使用GitHub Actions进行持续集成,但是GitHub Actions似乎仅支持构建推送的提交,而不是合并的结果。如何达到我想要的效果?

rmu*_*unn 12

根据https://github.com/actions/checkout/issues/15#issuecomment-524093065https://github.com/actions/checkout/issues/15#issuecomment-524107344,如果您将工作流程设置为触发该pull_request事件而不是push事件时,GITHUB_SHA将是合并提交,这样checkout的行动将检查出的合并,然后你就可以建立和运行单元测试的结果。

它也在此处正式记录:

GITHUB_SHA=GITHUB_REF分支上的最后一次合并提交
GITHUB_REF= PR 合并分支refs/pull/:prNumber/merge

免责声明:我还没有进入测试版,所以我无法自己验证这些信息;我可以传递其他人所说的对他们有用的东西。

我现在已经进入测试版,所以我可以确认这有效。我在我的测试仓库中运行了以下工作流程的构建:

name: Build PR

on: [pull_request]

jobs:
  build:

    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macOS-latest]
        dotnet: [2.2.402, 3.0.100-rc1-014190]
    runs-on: ${{ matrix.os }}
    
    steps:
    # ... trimmed ...
    - name: Dump GitHub context
      env:
        GITHUB_CONTEXT: ${{ toJson(github) }}
      run: echo "$GITHUB_CONTEXT"
      if: runner.os != 'Windows'
    # ... trimmed ...
Run Code Online (Sandbox Code Playgroud)

这是该工作流运行的构建日志。公关在这里;该 PR 的第一次提交是提交 ID ec81c6f

提交ID的图片证据

当我跑到git fetch origin pull/10/merge:merge-pr-10去取合并提交,提交我得到f1ea865的一个合并ec81c6f44a09bc(这是最新的承诺我master在那个PR创建时分支)。并注意实际构建的 SHA:

构建SHA的图片证据

因此,只需将其on: [pull_request]用作我的工作流程的触发事件,它就完成了我想要的。如果您查看PR 的历史记录,您会发现我尝试了几件事来查看触发新构建的原因:添加评论、关闭存储库、打开存储库……这是我发现的内容。

  • 添加评论不会触发新的工作流程运行
  • 推送新的提交DID触发了新的工作流运行
  • 关闭 PR不会触发新的工作流程运行
  • 重新打开 PR DID触发了新的工作流程运行
  • 向 PR 添加标签不会触发新的工作流程运行
  • 从 PR 中删除标签不会触发新的工作流程运行

这正如我所料。

  • 将新提交推送到 master 是否会触发管道?应该是这样,因为合并结果会不同 (3认同)