GitHub Actions:如何构建一个拉取请求,就好像它已经合并了?

18

我对GitHub Actions感到非常兴奋。

我现在使用Travis-CI和AppVeyor。它们都有“PR”(pull request)构建功能,可以构建代码,就好像这个pull request已经被合并了一样。

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

1个回答

17
根据这里这里的内容,如果您将工作流设置为基于pull_request事件而不是push事件触发,则GITHUB_SHA将是合并提交,因此checkout操作将检出合并结果,然后您可以在其上构建和运行单元测试。

这也在这里得到了官方文件的记录:

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

声明:我还没有进入beta版,所以无法验证这些信息;我只能传递其他人说过奏效的内容。

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

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在这里;该PR的第一个提交是提交ID ec81c6f

Picture evidence of commit ID

当我运行git fetch origin pull/10/merge:merge-pr-10以获取合并提交时,我得到的提交是f1ea865,将ec81c6f合并到44a09bc(这是该PR创建时我的master分支上最新的提交)。请注意实际构建的SHA:

Picture evidence of build SHA

所以只要使用on:[pull_request]作为工作流程的触发事件,它就会按照我的意愿执行。如果您查看PR的历史记录,您将看到我尝试了几种方法来查看新构建的触发条件:添加评论,关闭repo,打开repo……这是我发现的。

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

这都是我预期的。



8
推送新的提交到主分支是否触发了流水线?应该会,因为合并结果会有所不同。 - Marek Urbanowicz
当目标分支有新的提交直到PR合并时,流水线会再次运行吗? - Aayush Taneja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接