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
相关产品推荐
相关产品推荐

