Windows GitとGitHub Actions [ubuntu-latest]でcase-sensitiveかどうかが異なる
Gitは、Windows環境下ではデフォルトではファイル名の大文字・小文字を区別しない(case-insensitive)。一方、GitHub Actions、というよりUbuntu環境のデフォルトでは、ファイル名の大文字・小文字を区別する(case-sensitive)。
正確には、Gitは導入されたOSによってcase-sensitivityが変わるようである。Windows環境はデフォルトがcase-insensitiveなので、Git上でもcase-insensitiveになる。同様にGitHub Actionsはruns-on
で環境を指定でき、それによって大文字・小文字を区別するかどうかが異なるが、人気があると思われるubuntu-latest
は区別する。
何が問題か?
例えば、WindowsマシンでTypeScriptを書いており、moduleA.ts
というファイルでmoduleを定義し、同じディレクトリのB.ts
というファイルで参照するとする。
import { *** } from './moduleA';
この内容でcommitし、GitHub Actionsを設定してビルドが成功しているとしよう。
ここで、moduleA.ts
をModuleA.ts
に変えたいと思ったとする。
import { *** } from './ModuleA';
これをcommit・pushすると、Gitのデフォルトはcase-insensitiveなので、ファイル名がmoduleA.ts
のままになってしまう。一方、B.ts
の中身はしっかりModuleA.ts
を参照するように変化する。
これでActionsを動かした場合、リポジトリにはModuleA.ts
というファイルが存在していないので、B.tsのビルドに失敗する。
どう回避するか?
最も簡単なのは、Gitにcase-sensitiveになってもらうことであると思われる。
$ git config core.ignorecase false
別の方法として、GitHub Actionsの環境をwindows-latest
のようにcase-insensitiveなものにするという方法が考えられるが、別の問題が起こりそうだし、試したことがないので個人的にはあまりオススメしない。