Windows 向けの GitHub Actions で PATH を通すとき

はじめに

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 での環境変数周辺

PowerShell の事情

  • コマンドプロンプトと違って ~ とか使える
  • だけど echo ~\scoop\shims >> $Env:GITHUB_PATHとかすると~` の解決がされずにそのままファイルに追記されてしまう
    • ちゃんと確認してないけど ~ の状態じゃパスが通ってない扱いになる?
  • この辺のパス解決をさせるには (Resolve-Path ~\scoop\shims).Path とかすればいい
  • PowerShell では cygwin 形式のパスを PATH に設定しても効果がない

shell:bash on Windows での事情

というわけで、全部合わせると…

PowerShell (shell: pwsh) で解決する場合

(Resolve-Path ~/scoop/shims).Path >> $Env:GITHUB

bash (shell: bash) で解決する場合

cygpath ~/scoop/shims >> $GITHUB_PATH
  • bashpwshWindows 形式のパスを受け付けるのでそちらに統一してしまうのが良さそう
  • bash でしか使わないなら echo ~/scoop/shims >> $GITHUB_PATH でも良さそう (だけどあえてそうする理由もなさそう)
  • 今回私が遭遇したケースは PowerShellscoop をインストールした前提なので、普通にそのまま続けて PowerShellResolve-Path 使います

所感

  • そもそも何がイケなかったって「 shell: の違いを吸収して Windows <-> cygwin のパス変換」をやってくれるという錯覚を起こしたんですよね…それさえなければこんなにはハマらなかった気がする (という自己擁護)