フルと affected · キャッシュキー · 読み取り専用ファンアウト · 六段ゲート
大規模Monorepoを複数のリモート Mac Meshで回すチームは、キャッシュキーのずれ、affected グラフと Runner ラベルの不一致、未完のキャッシュ取得でキューを浪費しがちです。本稿ではフルビルド、affected、専用ヘビーノードの意思決定表、再現可能な入力境界と読み取り専用ファンアウト、六段のゲートを示します。成果物ファンアウトおよびMerge Queue と Runner ラベルと併読してください。
影響範囲ビルドは変更グラフ、ロックファイル、ツールチェーン指紋の一致に依存します。対話セッションと無人ジョブが同じプレフィックスを共有すると、幽霊依存がキーを汚染し、メトリクスに現れないまま affected が膨張します。
キャッシュとアーティファクトはバイト経路、本稿はグラフの刈り込みとトリガーです。
グラフとラベルの漂移:Runner ラベルごとにワークスペースルートが異なり affected 集合が食い違う。
ロックファイルがキーに無い:解決結果は変わったのに古い tarball がヒットする。
ツールチェーン指紋欠落:マイナー Xcode 差分が manifest に無くサイレント不一致。
ファンアウトと計算の混線:読み取り専用のはずのコンシューマーがキャッシュへ書き込む。
フルへの戻し条件が無い:共有カーネルや codegen 変更でも affected のみ固定。
マルチリージョンのリモート Mac プール向けの観点です。
| 観点 | フル優先 | affected 優先 | ヘビー分離 |
|---|---|---|---|
| 変更種別 | コード生成、ビルドスクリプト、共有ネイティブ境界 | 単一アプリ内の UI と文言 | 夜間バッチと日中 PR が同一プールを奪い合う |
| シグナル | affected が連続失敗または統合テストが不安定 | グラフとロック検証が安定 | CPU は空いているが壁時計が伸びる |
| キャッシュキー | ツールチェーン重みを上げ一時的に再利用停止 | ロックハッシュ+変更ハッシュ+ Runner OS | ヘビー専用プレフィックスと読み取り専用ミラー |
| リージョン | 単一 manifest 世代で開始 | ミラー遅延は許容、主プレフィックスへの書き戻し禁止 | プライマリが書き、衛星が読む |
| フルへ戻す | 保護ブランチ統合後の最初のグリーン前 | 週次の照合フル | 大きな Xcode 切替週はフル週間 |
再現可能な入力を凍結してから affected を調整します。
共有プール SSHが前提です。海洋越えのバイトは成果物ガイドのリースと manifest を適用します。
入力三重項:コミット、ロックダイジェスト、xcodebuild 指紋をヘッダに固定します。
単一グラフ:固定ラベルで解析し、影響パッケージ一覧を artifact 化します。
フル閾値:codegen や共有カーネル、ツールチェーン更新リストに当たればフルへ短絡し理由コードを残します。
プライマリ書き込み:主ビルダーのみが書き、衛星は読み取り専用です。
ファンアウト検証:ハッシュとサイズの二重検証後にポインタを切り替えます。
再試行と戻し:ネットワークは指数バックオフ、チェックサムはインシデント化し次コミットはフル強制です。
CACHE_KEY="${CI_COMMIT_SHORT_SHA}:${LOCKFILE_SHA256}:$(xcodebuild -version | shasum -a 256 | cut -c1-12)"
export TURBO_REMOTE_CACHE_SIGNATURE="${CACHE_KEY}"
echo "affected=$(npx turbo run build --dry=json | jq -r '.packages | length')" > "${CI_PROJECT_DIR}/affected.meta"
注:Turbo は Nx や Bazel に置換可能です。権威ある単一グラフと単調なキーが本質です。
二つの PR が共有パッケージを動かすとプレフィックスが交錯します。書き込み主体は CI プライマリに限定します。
シートロックの lease id をパスに埋め込み、観測可能なタスクチェーンのエンベロープに affected 数とフル短絡フラグを載せます。
警告:書き込み権限を閉じる前に多地域ファンアウトを開かないでください。
単一ライター:プレフィックスごとに同時に一リースのみ書き込み。
コンシューマ条件:manifest 世代が current の後にコンパイル開始。
人的ゲート:二回連続チェックサム失敗で affected を凍結し署名付きフルまで停止。
以下は計画の出発点であり SLA ではありません。
夜間 affected と IDE インデックスが同じディスクを叩くと CPU だけでは誤診します。
| チーム信号 | 初期姿勢 | ファンアウト |
|---|---|---|
| 小規模 | 単一リージョン主ビルドとローカル affected | 扇出は小 |
| マルチ PR | プライマリ書き込みと衛星読み取り | rsync かオブジェクトストレージと結合 |
| 夜間エージェント | ヘビーノードを対話プールから分離 | 共有キー枯渇を防ぐ |
個人ノートをゲートウェイにするとスリープと帯域の揺らぎで同時に損失が出ます。
契約化されたノードと監査可能な帯域が必要な iOS 継続的デリバリーと夜間 AI ワークロードでは、VpsMesh の Mac Mini クラウドレンタルが通常より適した選択です。ヒット率とキュー深度を同じレビュー表に載せられます。