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

如何从仓库文件提取值到GitHub Actions YAML工作流输入选项?

解决方案说明

首先明确:GitHub Actions的on.workflow_dispatch.inputs属于静态配置,在工作流触发前就需要确定所有选项,因此无法直接在on阶段调用actions/checkout或jq这类工具动态读取config.json的内容。下面提供两种可行的实现思路:

方案一:预先生成工作流文件

通过脚本读取config.json的内容,自动更新工作流YAML中的选项列表,确保两者同步。

示例Shell脚本(依赖jq)

#!/bin/bash
# 从config.json提取types的所有键,格式化为YAML选项格式
OPTIONS=$(jq -r '.types | keys[] | "        - \(. )"' config.json)
# 替换工作流文件里的options区块
sed -i.bak "/options:/,/^[^ ]/c\        options:\n$OPTIONS" .github/workflows/office.yml
# 删除备份文件
rm .github/workflows/office.yml.bak

使用方式:

  • 每次修改config.json后,运行该脚本更新工作流文件
  • 可以将脚本配置为Git预提交钩子,自动在提交前更新工作流,避免手动操作遗漏

方案二:改用文本输入+运行时验证

如果不想频繁修改工作流文件,可以将输入类型改为文本框,在工作流运行阶段验证输入是否合法。

示例工作流配置

name: The Office

on:
  workflow_dispatch:
    inputs:
      cast:
        description: '请输入角色名称(可选值:Michael、Dwight、Jim)'
        required: true
        type: string

jobs:
  validate-execute:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: 验证输入的角色合法性
        id: validate_cast
        run: |
          # 提取合法角色列表
          VALID_ROLES=$(jq -r '.types | keys | join(", ")' config.json)
          # 检查输入是否在合法列表中
          if ! jq -e --arg input "${{ github.event.inputs.cast }}" '.types | has($input)' config.json; then
            echo "错误:输入的角色不在合法范围内,可选角色:$VALID_ROLES"
            exit 1
          fi
          # 输出验证后的角色名称,供后续步骤使用
          echo "validated_cast=${{ github.event.inputs.cast }}" >> $GITHUB_OUTPUT
      
      - name: 执行后续任务
        run: |
          echo "当前选择的角色是:${{ steps.validate_cast.outputs.validated_cast }}"
          # 这里添加你的业务逻辑

总结

如果必须使用choice类型的下拉选项,只能通过预生成工作流文件的方式实现;若可以接受文本输入,方案二更灵活,无需频繁修改工作流配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:07:27