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

oma*_*ase 2 github github-actions

我为我的 Github 工作流程设置了以下输入

on:
  workflow_dispatch:
    inputs:
      environment:
        type: choice
        description: Environment
        options:
          - Development
          - QA
          - UAT
          - Production
Run Code Online (Sandbox Code Playgroud)

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

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

- name: Package App
  run: |
    move-file .env.$TARGET_ENVIRONMET .env
    yarn package:$TARGET_ENVIRONMENT
Run Code Online (Sandbox Code Playgroud)

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

所以我不能做这样的事情

env:
  if: inputs.environment == 'Development'
    TARGET_ENVIRONMENT: 'dev'
  if: inputs.environment == 'Production'
    TARGET_ENVIRONMENT: 'prod'
Run Code Online (Sandbox Code Playgroud)

Ond*_*ůma 5

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

- 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
Run Code Online (Sandbox Code Playgroud)

或者你可以使用某种 hack 并定义你的环境(在工作级别),如下所示:

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