我对GitHub Actions感到非常兴奋。
我现在使用Travis-CI和AppVeyor。它们都有“PR”(pull request)构建功能,可以构建代码,就好像这个pull request已经被合并了一样。
我想使用GitHub Actions进行持续集成,但似乎GitHub Actions只支持构建推送的提交,而不是合并后的结果。我该如何实现我想要的效果?
我对GitHub Actions感到非常兴奋。
我现在使用Travis-CI和AppVeyor。它们都有“PR”(pull request)构建功能,可以构建代码,就好像这个pull request已经被合并了一样。
我想使用GitHub Actions进行持续集成,但似乎GitHub Actions只支持构建推送的提交,而不是合并后的结果。我该如何实现我想要的效果?
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
:
当我运行git fetch origin pull/10/merge:merge-pr-10
以获取合并提交时,我得到的提交是f1ea865
,将ec81c6f
合并到44a09bc
(这是该PR创建时我的master
分支上最新的提交)。请注意实际构建的SHA:
所以只要使用on:[pull_request]
作为工作流程的触发事件,它就会按照我的意愿执行。如果您查看PR的历史记录,您将看到我尝试了几种方法来查看新构建的触发条件:添加评论,关闭repo,打开repo……这是我发现的。
这都是我预期的。