opencode-config/docs/decisions/031-pr-73-base-image-trixie-slim.md
Sergey 92d21a142c
fix(docker): use node:22-trixie-slim instead of non-existent node:22-noble-slim (#73)
* fix(docker): use node:22-trixie-slim instead of non-existent noble-slim

* docs(adr): update ADR-030 for trixie-slim base image

* docs(handoff): update handoff for trixie-slim and add watch out note

* docs(handoff): set PR number

* docs(handoff): add handoff for PR#73

* fix(ci): drop dangling ADR-031 ref in pr-73 handoff

* docs(adr): add ADR-031 for PR#73 trixie-slim base image

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 04:43:03 +03:00

38 lines
No EOL
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR-031 (PR #73): Fix Docker base image — node:22-noble-slim → node:22-trixie-slim
## Статус
Accepted (2026-07-26)
## Контекст
ADR-030 (PR #71) зафиксировал переход base image на Debian trixie ради glibc ≥ 2.39 для `@mathew-cf/rag-cli`. Но PR#71 указал `FROM node:22-noble-slim` — тег, **не существующий** в Docker Hub:
- Проверка через Docker Hub API: `count=0` для `node:22-noble-slim`.
- Официальные образы `node` базируются **только на Debian**, не Ubuntu. Тегов `*-noble-slim` в официальном репо `library/node` нет вообще.
- При пересборке Dockerfile падает: `failed to resolve source metadata for docker.io/library/node:22-noble-slim: not found`.
Результат: PR#71 не собирается. Нужен реальный тег с glibc ≥ 2.39 (требование `@mathew-cf/rag-cli`, см. ADR-024 / ADR-030) и Node 22 LTS. PR#73 — fix follow-up к PR#71.
## Решение
```dockerfile
FROM node:22-trixie-slim
```
- `node:22-trixie-slim` — реальный тег, проверен через Docker Hub API (`count>0`).
- Debian 13 trixie → glibc 2.41 ≥ 2.39 — удовлетворяет требованию `@mathew-cf/rag-cli`.
- Node 22 LTS — совпадает с каналом PR#71, без мажорного обновления.
- Однострочное изменение в `Dockerfile`, остальное без правок.
- Дополнительно: Debian 13 **не использует snap** → chromium ставится через `apt-get install -y chromium` как обычный пакет, реальный browser, не transitional wrapper. Puppeteer-интеграция (`PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium`) работает as-is. На Ubuntu noble chromium — snap-пакет, что создавало known limitation; Debian trixie эту проблему снимает.
## Альтернативы
- **`node:lts-trixie-slim` (Node 24 LTS)** — отклонено: мажорное обновление Node 22→24. Установленные npm-пакеты (opencode-ai, repomix, `@mathew-cf/opencode-memory`) тестировались на Node 22 LTS; Node 24 не валидирован, риск несовместимости.
- **`node:trixie-slim` (latest = Node 26)** — отклонено: latest-тег = не LTS. Для production-образа требуется long-term support; latest дополнительно не pinned → drifting risk при `docker build`.
- **`node:22.23.1-trixie-slim` (pinned)** — отклонено: избыточная детализация для публичного репо. Pin патч-версии Node усложняет обслуживание (ручной bump) без выгоды; `node:22-trixie-slim` уже даёт детерминированный major+distro.
- **`debian:trixie-slim` + Node вручную (NodeSource или nvm)** — отклонено: сложнее, больше правок в Dockerfile (apt node = старая версия, нужен NodeSource apt-репозиторий или download tarball). `node:22-trixie-slim` уже включает Node 22 LTS — нулевая настройка.
- **`cargo install rag-cli` из исходников** — отклонено: +500MB Rust toolchain (rustc, cargo, crates.io deps), +10 мин build на каждом `docker build`, +image size. Смена base image — 0 дополнительных MB, готовый prebuilt binary работает as-is.