fix: devbase list 経路の env 変数展開 + env init で VS Code 自動オープン設定#71
Conversation
_load_project_env が $VAR / ${VAR} を展開しない仕様だったため、
全プロジェクト env が依存する WORK_DIR=/work/$GIT_REPO が devbase list
経由ではリテラルのまま VS Code に渡り、ワークスペースが $GIT_REPO という
パスで開いてしまっていた。shell `source ./env` 相当に os.path.expandvars で
変数展開する (単一引用符値はリテラル、$(...) コマンド置換は非対応のまま)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
up/list 後の VS Code 自動オープン (DEVBASE_OPEN_EDITOR) を env init の 対話フローで設定できる collector を追加。既定は有効 (1) で [Y/n] 選択式、 空入力/非対話(EOF)でも 1。0/n/no/false/off で無効化可能。プロジェクト個別の env で上書きできる。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | APPROVE
PR横断での設計レベルの指摘事項はありません。テストコードにおける os.environ モック化の改善提案1点のみです。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | APPROVE
PR横断での設計レベルの指摘事項はありません。テストコードにおける os.environ モック化の改善提案1点のみです。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
既定OFFの既存仕様を維持するため、env init が未入力/EOFで自動オープンを有効化しないよう修正してください。
container._load_project_env が os.environ に追加する変数が後続テストへ 漏出しないよう、monkeypatch で os.environ をテストスコープに隔離する (cross-review gemini minor 指摘)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
変数展開を shell source ./env 相当にするなら、既存の \$ エスケープを維持したうえで $VAR / ${VAR} だけを展開する実装にしてください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | REQUEST_CHANGES
PR の修正意図(環境変数のテスト間リーク防止)は理解できますが、os.environ を標準の dict で上書きする手法は副作用が大きいため修正を提案します。
os.environ は単なる辞書ではなく、C レベルの環境変数と同期するための専用オブジェクト (os._Environ) です。これを dict で上書きすると putenv が呼ばれなくなり、将来的にテスト内で subprocess などを呼び出した際に環境変数が引き継がれないバグの原因となります。
全体をサンドボックス化したい場合は、オブジェクトをすり替えるのではなく with unittest.mock.patch.dict(os.environ): などを利用してインプレースで退避・復元するようにしてください。
os.path.expandvars は \$ を誤展開し shell source のリテラル $ や EnvFile が書く
\$ 付き値を壊すため、$VAR/${VAR} のみ展開し \$ をリテラル $ にデエスケープ、
未定義は空、$(...) は素通しする _expand_env_vars に置換 (cross-review codex major)。
あわせてテストの os.environ 隔離を dict 置換から in-place 退避 (autouse fixture) に
変更し os._Environ の putenv 同期を保つ (cross-review gemini major)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
修正必須の指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | gemini | APPROVE
docstring 内の shell source の挙動説明について、1点事実誤認があるため指摘します。
非クォートの FOO=bar # x は shell ではコメント有効で値は bar になる。 誤って「無効」と記していた note を事実に沿って修正 (cross-review gemini minor)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
概要
Remote-SSH 環境で
devbase listからコンテナを開く際の不具合修正と、VS Code 自動オープン設定の改善。devbase list(TUI) 経由でコンテナを開くとワークスペースが/work/$GIT_REPOという未展開パスで開いてしまう問題を修正。devbase env initで VS Code 自動オープン (DEVBASE_OPEN_EDITOR) を対話設定できるようにした (既定: 有効)。関連 Issue
変更点
fix:_load_project_env(TUI/直接起動フォールバック経路) が$VAR/${VAR}を展開しないため、全プロジェクト env が依存するWORK_DIR=/work/$GIT_REPOがリテラルのまま VS Code に渡っていた。os.path.expandvarsで shellsource ./env相当に展開する (単一引用符値はリテラル、$(...)コマンド置換は従来どおり非対応)。feat: env collectorcollectors/editor.pyを追加し、devbase env initの対話フローでDEVBASE_OPEN_EDITORを設定 (既定 1・[Y/n]選択式・非対話/EOF でも 1・0/n/no/false/offで無効化)。プロジェクト個別 env で上書き可能。keys.py:DEVBASE_OPEN_EDITORのコメントを env init 対象である旨に更新。test: 変数展開の回帰テスト + editor collector テスト (計 17 件) を追加。動作確認
pytest tests/→ 823 passed)devbase list経路を再現しresolve_workdirが/work/<repo>に展開されることを確認[Y/n]既定 1・無効化選択・EOF 既定を満たすことをテストで確認docs/) を更新補足
DEVBASE_OPEN_EDITOR=1を明示追加済み (別途 main へ反映)。本 PR は devbase 本体の修正のみ。