我有一些测试,我想在我的存储库的每次提交上运行。我的仓库中有以下脚本:
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)
不幸的是,如果我将一些新的提交推送到我的存储库,则测试仅针对最新的提交运行。有没有办法测试所有提交?
可以通过检查各个提交并一步构建每个提交来实现这一点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)
| 归档时间: |
|
| 查看次数: |
11978 次 |
| 最近记录: |