Skip to content

feat: pre-up / deploy フックへ clone 先とリポジトリ URL を渡す - #110

Merged
takemi-ohama merged 11 commits into
release/PLAN32from
feature/PLAN32-hook-env
Aug 22, 2026
Merged

feat: pre-up / deploy フックへ clone 先とリポジトリ URL を渡す#110
takemi-ohama merged 11 commits into
release/PLAN32from
feature/PLAN32-hook-env

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

Summary

ライフサイクルフック(pre-up / deploy)へ、プロジェクトの clone 先とリポジトリ URL を環境変数として渡します。

変数内容
DEVBASE_PRIMARY_DIRprimary リポジトリの /work 配下ディレクトリ名
DEVBASE_PRIMARY_URLprimary リポジトリの clone URL
DEVBASE_WORK_DIRコンテナ内の既定の作業ディレクトリ
DEVBASE_REPO_DIRS全リポジトリのディレクトリ名(空白区切り・宣言順)

背景

PLAN32 で GIT_REPO / WORK_DIRenv から project.yml へ移った結果、それらを source ./env で読んでいたフックが値を取れなくなります。結合検証で、実際に配布中のプラグインの pre-up / deploy が壊れることを確認しました(docker compose cp ... dev:${WORK_DIR}/.../... になる、git clone https://${GIT_HOST}/${GIT_USER}/${GIT_REPO}.git が組み立てられない)。

フックはホスト側で動くため、env を経由せず devbase が明示的に渡す形にします。複数リポジトリ構成でもフックが clone 先を一意に知れます。

設計上の判断

  • 渡した値は子プロセス限定にし、親プロセスの os.environ は汚しません(プロジェクト切り替え時の残留を避けるため)

  • config を渡さない呼び出し(後方互換のための既定引数)ではフック自体は従来どおり動きます

  • devbase scale の deploy 実行にも同じ値を渡します

  • plan: issues/PLAN32_multi-repo-project.md

  • release PR: release: PLAN32 1 プロジェクト = 複数リポジトリ構成への変更 (v3.0.0) #103

Test plan

  • uv run pytest tests/project/test_runtime.pyhook_env の値(primary / work_dir / 全リポジトリ)
  • uv run pytest tests/commands/test_hook_env.py — 実際に bash でフックを起動し、pre-up / deploy が値を受け取ること、DEVBASE_INSTANCE_INDEX と併用できること、設定なしでも動くこと、親プロセスへ漏れないこと
  • uv run pytest — 全 1377 件 green

takemi-ohamaand others added 6 commits August 23, 2026 01:35
PLAN32 Task 5。複数リポジトリ構成と project.yml への移行に合わせて利用者向け
ドキュメントを更新した。
- docs/user/project-yml.md を新設: スキーマ、複数リポジトリの例、検証される
内容、env との使い分け、旧 env からの移行表、コンテナへの渡り方
- 環境変数ガイド / コンテナ操作ガイド / CLI リファレンス / プラグイン開発の
各所から旧キー (GIT_USER / GIT_REPO / WORK_DIR / CONTAINER_SCALE) の説明を
外し、project.yml とその参照へ置き換え
- CLI リファレンスに devbase project migrate-config を追記
- アーキテクチャ解説に project/ モジュールの節を追加
- CHANGELOG に破壊的変更と再ビルドの注意を追記
過去リリース分の CHANGELOG 記述は履歴なので書き換えていない。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- repo-backed-projects.md: 見出し変更で切れた `#スケール前提-container_scale1`
参照 2 箇所を `#スケール前提-scale-1` に修正
- quickstart.md: `env` はファイル自体が必須(中身は任意)と見出しから分かるよう変更し、
最小構成のディレクトリツリーへ `project.yml` を追加
- project-yml.md: `env` ファイルが必須である旨を同じ表現に揃える
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`devbase env init` の editor コレクター (lib/devbase/env/collectors/editor.py)
が `DEVBASE_OPEN_EDITOR` を対話収集し、対話の既定は `1` (有効) である。
「収集対象外」「既定: OFF」という記述は実装と矛盾していたため、収集対象で
あることと、OFF に倒れるのはキー自体が未設定のときだけである旨へ修正した。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- project.yml リファレンス: `init` は clone 直後だけでなくコンテナ起動の
たびに `./init.sh` を実行することを明記し、`branch` (clone 直後のみ) との
タイミング差の表と冪等性の注意を追加
- 環境変数: `DEVBASE_WORKSPACE` が効くのはリポジトリ 1 件の構成だけで、
2 件以上では自動生成した workspace を直接開くため上書きできない旨を明記
- container-operations / plugin-dev quickstart の関連記述も同じ挙動へ揃える
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PLAN32 で GIT_REPO / WORK_DIR が env から project.yml へ移った結果、それらを
`source ./env` で読んでいたライフサイクルフックが値を取れなくなる。実際に
plugin リポジトリの pre-up / deploy が壊れることを結合検証で確認した。
フックはホスト側で動くため、devbase 側から明示的に環境変数として渡す:
- DEVBASE_PRIMARY_DIR: primary repo の /work 配下ディレクトリ名
- DEVBASE_PRIMARY_URL: primary repo の clone URL
- DEVBASE_WORK_DIR: コンテナ内の既定の作業ディレクトリ
- DEVBASE_REPO_DIRS: 全 repo のディレクトリ名 (空白区切り、宣言順)
env を経由せず devbase が渡すことで、複数リポジトリ構成でもフックが clone 先を
一意に知れる。渡した値は子プロセス限定で、親の os.environ は汚さない。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | REQUEST_CHANGES

公開フック契約と公式ガイドの整合を修正してください。

Comment threadlib/devbase/project/runtime.py

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | APPROVE

特に指摘事項はありません。

takemi-ohamaand others added 3 commits August 23, 2026 02:15
env の役割を「コンテナへ渡す環境変数」と書き換えたのに、直上の表だけ
「リポジトリ名・コンテナ数等」と旧仕様のままで矛盾していた。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pre-up / deploy へ渡す DEVBASE_PRIMARY_DIR / DEVBASE_PRIMARY_URL /
DEVBASE_WORK_DIR / DEVBASE_REPO_DIRS は公開契約だが、ガイドは移行前の
GIT_REPO / WORK_DIR を案内したままだった。フック作者がこの契約を使って
移行できないため、次を追記する。
- quickstart: 「フックへ渡る環境変数」表 (pre-up / deploy の別と
DEVBASE_INSTANCE_INDEX が pre-up に渡らないことを含む) と、
DEVBASE_PRIMARY_URL を使う pre-up サンプル
- repo-backed-projects: clone 先 / URL の受け取り方と pre-up 骨子、
関連環境変数節への追記、チェックリスト項目
- project.yml リファレンス: project.yml の各キーとの対応表
- CHANGELOG: Unreleased / Added へ本機能を記載
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 1)

対応件数: critical=0 / major=0 / minor=1 (合計 1 件)
deferred: 0 件 / rejected: 0 件
commit: f79d945
CI: NONE(このブランチに設定された check はありません)
検証: uv run pytest1377 passed

詳細

#指摘対応
1lib/devbase/project/runtime.py:69 — 新しいフック向け環境変数を公式のフック作成ガイドへ反映してほしい(quickstart.md / repo-backed-projects.md が移行前の GIT_REPO / WORK_DIR を案内したまま)✅ 修正

codex の指摘は妥当と判断しました。公開契約(フックへ渡る環境変数)を増やしたのにガイドが旧 env 前提のままでは、プラグイン作者がこの契約を使ってフックを移行できません。この PR でドキュメントを追記しています。

変更内容

  • docs/plugin-dev/quickstart.md — §2.5 ライフサイクルフックに「フックへ渡る環境変数」表を追加。4 変数 + DEVBASE_INSTANCE_INDEXpre-up / deploy 別の列で示し、DEVBASE_INSTANCE_INDEXpre-up に渡らないことを明示。pre-up サンプルを URL 直書きから git clone "$DEVBASE_PRIMARY_URL" へ更新し、DEVBASE_REPO_DIRS のループ例と「子プロセス限定で親環境へ伝播しない」注記も追加
  • docs/plugin-dev/repo-backed-projects.md — 「clone 先と URL の受け取り方」節を新設(pre-up 骨子サンプル付き)。pre-up の 4 責務の表を $DEVBASE_PRIMARY_DIR / $DEVBASE_PRIMARY_URL 基準へ更新。§6「関連する環境変数」に devbase が渡す 4 変数の表を追加。チェックリストに受け取り方の項目を追加
  • docs/user/project-yml.md — 「ライフサイクルフックへの渡り方」節を追加。各環境変数と project.yml キーの対応表 + GIT_REPODEVBASE_PRIMARY_DIR / WORK_DIRDEVBASE_WORK_DIR の読み替え
  • CHANGELOG.md — Unreleased / Added へ本機能を追記

⚠️ ベースブランチとの関係

同じ quickstart.md を編集している 未 merge のドキュメント PR #108 (feature/PLAN32-docs) を本ブランチへ取り込んでから追記しています(マージコミット ce4874f)。コンフリクト回避が目的で、#108 が先に merge されれば差分は重複しません。

記述と実装の突き合わせ

ドキュメントの記述実装上の根拠
DEVBASE_PRIMARY_DIR = repos[].dir(未指定ならリポジトリ名)config.py:300merged.get("dir", repo)
primary = repos 先頭 または primary: true の 1 件config.py:383replace(first, primary=True)
DEVBASE_PRIMARY_URL = https://<host>/<owner>/<repo>.gitRepoSpec.url
DEVBASE_WORK_DIR = work_dir(未指定なら /work/<primary.dir>resolved_work_dir()
DEVBASE_REPO_DIRS = 宣言順・空白区切りhook_env()" ".join(...)
DEVBASE_INSTANCE_INDEXdeploy のみ_run_deploy_script_for_instances のみが設定

@takemi-ohama 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | REQUEST_CHANGES

テスト環境に依存する失敗を避けるため、親プロセス環境の非変更テストで事前状態を固定または保存してください。

Comment threadtests/commands/test_hook_env.py

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | gemini | APPROVE

指摘事項はありません。

親プロセスへ漏れないことを確かめるテストは、実行環境に同名の変数が居ると
偽陰性/偽陽性になる。事前に unset して初期状態を固定した。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | codex | APPROVE

修正が必要な問題はありません。全 1377 テストの成功を確認しました。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | gemini | APPROVE

変更内容を確認しました。指摘事項はありません。

@takemi-ohama
takemi-ohama marked this pull request as ready for review August 22, 2026 17:31
# Conflicts:
#	CHANGELOG.md
#	docs/plugin-dev/quickstart.md
#	docs/plugin-dev/repo-backed-projects.md
#	docs/user/project-yml.md
@takemi-ohama
takemi-ohama merged commit 317c4c9 into release/PLAN32Aug 22, 2026
@takemi-ohama
takemi-ohama deleted the feature/PLAN32-hook-env branch August 22, 2026 17: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