Skip to content

fix(shell): allow default local API URL bootstrap#354

Closed
skulidropek wants to merge 8 commits into
mainfrom
codex/default-local-api-url-bootstrap-pr351
Closed

fix(shell): allow default local API URL bootstrap#354
skulidropek wants to merge 8 commits into
mainfrom
codex/default-local-api-url-bootstrap-pr351

Conversation

@skulidropek
Copy link
Copy Markdown
Member

Summary

  • Treat default-local DOCKER_GIT_API_URL values as bootstrap hints instead of strict remote controller overrides.
  • Preserve strict failure behavior for custom explicit API URLs.
  • Cover the Windows-like browser startup path in unit tests and browser e2e.

Context

Follow-up for PR #351: fixes the case where a persisted Windows env var like DOCKER_GIT_API_URL=http://127.0.0.1:3334 prevents local Docker bootstrap.

Verification

  • bun run --cwd packages/app typecheck
  • bun run --cwd packages/app lint
  • bun run --cwd packages/app lint:tests
  • bun run --cwd packages/app lint:effect
  • bun run --cwd packages/app vitest run tests/docker-git/controller.test.ts tests/docker-git/controller-ready.test.ts tests/docker-git/browser-frontend.test.ts
  • DOCKER_GIT_E2E_REUSE_WORKSPACE_INSTALL=1 DOCKER_GIT_E2E_BROWSER_STARTUP_ATTEMPTS=360 bash scripts/e2e/browser-command.sh

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 696481d0-d5ac-405a-baae-e5453401ff4a

📥 Commits

Reviewing files that changed from the base of the PR and between 6850ded and eb80bbf.

📒 Files selected for processing (31)
  • ctl
  • docker-compose.api.isolated.yml
  • docker-compose.api.yml
  • docker-compose.isolated.yml
  • docker-compose.yml
  • packages/api/Dockerfile
  • packages/api/README.md
  • packages/api/scripts/start-controller.sh
  • packages/app/scripts/print-controller-revision.ts
  • packages/app/src/docker-git/browser-frontend.ts
  • packages/app/src/docker-git/controller-compose-runtime.ts
  • packages/app/src/docker-git/controller-compose.ts
  • packages/app/src/docker-git/controller-docker.ts
  • packages/app/src/docker-git/controller-health.ts
  • packages/app/src/docker-git/controller-hostname.ts
  • packages/app/src/docker-git/controller-image-revision.ts
  • packages/app/src/docker-git/controller-reachability.ts
  • packages/app/src/docker-git/controller-revision.ts
  • packages/app/src/docker-git/controller-runtime-shell.ts
  • packages/app/src/docker-git/controller-runtime.ts
  • packages/app/src/docker-git/controller.ts
  • packages/app/src/docker-git/host-errors.ts
  • packages/app/tests/docker-git/browser-frontend.test.ts
  • packages/app/tests/docker-git/controller-compose.test.ts
  • packages/app/tests/docker-git/controller-image-revision.test.ts
  • packages/app/tests/docker-git/controller-ready.test.ts
  • packages/app/tests/docker-git/controller-resource-limits.test.ts
  • packages/app/tests/docker-git/controller.test.ts
  • packages/app/tests/docker-git/fixtures/command-executor.ts
  • scripts/e2e/_lib.sh
  • scripts/e2e/browser-command.sh

📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • New Features

    • Добавлена поддержка изолированного режима Docker runtime с отдельными файлами конфигурации
    • Улучшена логика выбора API URL с автоматической поддержкой локальных адресов
  • Documentation

    • Обновлена документация с описанием новых режимов Docker runtime и переменных окружения
    • Добавлены диагностические рекомендации для устранения проблем подключения к API

Walkthrough

PR добавляет поддержку альтернативного Docker runtime режима (isolated) с compose-оверлеем, рефакторит логику reachability контроллера для различения default-local URL, интегрирует инициализацию Skiller submodule в подготовку ревизии, и переписывает bootstrap-последовательность контроллера для условного использования локального или удалённого endpoint.

Changes

Docker runtime mode infrastructure и Docker Compose configuration

Layer / File(s) Summary
Runtime mode constants and parsing
packages/app/src/docker-git/controller-runtime.ts
Новый модуль с типом ControllerDockerRuntime, константами переменных окружения и функциями parseControllerDockerRuntime и resolveProjectDockerHostForRuntime для выбора Docker-эндпоинта проектных контейнеров.
Compose runtime overlay detection
packages/app/src/docker-git/controller-compose-runtime.ts
Новый модуль для загрузки режима runtime из переменной окружения и резолвинга пути к изолированному оверлей-файлу (например, docker-compose.isolated.yml).
Runtime environment preparation
packages/app/src/docker-git/controller-runtime-shell.ts
Новый модуль prepareControllerRuntimeEnv для валидации runtime-режима и установки DOCKER_GIT_PROJECT_DOCKER_HOST перед запуском docker compose.
Shell script and Dockerfile defaults
ctl, packages/api/scripts/start-controller.sh, packages/api/Dockerfile
Обновлены для поддержки динамического выбора compose-файлов при DOCKER_GIT_DOCKER_RUNTIME=isolated, экспорта DOCKER_GIT_PROJECT_DOCKER_HOST, и изменения дефолтного runtime на host.
Docker Compose isolated mode overlays
docker-compose.isolated.yml, docker-compose.api.isolated.yml
Новые файлы для изолированного режима с включённым privileged-флагом, переменной DOCKER_GIT_PROJECT_DOCKER_HOST и монтированием томов для Docker data.
Docker Compose host mode configuration
docker-compose.yml, docker-compose.api.yml
Обновлены: дефолт runtime изменён на host, добавлено монтирование /var/run/docker.sock, привилегия переведена на параметризуемую переменную окружения.
API documentation update
packages/api/README.md
Переработана документация для host-Docker-backed режима, добавлены примеры isolated fallback и таблица переменных окружения с новыми параметрами контроллера.

Controller reachability и API URL resolution

Layer / File(s) Summary
Default-local API URL detection
packages/app/src/docker-git/controller-reachability.ts
Добавлены функции normalizeApiBaseUrl, isDefaultLocalApiBaseUrl и resolveDefaultLocalApiBaseUrl для различения localhost/127.0.0.1 на стандартном порту от явных override-значений.
Remote Docker explicit URL requirement
packages/app/src/docker-git/controller-reachability.ts
Добавлена функция shouldRequireExplicitApiUrlForRemoteDocker для определения необходимости явного DOCKER_GIT_API_URL при удалённом Docker с недоступными локальными сетями.
API URL candidates with default-local
packages/app/src/docker-git/controller-reachability.ts
Расширена структура ApiBaseUrlCandidatesInput и функция buildApiBaseUrlCandidates для включения default-local URL в набор кандидатов для пробинга.
Health probe integration
packages/app/src/docker-git/controller-health.ts
Обновлена сигнатура findReachableDirectHealthProbe для передачи defaultLocalApiBaseUrl в кандидаты URL при поиске доступного /health контроллера.
Browser frontend API URL selection
packages/app/src/docker-git/browser-frontend.ts
Обновлена логика: формирование уникального набора кандидатов из default-local и configured URL, ранний возврат при наличии выбранного URL в кандидатах, пробинг по полному набору.

Controller composition, revision и bootstrap

Layer / File(s) Summary
Compose files with runtime overlay
packages/app/src/docker-git/controller-compose.ts
Обновлена ControllerComposeFiles для включения runtimeOverlayPath, функции для передачи оверлей-файла в docker compose arguments.
Skiller submodule initialization
packages/app/src/docker-git/controller-compose.ts
Добавлена функция ensureSkillerSubmoduleInitialized для выполнения инициализации с проверкой наличия package.json до/после.
Resolve compose files with runtime
packages/app/src/docker-git/controller-compose.ts
Обновлена resolveControllerComposeFiles для загрузки runtime-режима и резолвинга оверлей-пути.
Revision including docker runtime
packages/app/src/docker-git/controller-compose.ts, packages/app/src/docker-git/controller-revision.ts
Обновлены controllerRevisionForMode, computeControllerRevision и controllerRevisionInputs для включения dockerRuntime и новых файлов (docker-compose.isolated.yml, .gitmodules) в ревизию.
Prepare revision with Skiller
packages/app/src/docker-git/controller-compose.ts
Обновлена prepareControllerRevision для условной инициализации Skiller submodule при buildSkillerMode === "1".
Print revision with modes
packages/app/scripts/print-controller-revision.ts
Обновлен скрипт для чтения runtime-режима из переменной окружения и передачи в controllerRevisionForMode.

Container hostname и Docker operations

Layer / File(s) Summary
Container hostname resolution
packages/app/src/docker-git/controller-hostname.ts
Новый модуль с функциями resolveCurrentContainerName и readCurrentContainerName для выбора имени контейнера с приоритетом HOSTNAME env var.
Docker operations with resolved hostname
packages/app/src/docker-git/controller-docker.ts
Обновлена resolveCurrentContainerNetworks для использования readCurrentContainerName() вместо прямого чтения переменной окружения.
Compose args refactor
packages/app/src/docker-git/controller-image-revision.ts
Обновлена inspectControllerImageRevision для использования composeFilesToArgs(composeFiles) вместо composeFilesForMode.

Controller bootstrap logic

Layer / File(s) Summary
Controller bootstrap refactor
packages/app/src/docker-git/controller.ts
Основная переписка bootstrap-логики: добавлена prepareControllerRuntimeEnv() перед сбором контекста, обновлена failIfRemoteDockerWithoutApiUrl для использования shouldRequireExplicitApiUrlForRemoteDocker, переписаны ensureControllerReady и restartController с условным пробингом default-local URL.
Bootstrap error factory
packages/app/src/docker-git/host-errors.ts
Добавлена функция controllerBootstrapError для создания объектов ошибки.

Testing infrastructure и tests

Layer / File(s) Summary
Test command executor fixture
packages/app/tests/docker-git/fixtures/command-executor.ts
Новый модуль с типами результата команды и factory-функцией commandExecutorLayer для детерминированного тестирования shell-команд.
Controller compose preparation tests
packages/app/tests/docker-git/controller-compose.test.ts
Новый файл с комплексными тестами для Skiller инициализации, добавления изолированного overlay, валидации расширений и подготовки ревизии.
Controller readiness bootstrap tests
packages/app/tests/docker-git/controller-ready.test.ts
Новый файл с тестами для трёх bootstrap-сценариев: пробинг explicit API URL, fallback на default-local, отклонение недостижимых кастомных URL.
Image revision test fixture
packages/app/tests/docker-git/controller-image-revision.test.ts
Обновлен для использования commandExecutorLayer из fixtures.
Resource limits isolated tests
packages/app/tests/docker-git/controller-resource-limits.test.ts
Добавлены тесты для isolated compose-файлов: отсутствие Docker socket bind, дефолты переменных, privileged-режим.
Browser frontend API URL tests
packages/app/tests/docker-git/browser-frontend.test.ts
Добавлены мок resolveDefaultLocalApiBaseUrlMock, хелпер useReachableHostApiProbe и тест для default-local как reachable candidate.
Controller property-based tests
packages/app/tests/docker-git/controller.test.ts
Добавлены fast-check arbitraries для runtime-режимов и property-based тесты для isDefaultLocalApiBaseUrl, shouldRequireExplicitApiUrlForRemoteDocker, hostname resolution и ревизии.

E2E testing

Layer / File(s) Summary
SSH retry logic
scripts/e2e/_lib.sh
Обновлена функция dg_project_ssh_to_container для повторной попытки SSH с переписанными аргументами при exit-code 255.
Dynamic API URL resolution
scripts/e2e/browser-command.sh
Добавлены функции read_logged_api_base_url и wait_for_controller_health для динамического разрешения RESOLVED_API_BASE_URL из логов контроллера.

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • ProverCoderAI/docker-git#351: Реализует ту же host-Docker-backed поведение (дефолт host, монтирование /var/run/docker.sock) и одинаковые изменения ревизии контроллера (инициализация Skiller submodule и включение .gitmodules в ревизию).
  • ProverCoderAI/docker-git#344: Затрагивает ту же логику в controller-image-revision.ts (построение compose-аргументов) и browser-frontend.ts (выбор reachable API base URL), создавая прямые пересечения в коде.
  • ProverCoderAI/docker-git#308: Изменение docker-compose.yml для управления memswap_limit через DOCKER_GIT_CONTROLLER_MEMORY_SWAP совпадает с реализацией swapLimit/memorySwap infrastructure в PR #308.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/default-local-api-url-bootstrap-pr351
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch codex/default-local-api-url-bootstrap-pr351

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@skulidropek
Copy link
Copy Markdown
Member Author

Closing this upstream PR because it duplicates PR #351 and is conflicting against main. The actionable one-commit PR for the fork branch is rikohomeless#2.

Sign up for free to 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.

2 participants