У меня есть следующий ввод для моего рабочего процесса 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 .env, а команда yarn package была yarn package:dev для разработки, но у меня возникли проблемы с сопоставлением Development с dev. Я посмотрел на установку переменной в dev, если пользователь выбрал Development, но похоже, что единственная поддержка переменных предназначена для установки переменных среды, и это не представляется возможным условно.
Поэтому я не могу сделать что-то подобное
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
или вы можете использовать какой-то хак и определить свой env (на уровне работы) следующим образом:
env:
TARGET_ENVIRONMET: >
${{ fromJson('{
"Development": "dev",
"Production": "prod"
}')[github.event.inputs.environment] }}
steps:
- run: |
move-file .env.$TARGET_ENVIRONMET .env