fix(docker): toolchain python3/make/g++ для нативной сборки re2 #353

Merged
agent_vscode merged 1 commits from fix/docker-re2-toolchain into develop 2026-07-04 22:11:50 +03:00
Collaborator

Проблема

Docker-сборка develop упала на RUN pnpm install --frozen-lockfile (run 28715009124): gyp ERR! Could not find any Python installation to use.

Причина

  • В #330/#339 (search_in_page) в packages/mcp появилась нативная зависимость re2@1.25.0 — упавший билд был первым билдом develop с ней.
  • Под pnpm prebuilt-бинарник re2 никогда не скачивается: install-from-cache (install-artifact-from-github) определяет репозиторий из npm_package_repository_*/npm_package_json, которые задаёт только npm. В логах CI: No github repository was identified. Building locally ... — всегда fallback на node-gyp.
  • На GH-раннерах компиляция проходит (там есть python3 и build-essential), а в node:22-slim toolchain'а нет → падение.

Решение

  • builder: apt-слой python3 make g++ до COPY . . (кэшируется независимо от исходников; стадия отбрасывается).
  • installer: pnpm install --prod тоже собирает re2, поэтому toolchain ставится и удаляется в одном RUN-слое (финальный образ не растёт), а сама установка выполняется от пользователя node через su node -c, чтобы сохранить владельца node_modules без дорогого chown-слоя. USER node восстановлен сразу после.

release.yml использует тот же Dockerfile — покрыт этим же фиксом.

🤖 Generated with Claude Code

## Проблема Docker-сборка develop упала на `RUN pnpm install --frozen-lockfile` ([run 28715009124](https://github.com/vvzvlad/gitmost/actions/runs/28715009124)): `gyp ERR! Could not find any Python installation to use`. ## Причина - В #330/#339 (`search_in_page`) в `packages/mcp` появилась нативная зависимость `re2@1.25.0` — упавший билд был первым билдом develop с ней. - Под pnpm prebuilt-бинарник re2 **никогда** не скачивается: `install-from-cache` (install-artifact-from-github) определяет репозиторий из `npm_package_repository_*`/`npm_package_json`, которые задаёт только npm. В логах CI: `No github repository was identified. Building locally ...` — всегда fallback на node-gyp. - На GH-раннерах компиляция проходит (там есть python3 и build-essential), а в `node:22-slim` toolchain'а нет → падение. ## Решение - **builder**: apt-слой `python3 make g++` до `COPY . .` (кэшируется независимо от исходников; стадия отбрасывается). - **installer**: `pnpm install --prod` тоже собирает re2, поэтому toolchain ставится и удаляется **в одном RUN-слое** (финальный образ не растёт), а сама установка выполняется от пользователя `node` через `su node -c`, чтобы сохранить владельца node_modules без дорогого chown-слоя. `USER node` восстановлен сразу после. `release.yml` использует тот же Dockerfile — покрыт этим же фиксом. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agent_vscode added 1 commit 2026-07-04 22:10:23 +03:00
The develop image build broke at `pnpm install --frozen-lockfile`: the new
native dependency re2@1.25.0 (packages/mcp, search_in_page #330) always
compiles from source under pnpm — its prebuilt-binary downloader
(install-artifact-from-github) cannot identify the GitHub repo because pnpm
does not populate npm_package_repository_*/npm_package_json env vars ("No
github repository was identified. Building locally ..."), and node:22-slim
ships no python3/make/g++ for the node-gyp fallback.

- builder stage: add a cache-friendly apt layer with python3 make g++
  before COPY; the stage is discarded so the toolchain may stay.
- installer stage: install the toolchain, run the prod install as the node
  user via `su node -c`, and purge the toolchain — all in one RUN layer so
  the final image stays slim and node_modules ownership needs no extra
  chown layer; USER node is restored right after.

Fixes the failed run 28715009124 (develop docker build); release.yml uses
the same Dockerfile and is covered too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
agent_vscode merged commit 382e5196da into develop 2026-07-04 22:11:50 +03:00
Sign in to join this conversation.