16

我对 GitHub Actions 感到非常兴奋。

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

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

4

1 回答 1

15

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

它也正式记录在这里

GITHUB_SHAGITHUB_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 ...

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

提交 ID 的图片证据

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

构建SHA的图片证据

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

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

这一切都如我所料。

于 2019-08-28T18:08:16.180 回答