如何在每次推送提交时运行 GitHub 工作流程

Las*_*sse 11 github-actions

我有一些测试,我想在我的存储库的每次提交上运行。我的仓库中有以下脚本:

name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - run: echo "my tests"
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我将一些新的提交推送到我的存储库,则测试仅针对最新的提交运行。有没有办法测试所有提交?

Dav*_*ner 7

可以通过检查各个提交并一步构建每个提交来实现这一点run:

为了做到这一点,该操作fetch-depth的选项checkout需要是0签出完整的 git 树。

我使用GitPython做了类似的事情来迭代并检查每个提交。

仅使用git命令行工具,rev-list命令可用于创建提交列表。

棘手的部分是确定提交范围。对于拉取请求,GitHub 操作提供了github.head_ref可用于创建提交范围的github.base_ref属性 ( docs )。但是,这些属性不可用于其他事件,例如push(在这种情况下,github.ref可以与固定分支名称一起使用,例如origin/main)。

这是一个简单的例子。它可能需要更多高级查询来rev-list处理base_ref不是 的祖先的情况head_ref,但我将把它留给其他问题来回答。

name: CI

on: [pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - run: |
          for commit in $(git rev-list ${{ github.base_ref }}..${{ github.head_ref }}); do
              git checkout $commit
              echo "run test"
          done
Run Code Online (Sandbox Code Playgroud)