GitHub `actions/checkout`:获取推送事件之前的历史记录

问题描述 投票:0回答:2

在由

push
事件触发的 GitHub Actions 工作流程中,我想使用
actions/checkout
操作来获取推送事件中所有提交的 git 历史记录,以及推送事件之前的最后一次提交(无需获取整个历史)。

但是,actions/checkout 只提供了

fetch-depth
参数,该参数输入要获取的提交次数,但这是未知的。推送事件负载包含作为数组的提交列表,但 GitHub Actions 中没有本地函数来计算数组的长度。人们可以在使用 checkout 来计算有效负载中的提交数量之前编写一个额外的步骤,但这似乎有点太老套了。

是否有一种直接的方法来获取推送事件之前的历史记录?这似乎是一件很常见的事情,所以奇怪的是我找不到一种简单的方法来做到这一点,比如:

  - needs: actions/checkout@v3
    with:
      - from-ref: ${{ github.event.before }}
github github-actions git-checkout
2个回答
0
投票

目前,这是我的解决方法:

jobs:

  my-job:
    runs-on: ubuntu-latest
    steps:

      - name: Calculate fetch-depth
        id: pre-checkout
        env:
          COMMITS: ${{ toJson(github.event.commits) }}
        run: |
          if [[ "${{ github.event_name }}" == "push" ]]; then
            COUNT=$(( $(echo "$COMMITS" | jq length) + 1 ))
          else
            COUNT=1
          fi
          echo "fetch-depth=$COUNT" >> "$GITHUB_OUTPUT"

      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: ${{ steps.pre-checkout.outputs.fetch-depth }}

正如问题中提到的,在使用

actions/checkout
计算
fetch-depth
之前需要一个额外的步骤。在这里,我们首先检查
github.event_name
上下文;如果是
push
,则输出
github.event.commits
数组的长度加 1,否则输出 1,然后在
checkout
步骤中使用此输出作为
fetch-depth
参数。

这并不漂亮,但目前这是我能找到的最简单的方法。我在

actions/checkout
中打开了一个问题以添加本机支持:https://github.com/actions/checkout/issues/1444


0
投票

我能为

pull_requests
找到的更干净的方法是:

jobs:
  my-job:
    runs-on: ubuntu-latest
    steps:
       - name: Checkout
         uses: actions/checkout@v3
         with:
             fetch-depth: $(( ${{ github.event_name == 'pull_request' && github.event.pull_request.commits || 0 }} + 1 ))

使用文档中提到的三元运算。所以我们不需要额外的步骤。
您也可以对

push
使用相同的格式,但需要更改事件名称和提交计数。

© www.soinside.com 2019 - 2024. All rights reserved.