Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/developer/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ Python 側のエントリーポイント。以下の責務を持つ。
| `dispatch.py` | 収集した属性を Namespace に詰めて `cmd_*` ハンドラを呼ぶ薄い委譲層 |
| `actions_project.py` | プロジェクト行の処理(up / 起動中は操作サブメニュー) |
| `actions_env.py` / `actions_plugin.py` / `actions_snapshot.py` / `actions_status.py` | 各カテゴリの操作フロー |
| `actions_env_keys.py` / `actions_env_openbao.py` | env カテゴリの画面(キーの一覧と編集・OpenBao の接続設定) |
| `env_delegate.py` | env の画面が `cmd_env` へ委譲する部品(委譲と、プロジェクトの置き場へ書くときの chdir + `PWD` の差し替え)。env メニューと各画面がここを使い、画面からメニューのモジュールを読まない |

### env/ -- 環境変数管理システム

Expand Down
4 changes: 2 additions & 2 deletions docs/specifications/secret-backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -813,7 +813,7 @@ TUI の「OpenBao の接続設定」は同じプロセスの中から `use openb
| 見出し | 今の `url` と、ブートストラップ機密が `設定済み` / `未設定` か。`role_id` / `secret_id` の値は出さない |
| 欄 | 接続先(`url`、1 行)、`role_id` と `secret_id`(伏せ字)。空の欄は変えない(`use` の引き継ぎ)。`role_id` を変えるときは `secret_id` も要る。`mount` / `user` / `layout` / `group_aliases` / キャッシュの設定は変えない |
| 保存の後 | `test` と同じ確認を自動で行う。失敗しても保存した設定は残し、欄を入れ直せる。`use` が失敗したら `test` を呼ばずに欄へ戻る |
| 確認のグループ | グループ別の置き場(`version: 2`・`layout: group`)で、TUI の現在地(`PWD`)がプロジェクトの外のときだけ、保存の後・確認の直前に対象のグループを選ばせ、`test` へ属性 `group`(CLI の `--group` と同じ)で渡す。選択は sync / init と同じ部品(`actions_env._group_attrs`。候補は宣言済みのグループと「名前を入力」)。プロジェクトの中では選ばせず、`test` がグループの宣言から決める。`version: 1` では選ばせず `group` を渡さない |
| 確認のグループ | グループ別の置き場(`version: 2`・`layout: group`)で、TUI の現在地(`PWD`)がプロジェクトの外のときだけ、保存の後・確認の直前に対象のグループを選ばせ、`test` へ属性 `group`(CLI の `--group` と同じ)で渡す。選択は sync / init と同じ部品(`actions_env_keys.group_attrs`。候補は宣言済みのグループと「名前を入力」)。プロジェクトの中では選ばせず、`test` がグループの宣言から決める。`version: 1` では選ばせず `group` を渡さない |
| 使えないグループ名 | 「名前を入力」の名前は `validate_account_group` で検証し、続けて CLI の `--group` と同じ `storage_group` の検査(置き場の予約語 `global` / `projects`、`group_aliases` の読み替え先)を通す。どちらかで落ちれば「--group に使えない名前です: ...」を出してグループの選択へ戻る(`test` を呼ばない)。sync / init の選択も同じ部品を通る |
| グループの選択で戻る | Esc・← で「接続を確かめずに戻ります。保存した設定は残っています。」を出し、`test` を呼ばず、入れ直しの問いも出さずに env メニューへ戻る(`ARG_CANCEL`。一時停止しない)。Ctrl-C は TUI 全体を終える |
| 入れ直した後 | 入れ直しの問いで「はい」を選ぶと欄へ戻り、次に保存した後でもう一度グループを選ぶ |
Expand All @@ -839,7 +839,7 @@ graph TD
失敗した経路や変更の無い経路で使わない入力を求めないためである。入れ直すたびに選び直させるのは、確認の
失敗の原因が選んだグループの参照の 403(グループ単位のポリシー)である場合に、別のグループを選べるように
するためである。プロジェクトの中かどうかの判定(CLI の `_target_group` と同じ `_current_project_name`)は
接続設定の画面の側(`_check_group_attrs`)に置き、sync / init と共有する `_group_attrs` の振る舞いを変えない。
接続設定の画面の側(`_check_group_attrs`)に置き、sync / init と共有する `group_attrs` の振る舞いを変えない。
`test` の `--group` の規則(`_target_group`)は TUI のために変えない。対象のグループ・グループの宣言・
レイアウトの定義は [用語集](../glossary.md)、利用者向けの説明は
[機密の保存先を選ぶ](../user/env-backend.md#3-接続を確かめる) にある。
Expand Down
2 changes: 1 addition & 1 deletion docs/specifications/test-environment-isolation.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ sequenceDiagram
の `options` など)より前に立つ。function scope の段だけでは、これらの fixture が継承した値を読む
(偽の `DOCKER_HOST` へ `docker info` を打つなど)
- **テストごとの段でも同じ一覧を消す。** `lib/devbase` は `os.environ` へ直接書く箇所を持つ
(`commands/container.py` の `PWD`・`COMPOSE_PROJECT_NAME` など、`tui/actions_env.py` の `PWD`)。
(`commands/container.py` の `PWD`・`COMPOSE_PROJECT_NAME` など、`tui/env_delegate.py` の `PWD`)。
`monkeypatch` を通らない書き込みは、次のテストの開始で消える
- **テストの側の設定は後勝ちになる。** root の `conftest.py` の function scope の autouse は、テストが明示に
求める fixture とテストの本体より先に立つ。テストの側の `monkeypatch.setenv` / `delenv` は同じ
Expand Down
2 changes: 1 addition & 1 deletion lib/devbase/commands/container.py
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@ def _resolve_project_name(project_name: str) -> bool:
# :func:`devbase.env.runtime.current_project_name`) は wrapper の cd を前提に
# ``os.environ['PWD']`` を先に見るため、os.chdir だけだと切替前の PWD が残り、
# 切替先ではなく呼び出し元プロジェクトの機密を読んでしまう
# (TUI の ``_run_in_project`` が PWD を差し替えているのと同じ理由)。
# (TUI の ``env_delegate.run_in_project`` が PWD を差し替えているのと同じ理由)。
os.environ['PWD'] = str(target)
_unset_caller_only_env_keys(caller_env_keys, target)

Expand Down
Loading
Loading