コンテンツにスキップ

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 --tags
git -C .upstream/browserhive checkout <new-tag>
git -C .upstream/browserhive submodule update --init --recursive
git add .upstream/browserhive
# 2. 契約を取り直して型を再生成する(ローカルコピー。ネットワーク不要)。
pnpm run openapi:generate
pnpm run openapi:check # コミット後に exit 0 になること
# 3. まっさらな状態から作り直す。古いボリュームには前のバケットと DB が残っており、
# 更新で入り込んだ順序の不具合を隠してしまう。
pnpm run stack:down
pnpm run stack:up
# 4. 端から端まで確認する。
pnpm run check
./scripts/prod-smoke.sh

Chromium は自動的に追随します。submodule の submodule なので、 BrowserHive 自身が検証した版がそのまま手に入ります。以前 capture-ledger は これを独立に main で追跡しており、それがスタック崩壊の原因になりました — 上流が開発用 Dockerfile を attic/ へ移した瞬間、すべてのビルドが止まりました。

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 の契約に触れる変更が 無いか、上流のリリースノートを読んでください。