我对 GitHub Actions 感到非常兴奋。
我现在使用 Travis-CI 和 AppVeyor,它们具有“PR”(拉取请求)构建,可以像合并拉取请求一样构建代码。
我想使用 GitHub Actions 进行持续集成,但似乎 GitHub Actions 只支持构建推送提交,而不是合并的结果。如何达到我想要的效果?
我对 GitHub Actions 感到非常兴奋。
我现在使用 Travis-CI 和 AppVeyor,它们具有“PR”(拉取请求)构建,可以像合并拉取请求一样构建代码。
我想使用 GitHub Actions 进行持续集成,但似乎 GitHub Actions 只支持构建推送提交,而不是合并的结果。如何达到我想要的效果?
根据https://github.com/actions/checkout/issues/15#issuecomment-524093065和https://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 ...
这是该工作流运行的构建日志。公关在这里;该 PR 的第一个提交是提交 ID ec81c6f
:
当我跑去git fetch origin pull/10/merge:merge-pr-10
获取合并提交时,我得到的提交是 onf1ea865
的合并(这是创建 PR 时我的分支上ec81c6f
的44a09bc
最新提交)。master
并注意实际构建的 SHA:
因此,只需将on: [pull_request]
其用作我的工作流程的触发事件,它就完成了我想要的。如果您查看PR 的历史记录,您会发现我尝试了几件事来查看是什么触发了新构建:添加评论、关闭 repo、打开 repo……这是我发现的。
这一切都如我所料。