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

如何在GitHub Actions中检出变更YAML文件并保存为数组

解决GitHub Actions动态处理变更YAML文件并上传的方案

1. 动态获取变更的YAML文件列表

不用第三方工具,直接用actions/checkout拉取仓库后,通过git命令筛选出最近推送里变更的YAML文件,把结果存为步骤输出变量:

- name: Checkout repo
  uses: actions/checkout@v4
  with:
    fetch-depth: 2  # 必须拉取前一次提交才能对比变更

- name: Extract changed YAML files
  id: get-yamls
  run: |
    # 对比当前提交与上一次提交,过滤出.yml/.yaml文件
    CHANGED=$(git diff --name-only HEAD^ HEAD | grep -E '\.(yml|yaml)$')
    # 将结果写入步骤输出,空值也会正确传递
    echo "changed_files<<EOF" >> $GITHUB_OUTPUT
    echo "$CHANGED" >> $GITHUB_OUTPUT
    echo "EOF" >> $GITHUB_OUTPUT

2. 循环上传每个变更文件

基于上面的输出,用bash数组处理文件列表,逐个调用curl上传:

- name: Upload YAML files to target site
  if: steps.get-yamls.outputs.changed_files != ''
  run: |
    # 把换行分隔的文件列表转为bash数组,兼容带空格的文件名
    IFS=$'\n' read -r -d '' -a yaml_list <<< "${{ steps.get-yamls.outputs.changed_files }}"
    # 遍历数组上传每个文件
    for file in "${yaml_list[@]}"; do
      echo "Uploading $file..."
      curl -X POST \
        -H "Content-Type: application/yaml" \
        --data-binary "@$file" \
        "https://your-upload-endpoint.com"  # 替换成你的目标站点地址
    done

核心优势

  • 完全动态获取文件列表,不需要硬编码任何路径
  • 用GitHub Actions原生的步骤输出传递数据,避免第三方工具的限制
  • bash数组处理确保文件名含空格时也能正常工作
  • 加了条件判断,没有变更文件时跳过上传步骤,节省资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:13:28