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

