モノレポのサブディレクトリにあるmise.tomlを読み込みたい

jdx/mise-actionは既定でリポジトリのルートディレクトリでmise installを実行する。モノレポ構成でmise.tomlがサブディレクトリにある場合、ルートディレクトリにはmise.tomlが存在しないため、そのままでは目的のツールがインストールされない。working_directory入力を使うと、mise-actionmise installなどを実行するディレクトリを指定できる。

working_directoryでmise.tomlのあるディレクトリを指定する

backend/mise.tomlにツールを定義する。

[tools]
jq = "1.7.1"

working_directorybackendを指定すると、mise-actionbackendディレクトリでmise installを実行する。後続のステップでmiseコマンドを使う場合も、GitHub Actions標準のworking-directoryキーで同じディレクトリを指定する。

- uses: actions/checkout@v4
- uses: jdx/mise-action@v4
  with:
    working_directory: backend
- run: mise ls
  working-directory: backend

ログを確認すると、backend/mise.tomlに定義したjqがインストールされている。

jq  1.7.1  ~/work/test/test/backend/mise.toml  1.7.1

working_directoryを指定しない場合の挙動

比較として、working_directoryを指定せず、後続のステップのworking-directoryだけをbackendにした場合を確認する。

- uses: actions/checkout@v4
- uses: jdx/mise-action@v4
- run: mise ls
  working-directory: backend

mise-actionはルートディレクトリでmise installを実行するため、ルートにmise.tomlが存在せず、jqはインストールされない。後続のmise lsworking-directory: backendの指定によってbackend/mise.tomlを見つけるが、インストール自体は行われていないためmissingと表示される。

jq  1.7.1 (missing)  ~/work/test/test/backend/mise.toml  1.7.1

mise-actionのステップ自体にworking_directoryを渡さないと、後続ステップ側でディレクトリを合わせるだけでは不十分である。モノレポでサブディレクトリのmise.tomlを使う場合は、mise-actionのステップにも必ずworking_directoryを指定する。