Home > Blockchain >  Github Workflow: How to map input option to value
Github Workflow: How to map input option to value

Time:05-17

I have the following input set up for my Github Workflow

on:
  workflow_dispatch:
    inputs:
      environment:
        type: choice
        description: Environment
        options:
          - Development
          - QA
          - UAT
          - Production

If the user picks Development as the environment, I want to use the word dev in some of my string concatenations, if they pick Production I want to use prod for the same purpose.

Here's an example of what the areas look like where substitution needs to occur.

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

In this example I need the move-file command to be move-file .env.dev .env and the yarn package command to be yarn package:dev for Development but I'm having trouble mapping Development to dev. I looked at setting a variable to dev if the user picked Development but it looks like the only variable support is for setting environment variables and that doesn't appear to be possible conditionally.

So I can't do something like this

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

CodePudding user response:

There are some ways to map your input to env variable - you can either use an action that does just that:

- 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

or you can use kind of hack and define your env (on job level) like this:

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