fix(frontend): .env reaches the build, runtime image without it; eslint + prettier as an option #1

Merged
hh merged 3 commits from deploy-scheme into main 2026-10-08 18:46:04 +00:00
Owner

Баг 5 из перевода cars-system 07.10 и имя образа. Не сливать без решения человека.

.env и $env/static/public

.dockerignore резал .env — сборка не видела PUBLIC_*, и всё, что импортирует $env/static/public, падало на vite build (проверено: со старым .dockerignore docker build падает, с новым — проходит). Но и просто пустить .env в контекст нельзя: у адаптера bun Dockerfile был одностадийный, COPY . . унёс бы .env в итоговый образ.

Теперь:

  • .dockerignore пропускает .env (.env.* — локальные переопределения — по-прежнему нет);
  • Dockerfile для bun — в три стадии, как уже был у static: deps → builder (тут .env) → runtime с build/ и bun install --production.

Проверено docker build на отрендеренном проекте (bun, root): PUBLIC_GREETING из .env вшит в чанки, .env в итоговом образе нет, контейнер отвечает 200.

В layout part контекст сборки — frontend/, значит $env/static/* читаются из frontend/.env, а не из корневого .env. Единый корневой .env (вариант A) не трогал.

Линтер: biome или eslint

Шаблон умел только biome/ultracite; cars-system живёт на eslint + prettier. Новый вопрос linter (по умолчанию biome — существующие проекты при copier update не меняются):

  • biome — как было;
  • eslint — конфиг sv create (eslint 10, typescript-eslint, eslint-plugin-svelte, prettier с плагинами svelte и tailwind), .prettierignore не трогает файлы copier/infra. Скрипты fix/lint те же по имени — Makefile и хук Claude не меняются.

prettier-plugin-tailwindcss и biome сортируют классы по-разному, а исходники шаблона написаны под biome — поэтому eslint-проект один раз прогоняет bun run fix сразу после генерации (задача copier, если install_deps). Проверено в контейнере oven/bun: оба варианта после генерации проходят bun run lint и svelte-check с нулём ошибок.

Имя образа

<slug с дефисами>/frontend, как в backend-python (см. тот PR).

Вопрос: убирать ли make pre-deploy / post-deploy и штампы refs/deploy/*

Прод флота теперь деплоит infra/komodo (git-режим Komodo: слой compose.fleet.yml, deploy.sh, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки на files_on_host (сверено по fleet/**/stack.toml 08.10):

  • make pre-deploy + make post-deploy: hubmi, ai-lawyer, factory-record;
  • только make pre-deploy: superteam, lodge;
  • stealth-server / stealth-solutions их не используют.

Если цели убрать из шаблона, copier update в этих репах удалит их из Makefile, и следующий деплой стека упадёт на make: *** No rule to make target 'pre-deploy'.

Рекомендация: в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (backend-python, frontend-svelte, blank, корневой Makefile infra), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (stack.toml.next), hubmi и superteam ждут решения по репам в Gitea.

🤖 Generated with Claude Code

Баг 5 из перевода cars-system 07.10 и имя образа. **Не сливать без решения человека.** ## `.env` и `$env/static/public` `.dockerignore` резал `.env` — сборка не видела `PUBLIC_*`, и всё, что импортирует `$env/static/public`, падало на `vite build` (проверено: со старым `.dockerignore` `docker build` падает, с новым — проходит). Но и просто пустить `.env` в контекст нельзя: у адаптера bun Dockerfile был одностадийный, `COPY . .` унёс бы `.env` в итоговый образ. Теперь: - `.dockerignore` пропускает `.env` (`.env.*` — локальные переопределения — по-прежнему нет); - Dockerfile для bun — в три стадии, как уже был у static: `deps` → `builder` (тут `.env`) → `runtime` с `build/` и `bun install --production`. Проверено `docker build` на отрендеренном проекте (bun, root): `PUBLIC_GREETING` из `.env` вшит в чанки, `.env` в итоговом образе нет, контейнер отвечает 200. В layout `part` контекст сборки — `frontend/`, значит `$env/static/*` читаются из `frontend/.env`, а не из корневого `.env`. Единый корневой `.env` (вариант A) не трогал. ## Линтер: biome или eslint Шаблон умел только biome/ultracite; cars-system живёт на eslint + prettier. Новый вопрос `linter` (по умолчанию `biome` — существующие проекты при `copier update` не меняются): - `biome` — как было; - `eslint` — конфиг `sv create` (eslint 10, typescript-eslint, eslint-plugin-svelte, prettier с плагинами svelte и tailwind), `.prettierignore` не трогает файлы copier/infra. Скрипты `fix`/`lint` те же по имени — Makefile и хук Claude не меняются. prettier-plugin-tailwindcss и biome сортируют классы по-разному, а исходники шаблона написаны под biome — поэтому eslint-проект один раз прогоняет `bun run fix` сразу после генерации (задача copier, если `install_deps`). Проверено в контейнере `oven/bun`: оба варианта после генерации проходят `bun run lint` и `svelte-check` с нулём ошибок. ## Имя образа `<slug с дефисами>/frontend`, как в `backend-python` (см. тот PR). ## Вопрос: убирать ли `make pre-deploy` / `post-deploy` и штампы `refs/deploy/*` Прод флота теперь деплоит `infra/komodo` (git-режим Komodo: слой `compose.fleet.yml`, `deploy.sh`, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки на `files_on_host` (сверено по `fleet/**/stack.toml` 08.10): - `make pre-deploy` + `make post-deploy`: **hubmi**, **ai-lawyer**, **factory-record**; - только `make pre-deploy`: **superteam**, **lodge**; - stealth-server / stealth-solutions их не используют. Если цели убрать из шаблона, `copier update` в этих репах удалит их из Makefile, и следующий деплой стека упадёт на `make: *** No rule to make target 'pre-deploy'`. **Рекомендация:** в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (`backend-python`, `frontend-svelte`, `blank`, корневой Makefile `infra`), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (`stack.toml.next`), hubmi и superteam ждут решения по репам в Gitea. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
hh added 2 commits 2026-10-08 04:41:45 +00:00
hh added 1 commit 2026-10-08 18:43:17 +00:00
hh merged commit 5e449a560b into main 2026-10-08 18:46:04 +00:00
hh deleted branch deploy-scheme 2026-10-08 18:46:04 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: templates/frontend-svelte#1