GitHub Actionsで条件に応じて変数に値を設定したい。
例えばmainブランチを対象とする場合はenvironmentにproduction
を、それ以外のブランチを対象とする場合はdevelopment
を設定したい。
このようなケースでは三項演算子が利用できる。
docs.github.com
これを利用すれば条件に応じて変数に値を設定することができる。
env:
MY_ENV_VAR: ${{ github.ref == 'refs/heads/main' && 'production' || 'development' }}
条件が増えた場合も同じように対応可能だが可読性が悪くなる。
このようなケースでは actionsとして kanga333/variable-mapper
がよさそう。
github.com
on: [push]
name: Export variables corresponding to regular expression-matched keys
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: kanga333/variable-mapper@master
with:
key: "${{github.base_ref}}"
map: |
{
"master": {
"environment": "production",
"AWS_ACCESS_KEY_ID": "${{ secrets.PROD_AWS_ACCESS_KEY_ID }}",
"AWS_SECRET_ACCESS_KEY": "${{ secrets.PROD_AWS_ACCESS_KEY_ID }}"
},
"staging": {
"environment": "staging",
"AWS_ACCESS_KEY_ID": "${{ secrets.STG_AWS_ACCESS_KEY_ID }}",
"AWS_SECRET_ACCESS_KEY": "${{ secrets.STG_AWS_ACCESS_KEY_ID }}"
},
".*": {
"environment": "development",
"AWS_ACCESS_KEY_ID": "${{ secrets.DEV_AWS_ACCESS_KEY_ID }}",
"AWS_SECRET_ACCESS_KEY": "${{ secrets.DEV_AWS_ACCESS_KEY_ID }}"
}
}
- name: Echo environment
run: echo ${{ env.environment }}
これを利用すれば、複数の環境変数を条件に応じて設定できるし可読性が高くなる。
ただし、上記のような使い分けになるとGitHub Environmentsの方が管理しやすくなりそう。
docs.github.com
これらを踏まえて、environmentsを動的に選択する処理には三項演算子を、environmentに応じた変数の使い分けはGitHub Environmentsを利用する。
environmentsで切り替えるようなユースケースでない場合は kanga333/variable-mapper を利用する。