GitHub Actionsで条件に応じて値を設定する

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 を利用する。