📘
GitHub ActionsでMoonを使用する際の「master」ブランチエラーの解決方法
問題の概要
GitHub ActionsでMoon(monorepoビルドシステム)を使用していて、以下のようなエラーに遭遇したことはありませんか?
Error: process::failed
× Process git failed: exit code 128
│
│ fatal: ambiguous argument 'master': unknown revision or path not in the
│ working tree.
│ Use '--' to separate paths from revisions, like this:
│ 'git <command> [<revision>...] -- [<file>...]'
このエラーは、リポジトリのデフォルトブランチがmainなのに、Moonが内部的にmasterブランチを参照しようとすることで発生します。
解決方法:--affectedフラグを使用する
最もシンプルな解決方法は、moon runコマンドに--affectedフラグを追加することです。
修正前
- name: Check schema
run: |
moon run schema-model:lint
moon run schema-model:generate
修正後
- name: Check schema
run: |
moon run schema-model:lint --affected
moon run schema-model:generate --affected
なぜ--affectedフラグで解決するのか?
1. Git操作の違い
--affectedフラグなし
- Moonの内部処理(タスクグラフ構築、依存関係解決)で暗黙的にGit操作を実行
- ハードコードされた
masterブランチへの参照が存在 - 環境変数
MOON_VCS_DEFAULT_BRANCHが適用されない
--affectedフラグあり
- Moonが明示的にGit操作を制御
- CI環境を自動検出し、適切な設定を使用
- 環境変数を尊重し、正しいブランチ(
main)を参照
2. 技術的な詳細
--affectedフラグを使用すると、Moonは以下のように動作します:
ローカル環境
git status --porcelain --untracked-files
CI環境(GitHub Actionsなど)
git diff --name-only [BASE_REV]...[HEAD_REV]
この明示的なGit操作により、Moonは環境変数や設定ファイルの値を正しく適用できます。
3. PR環境での動作
GitHub ActionsのPull Request環境では:
- デフォルトの
actions/checkout@v4はマージコミットを作成 -
--affectedなしでは、Moonが適切なベースブランチを推測できない -
--affectedありでは、CI環境を検出して正しいブランチ比較を実行
完全な設定例
以下は、GitHub ActionsでMoonを使用する際の推奨設定です:
name: Moon CI
on:
pull_request:
push:
branches: [main]
env:
TZ: Asia/Tokyo
MOON_VCS_DEFAULT_BRANCH: main # デフォルトブランチを明示的に指定
jobs:
ci:
name: Moon CI
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 全履歴を取得(重要)
- name: Setup toolchain
uses: moonrepo/setup-toolchain@v0
with:
auto-install: true
# --affectedフラグを使用して影響を受けるプロジェクトのみ実行
- name: Run affected projects
run: |
moon run :lint :test --affected
- name: Build affected projects
run: |
moon run :build --affected
その他の解決方法
1. moon.ymlでデフォルトブランチを設定
# moon.yml
vcs:
manager: "git"
defaultBranch: "main"
2. Gitのグローバル設定を変更
steps:
- name: Configure git
run: |
git config --global init.defaultBranch main
- uses: actions/checkout@v4
ただし、これらの方法よりも--affectedフラグの使用が最も確実です。
まとめ
- GitHub ActionsでMoonを使用する際は、
--affectedフラグを追加する - これにより、Moonが適切にGit操作を管理し、正しいブランチを参照する
- CI環境では常に
--affectedフラグの使用を推奨
Discussion