GitHub 操作:如何像合并一样构建拉取请求?
GitHub Actions: how to build a pull request as if it were merged?
我对 GitHub 行动感到非常兴奋。
我现在使用 Travis-CI 和 AppVeyor,它们具有 "PR"(拉取请求)构建,构建代码就像合并拉取请求一样。
我想使用 GitHub Actions 进行持续集成,但似乎 GitHub Actions 只支持构建推送提交,不支持合并结果。如何达到我想要的效果?
根据 https://github.com/actions/checkout/issues/15#issuecomment-524093065 and https://github.com/actions/checkout/issues/15#issuecomment-524107344,如果您将工作流设置为触发 pull_request
事件而不是 push
事件,则 GITHUB_SHA
将是合并提交,因此 checkout
操作将检查合并的结果,然后您可以对其进行构建和 运行 单元测试。
官方也有记载here:
GITHUB_SHA
= Last merge commit on the GITHUB_REF
branch
GITHUB_REF
= PR merge branch refs/pull/:prNumber/merge
免责声明:我还没有进入测试版,所以我不能自己验证这些信息;我可以传递其他人所说的对他们有用的东西。
我现在已经进入了测试版,所以我可以确认这是否有效。我 运行 在 my test repo 中构建了以下工作流程:
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 ...
Here's a build log of that workflow running. The PR is here;该 PR 的第一个提交是提交 ID ec81c6f
:
当我 运行 git fetch origin pull/10/merge:merge-pr-10
获取合并提交时,我得到的提交是 f1ea865
,ec81c6f
到 44a09bc
的合并(这是创建 PR 时我的 master
b运行ch 上的最新提交)。并注意实际构建的 SHA:
因此,仅通过使用 on: [pull_request]
作为我工作流程的触发事件,它就达到了我想要的效果。如果您查看 the PR's history,您会发现我尝试了几种方法来查看是什么触发了新构建:添加评论、关闭存储库、打开存储库……这是我发现的。
- 添加评论没有触发新的工作流程运行
- 推送新提交 DID 触发新工作流程 运行
- 关闭 PR 不会 触发新的工作流程 运行
- 重新打开 PR DID 触发新的工作流 运行
- 向 PR 添加标签 不会 触发新的工作流 运行
- 从 PR 中删除标签 不会 触发新的工作流程 运行
这就是我所期望的。
我对 GitHub 行动感到非常兴奋。
我现在使用 Travis-CI 和 AppVeyor,它们具有 "PR"(拉取请求)构建,构建代码就像合并拉取请求一样。
我想使用 GitHub Actions 进行持续集成,但似乎 GitHub Actions 只支持构建推送提交,不支持合并结果。如何达到我想要的效果?
根据 https://github.com/actions/checkout/issues/15#issuecomment-524093065 and https://github.com/actions/checkout/issues/15#issuecomment-524107344,如果您将工作流设置为触发 pull_request
事件而不是 push
事件,则 GITHUB_SHA
将是合并提交,因此 checkout
操作将检查合并的结果,然后您可以对其进行构建和 运行 单元测试。
官方也有记载here:
GITHUB_SHA
= Last merge commit on theGITHUB_REF
branch
GITHUB_REF
= PR merge branchrefs/pull/:prNumber/merge
免责声明:我还没有进入测试版,所以我不能自己验证这些信息;我可以传递其他人所说的对他们有用的东西。
我现在已经进入了测试版,所以我可以确认这是否有效。我 运行 在 my test repo 中构建了以下工作流程:
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 ...
Here's a build log of that workflow running. The PR is here;该 PR 的第一个提交是提交 ID ec81c6f
:
当我 运行 git fetch origin pull/10/merge:merge-pr-10
获取合并提交时,我得到的提交是 f1ea865
,ec81c6f
到 44a09bc
的合并(这是创建 PR 时我的 master
b运行ch 上的最新提交)。并注意实际构建的 SHA:
因此,仅通过使用 on: [pull_request]
作为我工作流程的触发事件,它就达到了我想要的效果。如果您查看 the PR's history,您会发现我尝试了几种方法来查看是什么触发了新构建:添加评论、关闭存储库、打开存储库……这是我发现的。
- 添加评论没有触发新的工作流程运行
- 推送新提交 DID 触发新工作流程 运行
- 关闭 PR 不会 触发新的工作流程 运行
- 重新打开 PR DID 触发新的工作流 运行
- 向 PR 添加标签 不会 触发新的工作流 运行
- 从 PR 中删除标签 不会 触发新的工作流程 运行
这就是我所期望的。