Перейти к содержимому

Провайдеры окружения

Провайдер окружения позволяет плагину управлять местом, где находится рабочий каталог треда, а ядро управляет тем, как тред через него проходит.

// docs/lifecycle-diagrams.md — the transitions (source packages/domain/src/environment-lifecycle.ts)
start ──▶ creating
creating ──provision.requested──▶ provisioning
creating ──provision.failed | provision.cancelled──▶ error
creating ──destroy.recorded──▶ destroyed
provisioning ──provision.succeeded | provision.cancelled (workspace on disk)──▶ ready
provisioning ──provision.failed──▶ error
provisioning ──provision.cancelled (no workspace)──▶ destroyed
ready | error ──provision.requested──▶ provisioning
ready | error ──destroy.recorded──▶ destroyed
// A MISSING edge = the event is a no-op in that status (the writer returns illegal-transition)

Результаты создания. В environments появляются пять полей: ownerThreadId, attempt, claimPath, statusMessage и pendingLog. Здесь нет параллельной фазы подготовки, флага привязки, счётчика временных сбоев и автоматической цепочки повторов — любые ошибки при создании фатальны.

claimPath. experimental_claimPath возвращает false, если путь на этом хосте занят другим непривязанным запуском, если попытка больше не в состоянии creating или если она уже заняла другой путь. Повторный идентичный запрос завершается успешно. «Check for already-attached threads after the claim and before mutating a shared checkout.»

availability. Проверяется в фоне для пикеров и повторно при создании треда, с учётом таймаута на принятие решения, только для выбранного провайдера и машины. Не проверено: документация расходится в том, можно ли использовать закешированный ответ при создании.

Особенности worktree. Worktree хранятся в <BB_DATA_DIR>/plugins/environment-git-worktree/host-data/worktrees/<thread-id>/<repo-name>. Правила в .worktreeinclude (в синтаксисе gitignore) копируют неотслеживаемые локальные файлы после создания и до .bb-env-setup.sh. При этом bb именно копирует файлы, а не создаёт симлинки; никогда не перезаписывает то, что уже есть в worktree, и пропускает симлинки в источнике. Архивирование последнего треда запускает пятиминутную отсрочку, а не удаление.