Skip to content

feat: clone できなかったリポジトリを up と workspace へ反映する (PLAN37) - #115

Merged
takemi-ohama merged 2 commits into
mainfrom
feat/plan37-clone-failure-visibility
Aug 23, 2026
Merged

feat: clone できなかったリポジトリを up と workspace へ反映する (PLAN37)#115
takemi-ohama merged 2 commits into
mainfrom
feat/plan37-clone-failure-visibility

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

Summary

複数リポジトリ構成で「primary には権限があるがサブリポジトリには権限がない」場合、clone の失敗は entrypoint が warning に留めてコンテナ起動を続ける(PLAN32 の方針)。この方針は維持したまま、失敗が利用者から見えない 2 点を直す。

直す前直した後
clone 失敗の warning は docker logs にしか出ず、up=== Deploy completed successfully === で終わるup/work の実体を確認し、project.yml に書いたのに無いリポジトリを clone URL 付きで警告する
clone に失敗したリポジトリも *.code-workspace に載り、VS Code に「開けないフォルダ」が並ぶclone できたリポジトリだけが folders に載る

設計上の判断

  • ログを grep せず /work の実体を見る。 ログはコンテナ再起動をまたいで積み上がるため「いつの失敗か」を判別できず、既存 clone を引き継いだケースでも誤判定する。「今 /work に有るか」の方が真実に近い。問い合わせは instance あたり ls -A1 /work の 1 回。
  • workspace の folder JSON はホスト側で直列化する。 新しい wire format DEVBASE_WORKSPACE_FOLDERS<dir><US><folder の JSON> の行)を渡し、entrypoint は存在する dir の JSON を連結するだけにした。dir に引用符やバックスラッシュが入ってもシェルでエスケープを考えずに済み、jq / python3 への依存も増やさない(PLAN32 の方針を踏襲)。
  • DEVBASE_WORKSPACE_B64 は残す。 新 wire format を知らない古いイメージでは、これまでどおり全フォルダ入りの workspace が書かれる。ホストだけ更新した状態で workspace が黙って消えるのを避けるため。
  • 正常時の出力は変えない。 リポジトリが揃っていれば新しい警告は出ない。
  • clone 失敗で up を失敗させない点は従来どおり(終了コード 0)。

プラン: issues/PLAN37_clone-failure-visibility.md

Test plan

イメージを再ビルドし、nyle-dx に権限のないリポジトリ volareinc/no-such-repo-xyz123 を一時的に足して devbase up を実行して確認済み。

  • AC1: up の出力に欠落リポジトリが clone URL 付きで出る
All containers ready
Warning: Repositories missing in /work of dev-1 (clone may have failed):
Warning: - no-such-repo-xyz123 (https://github.com/volareinc/no-such-repo-xyz123.git)
Warning: Details: devbase project logs nyle-dx | grep Warning
=== Deploy completed successfully ===
  • AC2: その状態でも exit=0/work/nyle-dx/work/ideabase は通常どおり使える
  • AC3: 一時エントリを外して再実行 → Repositories missing は 0 件、exit=0
  • AC4: 実機の /work/nyle-dx.code-workspace は clone できた 2 件のみ
  • AC5: docker logsWarning: Skipping workspace folder (not cloned): no-such-repo-xyz123
  • AC6: 再ビルド前のイメージに焼かれていた実物の /entrypoint.sh に新旧両方の環境変数を渡し、fallback で 3 フォルダすべてが書き出されることを確認
  • AC7: pytest 1445 passed

追加したテスト: tests/commands/test_up_missing_repos.py(5 件)、tests/containers/test_entrypoint_repos.py(+7 件)、tests/project/test_runtime.py(+3 件)

注意

entrypoint の変更を含むため、workspace 側の挙動を反映するにはイメージの再ビルドが要るdevbase build <project>devbase-base から焼き直す必要があるため base の再ビルドも含める)。再ビルドしていないイメージでは fallback 経路で従来どおり動くため、機能が黙って失われることはない。欠落リポジトリの報告はホスト側なので再ビルド不要で効く。

やらないこと

  • clone 失敗で up を失敗させること(1 本落ちただけで開発環境ごと止めない方針は維持)
  • 権限エラーと typo の区別。GitHub は権限のない private リポジトリにも Repository not found (404) を返すため、クライアント側では判別できない

takemi-ohamaand others added 2 commits August 24, 2026 06:54
複数リポジトリ構成で一部のリポジトリに権限が無い場合、clone の失敗は entrypoint が
warning に留めてコンテナ起動を続ける。この方針自体は維持したうえで、失敗の見せ方を直す。
- `devbase up` が ready 待ちの後に `/work` の実体を確認し、`project.yml` に書いたのに
無いリポジトリを clone URL 付きで警告する。揃っているときは何も出さない。
ログを grep せず実体を見るのは、ログが再起動をまたいで積み上がり「いつの失敗か」を
判別できないため。
- multi-root ワークスペースに clone できたリポジトリだけを載せる。ホストは folder ごとに
直列化した `DEVBASE_WORKSPACE_FOLDERS` を渡し、entrypoint は存在する dir の JSON だけを
連結する。シェルで JSON をエスケープしないので dir に引用符が入っても壊れない。
- `DEVBASE_WORKSPACE_B64` は残し、新 wire format を知らない古いイメージでは従来どおり
全フォルダ入りの workspace が書かれるようにする (silent に機能を失わせない)。
entrypoint の変更を反映するにはイメージの再ビルドが要る。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wqvdj79BJRWxhUMR9D9kts
イメージを再ビルドしたうえで、権限のないリポジトリを一時的に足した nyle-dx で
devbase up を実行し、AC1〜AC5 を実機で確認した結果に差し替える。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wqvdj79BJRWxhUMR9D9kts
@takemi-ohama
takemi-ohama merged commit 67326ad into mainAug 23, 2026
5 checks passed
@takemi-ohama
takemi-ohama deleted the feat/plan37-clone-failure-visibility branch August 23, 2026 23:35
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@takemi-ohama