GitHub Actions のワークフローでブランチ名に応じて、codegen用のGraphQL APIエンドポイントを変えたい
GraphQL APIエンドポイントは環境変数の値を変えれば良いようになっているので、実際にはブランチ名に応じて環境変数の値を変えれば良い
環境はstagingとdevelopがあり、developもしくはdevelop/xxxxxというブランチ名であればdevelop環境のエンドポイントにする
やり方
ブランチ名をとるにはgithub.ref_nameを使う
簡単な使い方
steps: - name: Print branch name run: echo "Branch name is ${{ github.ref_name }}"
これを応用して
- name: Set environment variables run: | if [[ "${{ github.ref_name }}" =~ ^develop(/|$) ]]; then echo "API_END_POINT=https://develop.my-project.com/graphql" >> $GITHUB_ENV else echo "API_END_POINT=https://staging.my-project.com/graphql" >> $GITHUB_ENV fi
とすれば、環境変数に設定してくれる
$GITHUB_ENVは、GitHub Actionsのワークフロー内で環境変数を設定するための特別なファイルパスで、このファイルに書き込んだ環境変数は、同じジョブ内の後続のステップで利用可能になる
ステップ間で値を共有できるので、別のステップでこの環境変数を使いたい場合にはこれを使用する
他のステップで使う場合は以下のようにenv.環境変数名で呼び出す
- run: pnpm codegen env: API_END_POINT: ${{ env.API_END_POINT }}
github.ref_name と github.head_ref
これを調べるにあたって、ブランチ名を取得するにはgithub.ref_name と github.head_refのどちらを使うべきか迷った
違いをまとめておく
github.ref_name
- 概要: 現在のリファレンス(ブランチやタグ)の名前を取得する
- 使用可能なイベント: すべてのイベントで使用可能
- 特徴:
pushイベントでは 現在のブランチ名 を取得pull_requestイベントでは マージ先のブランチ名(baseブランチ)を取得
使う場面
pushイベントでブランチ名やタグ名を取得したいとき- `pull_request
イベントでマージ先ブランチ(base`)名を取得したいとき
github.head_ref
- 概要: プルリクエストで変更元(
head)ブランチ名を取得する - 使用可能なイベント:
pull_requestイベント専用 - 特徴:
- プルリクエストが作成された場合、PR元のブランチ名を取得
pushイベントでは空の値になる
使う場面
pull_requestイベントで変更元のブランチ名を取得したいとき
まとめ
pushイベント:github.ref_nameが適切
pull_requestイベント:- マージ先ブランチを取得したい →
github.ref_name - PR元ブランチを取得したい →
github.head_ref
- マージ先ブランチを取得したい →