利用者からの input 情報を Context 参照する場合はスクリプトインジェクション対策として中間環境変数を利用してください。
https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
GitHub Actionsのワークフローを作成している時に環境変数を参照したいことがよくあります。GitHub Actionsのワークフローから環境変数を参照する場合はshellと同じように$ENVと記述する方法とGitHub Actions独自に存在するContexを使って${{ env.ENV }} と記述する方法があります。どちらを使えば良いか個人的にはContext記法で統一した方が混乱しないなと思ったのでその理由を記載します。
$ENVの記法はjobs.<job_id>.steps[*].run内でしか使えない
$ENVはshellでの記法なのでshellのコマンドラインを実行できるjobs.<job_id>.steps[*].run内でしか使えません。run以外の箇所に記載しても環境変数が展開されずそのままの文字で解釈されます。
name: test
on:
push:
branches:
- 'test'
jobs:
env-test:
runs-on: ubuntu-latest
env:
HOGE: hoge
steps:
- name: set FUGA
run: |
echo 'FUGA=fuga' >> $GITHUB_ENV
- name: echo test
run: |
echo $HOGE
echo $PIYO
env:
PIYO: $FUGA
出力
hoge
$FUGA
envに$FUGAを指定しましたが環境変数が展開されず$FUGAのまま出力されてしまいました。
${{ env.ENV }}であればどこでも環境変数が参照できる
Context記法であればrun以外の箇所でも環境変数を参照できます。
name: test
on:
push:
branches:
- 'test'
jobs:
env-test:
runs-on: ubuntu-latest
env:
HOGE: hoge
steps:
- name: set FUGA
run: |
echo 'FUGA=fuga' >> $GITHUB_ENV
- name: echo test
run: |
echo $HOGE
echo ${{ env.HOGE }}
echo $PIYO
env:
PIYO: ${{ env.FUGA }}
出力
hoge
hoge
fuga
runとenvでContext記法による環境変数参照を記載しましたが、どちらも値が展開されて出力されました。
おわりに
よくshell記法での環境変数参照をrun以外でも書いちゃうことがあったので、どこで使用しても環境変数参照できるContext記法で統一した方が混乱しないなと思いました。