BrowserHive の更新
capture-ledger は main ではなく 特定の BrowserHive の版に固定されています。
現在のピンは 19.0.1 です。
これは .upstream/browserhive submodule から来ています。ビルド時に
git describe --tags で読んでいるので、このページが古くなることはありません。
submodule が唯一のピンで、BrowserHive 本体・BrowserHive が検証済みの
chromium-server-docker・スタックがマウントする SeaweedFS 設定・manifest を照らす
OpenAPI 文書(generated/openapi.json)が、すべてこの中に入っています。
# 1. submodule を新しいタグへ動かす。git -C .upstream/browserhive fetch --tagsgit -C .upstream/browserhive checkout <new-tag>git -C .upstream/browserhive submodule update --init --recursivegit add .upstream/browserhive
# 2. 契約を取り直して型を再生成する(ローカルコピー。ネットワーク不要)。pnpm run openapi:generatepnpm run openapi:check # コミット後に exit 0 になること
# 3. まっさらな状態から作り直す。古いボリュームには前のバケットと DB が残っており、# 更新で入り込んだ順序の不具合を隠してしまう。pnpm run stack:downpnpm run stack:up
# 4. 端から端まで確認する。pnpm run check./scripts/prod-smoke.shChromium は自動的に追随します。submodule の submodule なので、
BrowserHive 自身が検証した版がそのまま手に入ります。以前 capture-ledger は
これを独立に main で追跡しており、それがスタック崩壊の原因になりました —
上流が開発用 Dockerfile を attic/ へ移した瞬間、すべてのビルドが止まりました。
capture-ledger 側で何が変わるか
Section titled “capture-ledger 側で何が変わるか”API の追加だけの変更 (オプショナルなリクエストフィールドが増える等) なら、手順 2
以外は何も要りません。再生成した型はそのままコンパイルが通り、テストも無修正で
通ります。1.6.0 はまさにこれでした。upstream は変更のたびに前のリリースとの
smithy diff を回しているので、項目が増えただけの更新で既存の項目の名前や型が
写しの下から変わることはありません。
厄介なのはインフラの変更です。OpenAPI の差分にはまったく現れません。 1.5.2 → 1.6.0 の移行で実際にあった 2 例:
- BrowserHive の SeaweedFS entrypoint がバケットを自分で作るようになり、capture-ledger
側の一発 init コンテナが不要になった (同時に
depends_onによる順序保証も 意味を失い、WAIT_FOR_S3が置き換えた)。 - 上流の Chromium イメージが開発用 Dockerfile を
attic/へ退避させた。
ピンを上げたら、etc/seaweedfs/*・entrypoint・compose の契約に触れる変更が
無いか、上流のリリースノートを読んでください。