You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中获取Push事件新增Zip文件名失败排查

问题分析与解决方案

代码存在的问题

  • 路径过滤规则错误:工作流触发条件里的paths: ['test/**zip']写法有误,**用于匹配任意层级目录,但缺少/*.zip后缀匹配规则,会错误匹配类似test/filezip这类文件名含zip的文件,而非.zip后缀的压缩包。这会导致工作流要么没在正确的push操作下触发,要么触发后无法定位到目标文件。
  • head_commit.added的局限性:如果push操作包含多个提交(比如合并PR到main分支),github.event.head_commit指向的是合并提交,这个提交本身不会生成added文件列表——新增文件的记录存在于合并前的提交中。即使是单个提交,若提交仅修改已有文件而非新增文件,该字段也会为空。

修正后的代码

name: SCR Initial

on:
  push:
    branches:
      - main
    paths:
      - 'test/**/*.zip'  # 修正路径匹配规则,精准匹配test目录下所有zip文件

jobs:
  SCR:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 2  # 拉取最近2个提交,用于对比提交差异

      - name: Get added zip file name
        run: |
          # 对比当前提交与上一个提交,筛选出新增的zip文件
          ADDED_ZIPS=$(git diff --name-only --diff-filter=A HEAD~1 HEAD | grep '\.zip$')
          echo "Commit text = ${{ github.event.head_commit.message }}"
          echo "Artifact name(s): $ADDED_ZIPS"
          # 获取第一个新增的zip文件
          FIRST_ZIP=$(echo "$ADDED_ZIPS" | head -n 1)
          echo "Artifact1 name = $FIRST_ZIP"

关键说明

  • fetch-depth: 2:确保拉取足够的提交历史,让git diff能正常对比当前提交与上一个提交的文件差异。
  • git diff --name-only --diff-filter=A:仅输出新增的文件路径,再通过grep '\.zip$'筛选出zip后缀的文件,避免无关文件干扰结果。

内容的提问来源于stack exchange,提问作者KK_Int

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:02