Github 工作流程:如何将输入选项映射到值

Github Workflow: How to map input option to value

我为我的 Github 工作流程

设置了以下输入
on:
  workflow_dispatch:
    inputs:
      environment:
        type: choice
        description: Environment
        options:
          - Development
          - QA
          - UAT
          - Production

如果用户选择 Development 作为环境,我想在我的一些字符串连接中使用单词 dev,如果他们选择 Production 我想使用 prod 出于同样的目的。

这是需要进行替换的区域示例。

- name: Package App
  run: |
    move-file .env.$TARGET_ENVIRONMET .env
    yarn package:$TARGET_ENVIRONMENT

在这个例子中,我需要 move-file 命令为 move-file .env.dev .envyarn package 命令为 yarn package:dev 用于开发,但我在映射 Development 开发。如果用户选择 Development,我考虑将变量设置为 dev,但看起来唯一的变量支持是用于设置环境变量,而且似乎不可能有条件地实现。

所以我不能做这样的事情

env:
  if: inputs.environment == 'Development'
    TARGET_ENVIRONMENT: 'dev'
  if: inputs.environment == 'Production'
    TARGET_ENVIRONMENT: 'prod'

有一些方法可以将您的输入映射到 env 变量 - 您可以使用执行此操作的操作:

- uses: kanga333/variable-mapper@master
  id: export
  with:
    key: "${{ github.event.inputs.environment }}"
    map: |
      {
        "Development": {
          "environment": "dev"
        },
        "Production": {
          "environment": "prod"
        }
      }
    export_to: env
- run: |
    move-file .env.$environment .env

或者您可以使用某种 hack 并像这样定义您的环境(在工作级别):

env:
  TARGET_ENVIRONMET: >
    ${{ fromJson('{
      "Development": "dev",
      "Production": "prod"
    }')[github.event.inputs.environment] }}
steps:
  - run: |
      move-file .env.$TARGET_ENVIRONMET .env