Windows 向けの GitHub Actions で PATH を通すとき
はじめに
scoop
をインストールする Action を作っていてハマったので、ちょっと備忘録- そんなにちゃんと調べてません (滝汗)
TL;DR
- 普通の Windows 形式のパスなら何も考えずに
$GITHUB_PATH
のファイルに追記すれば OK- 例(
shell: pwsh
の場合):echo C:\Users\foo\bar >> $Env:GITHUB_PATH
- 例(
- ホームディレクトリ以下を指定したい場合は
(Resolve-Path ~\bar\).Path >> $Env:GITHUB_PATH
とかすれば OK - Windows 形式、 cygwin 形式どっちが必要かわからなくても Windows 形式で足しておけば問題ない
バックグラウンド
GitHub Actions での環境変数周辺
- ステップ内で環境変数を変更・追加できるが、それは以降のステップには引き継がれない
PATH
についてはadd-path
などが用意されていたがセキュリティ上のアレで deprecated になって環境ファイル$GITHUB_PATH
を使う形になった- 追加したいパス1つごとに1行で
$GITHUB_PATH
で示されるファイルに追加する $GITHUB_PATH
を使ったからといって「shell:
の違いを吸収して Windows <-> cygwin のパス変換」とかはしてくれない
PowerShell の事情
- コマンドプロンプトと違って
~
とか使える - だけど
echo ~\scoop\shims
>> $Env:GITHUB_PATHとかすると
~` の解決がされずにそのままファイルに追記されてしまう- ちゃんと確認してないけど
~
の状態じゃパスが通ってない扱いになる?
- ちゃんと確認してないけど
- この辺のパス解決をさせるには
(Resolve-Path ~\scoop\shims).Path
とかすればいい - PowerShell では cygwin 形式のパスを
PATH
に設定しても効果がない
shell:bash
on Windows での事情
shell: bash
にしたとき Windows 環境では Git for Windows の bash が使われると書いてある- 環境変数
PATH
は cygwin 形式だけでなく Windows 形式のパスも受け付ける - cygwin 形式のパスを Windows 形式に変換するのは
cygpath cygwin形式のパス
でできる
というわけで、全部合わせると…
PowerShell (shell: pwsh
) で解決する場合
(Resolve-Path ~/scoop/shims).Path >> $Env:GITHUB
bash (shell: bash
) で解決する場合
cygpath ~/scoop/shims >> $GITHUB_PATH
bash
もpwsh
も Windows 形式のパスを受け付けるのでそちらに統一してしまうのが良さそう- bash でしか使わないなら
echo ~/scoop/shims >> $GITHUB_PATH
でも良さそう (だけどあえてそうする理由もなさそう) - 今回私が遭遇したケースは PowerShell で
scoop
をインストールした前提なので、普通にそのまま続けて PowerShell でResolve-Path
使います