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

如何为GitHub Actions手动触发工作流动态填充分支下拉列表?

解决GitHub Actions手动触发工作流动态分支下拉的思路

首先得明确:GitHub Actions的workflow_dispatch输入的choice选项本身无法动态生成,因为工作流文件是仓库里的静态配置,GitHub解析时只会读取固定内容,没法实时执行命令生成选项。不过有几个变通方案可以实现类似需求:

方案1:用辅助工作流自动更新主工作流的静态选项

写一个辅助工作流,定时触发(比如每天一次)或者在分支创建/删除时触发,执行以下步骤:

  • 调用GitHub API获取当前仓库(或目标仓库)的所有分支列表
  • 用脚本(Python、Node.js、Shell都可以)提取分支名称,替换主工作流文件中choice的options数组内容
  • 将更新后的工作流文件提交并推送到仓库

这样每次用户手动触发主工作流时,下拉选项就是最新的分支列表了。举个简单的Shell脚本逻辑示例:

# 获取分支列表并格式化为YAML格式的选项
BRANCH_OPTIONS=$(gh api repos/OWNER/REPO/branches --jq '.[] | "- \(.name)"' | sort)

# 替换主工作流文件中的options部分
sed -i '/options:/,/^[^-]/c\        options:\n'"$BRANCH_OPTIONS"'' .github/workflows/main.yml

# 提交推送
git add .github/workflows/main.yml
git commit -m "Update branch options"
git push

方案2:改用字符串输入+分支校验

放弃choice类型,将输入改成string类型让用户手动输入分支名,然后在工作流的第一步添加分支校验逻辑:

  • 用git ls-remote --heads origin ${{ inputs.branch }}检查分支是否存在
  • 或者调用GitHub API验证分支有效性
  • 如果分支不存在,直接终止工作流并给出错误提示

示例配置:

on:
  workflow_dispatch:
    inputs:
      branch:
        type: string
        description: 输入要构建的分支名称

jobs:
  check-branch:
    runs-on: ubuntu-latest
    steps:
      - name: 验证分支存在性
        run: |
          if ! git ls-remote --heads origin "${{ inputs.branch }}" | grep -q "${{ inputs.branch }}"; then
            echo "错误:分支 ${{ inputs.branch }} 不存在!"
            exit 1
          fi

方案3:用本地CLI工具实现交互式触发

让用户通过GitHub CLI(gh)在本地触发工作流,结合交互式工具(比如fzf)实现动态分支选择:

  • 先通过gh api获取分支列表
  • 用fzf让用户交互式选择分支
  • 将选中的分支作为参数传给gh workflow run命令

示例命令:

# 获取分支列表并让用户选择
SELECTED_BRANCH=$(gh api repos/OWNER/REPO/branches --jq '.[] | .name' | fzf)

# 触发工作流并传入分支参数
gh workflow run main.yml -f branch="$SELECTED_BRANCH"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:34:57