如何在 github 中构建动态 UI 操作,类似于 Jenkins 中的主动选择参数

How to build dynamic UI in github actions similar to active choice parameters in Jenkins

提问人:Ashar 提问时间:5/2/2023 更新时间:11/13/2023 访问量:326

问:

我熟悉 Jenkins 中的主动选择参数插件来构建动态 UI。

选择一个参数后,将动态填充第二个参数。

我是 github 操作的新手,但想知道是否有可能实现如下目标。

列出具有以下选项的多选Dropdown 1

Color
Fruit

如果选择“颜色”,则“动态”将显示:Dropdown 2

Green
Blue
Red

如果选择“水果”:

Apple
Orange

如果同时选择了“颜色”和“水果”:

Green
Blue
Red
Apple
Orange

恳请建议。

if-statement Jenkins 参数 github-actions dynamic-ui

评论


答:

1赞 VonC 5/2/2023 #1

Actions/Runner 问题 998 就是这种动态输入需求的一个例子,但已关闭。

此处演示了不同的方法来模拟该功能,但您也可以尝试使用“GitHub Actions:手动工作流的输入类型”:

  • 将配置文件添加到存储库
  • 根据您的选择从该文件中读取值。

配置文件:dynamic_options.json

{
  "Color": ["Green", "Blue", "Red"],
  "Fruit": ["Apple", "Orange"]
}

以及您的工作流脚本:

name: Dynamic Dropdown Workflow

on:
  workflow_dispatch:
    inputs:
      list_1:
        typoe: choice
        description: 'Select options:'
        required: true
        default: 'Color'
        options: 
        - Color
        - Fruit
      list_2:
        description: 'Select dynamic options:'
        required: true
        default: ''

jobs:
  dynamic-dropdown:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Install jq
        run: |
          sudo apt-get update
          sudo apt-get install jq

      - name: Retrieve dynamic options
        id: get_dynamic_options
        run: |
          IFS=',' read -ra INPUT_OPTIONS <<< "${{ github.event.inputs.list_1 }}"
          DYNAMIC_OPTIONS=""
          for option in "${INPUT_OPTIONS[@]}"; do
            OPTION_VALUES=$(jq ".$option | join(\",\")" dynamic_options.json --raw-output)
            if [ -n "$DYNAMIC_OPTIONS" ] && [ -n "$OPTION_VALUES" ]; then
              DYNAMIC_OPTIONS+=","
            fi
            DYNAMIC_OPTIONS+="$OPTION_VALUES"
          done
          echo "DYNAMIC_OPTIONS=$DYNAMIC_OPTIONS" >> $GITHUB_ENV

      - name: Use dynamic options
        run: |
          echo "Selected options from List 1: ${{ github.event.inputs.list_1 }}"
          echo "Selected options from List 2: $DYNAMIC_OPTIONS"
          # Continue with your workflow steps using the dynamic options

在第 998 期中,Mike Lohmeier 报告说

这对我有用。

on:
  workflow_dispatch:
    inputs:
      environment:
        required: true
        type: environment
jobs:
  deploy:
name: Deploy
    environment:
      name: ${{ inputs.environment }}