Баги шаблона, найденные при переводе cars-system 07.10, и абзац про новую схему деплоя. Не сливать без решения человека — слияние меняет все будущие проекты и copier update существующих.
Что исправлено
pre-deploy поднимал postgres в родительском каталоге.COMPOSE := cd .. && docker compose подставлялся дважды в одну строку (… | grep -qx postgres && cd .. && docker compose up -d postgres) — второй cd .. уходил на уровень выше проекта, в логах деплоя «no configuration file provided: not found». Теперь каждая команда compose — в своей подоболочке; postgres поднимается с --wait (миграция сразу за ним).
post-deploy при пустом списке сервисов всё равно делал docker compose restart.[ -z "$running" ] || cd .. && docker compose restart $running читается как (… || cd ..) && restart — при пустом списке перезапускалось всё (и в backend/, а не в корне). Теперь if [ -n "$running" ]; then (…restart…); fi.
Имя образа — через дефис.project_slug остаётся snake_case (пакет python, база), а образ — <slug с дефисами>/backend, как имена стеков и проектов во флоте (cars-system/backend, а не cars_system/backend). Переменная caddy — в PR шаблона caddy.
Проверено рендером (copier copy -r HEAD, layout part, postgres) и make pre-deploy / post-deploy с поддельным docker, который печатает свой каталог:
main
эта ветка
up -d postgres
в tpl/ (родитель проекта)
в корне проекта, --wait
пустой список в post-deploy
docker compose restart в backend/
ничего
непустой список
—
docker compose restart api в корне
Для существующих проектов
copier update переименует образ (foo_bar/backend → foo-bar/backend): make pre-deploy не найдёт образ под новым именем и соберёт его один раз, старый останется до чистки. У стеков в git-режиме имя образа задаёт слой в infra — их это не касается.
Вопрос: убирать ли 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.
Баги шаблона, найденные при переводе cars-system 07.10, и абзац про новую схему деплоя. **Не сливать без решения человека** — слияние меняет все будущие проекты и `copier update` существующих.
## Что исправлено
1. **`pre-deploy` поднимал postgres в родительском каталоге.** `COMPOSE := cd .. && docker compose` подставлялся дважды в одну строку (`… | grep -qx postgres && cd .. && docker compose up -d postgres`) — второй `cd ..` уходил на уровень выше проекта, в логах деплоя «no configuration file provided: not found». Теперь каждая команда compose — в своей подоболочке; postgres поднимается с `--wait` (миграция сразу за ним).
2. **`post-deploy` при пустом списке сервисов всё равно делал `docker compose restart`.** `[ -z "$running" ] || cd .. && docker compose restart $running` читается как `(… || cd ..) && restart` — при пустом списке перезапускалось всё (и в `backend/`, а не в корне). Теперь `if [ -n "$running" ]; then (…restart…); fi`.
4. **Имя образа — через дефис.** `project_slug` остаётся snake_case (пакет python, база), а образ — `<slug с дефисами>/backend`, как имена стеков и проектов во флоте (`cars-system/backend`, а не `cars_system/backend`). Переменная caddy — в PR шаблона `caddy`.
Проверено рендером (`copier copy -r HEAD`, layout part, postgres) и `make pre-deploy` / `post-deploy` с поддельным docker, который печатает свой каталог:
| | `main` | эта ветка |
|---|---|---|
| `up -d postgres` | в `tpl/` (родитель проекта) | в корне проекта, `--wait` |
| пустой список в post-deploy | `docker compose restart` в `backend/` | ничего |
| непустой список | — | `docker compose restart api` в корне |
## Для существующих проектов
`copier update` переименует образ (`foo_bar/backend` → `foo-bar/backend`): `make pre-deploy` не найдёт образ под новым именем и соберёт его один раз, старый останется до чистки. У стеков в git-режиме имя образа задаёт слой в infra — их это не касается.
## Вопрос: убирать ли `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)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Баги шаблона, найденные при переводе cars-system 07.10, и абзац про новую схему деплоя. Не сливать без решения человека — слияние меняет все будущие проекты и
copier updateсуществующих.Что исправлено
pre-deployподнимал postgres в родительском каталоге.COMPOSE := cd .. && docker composeподставлялся дважды в одну строку (… | grep -qx postgres && cd .. && docker compose up -d postgres) — второйcd ..уходил на уровень выше проекта, в логах деплоя «no configuration file provided: not found». Теперь каждая команда compose — в своей подоболочке; postgres поднимается с--wait(миграция сразу за ним).post-deployпри пустом списке сервисов всё равно делалdocker compose restart.[ -z "$running" ] || cd .. && docker compose restart $runningчитается как(… || cd ..) && restart— при пустом списке перезапускалось всё (и вbackend/, а не в корне). Теперьif [ -n "$running" ]; then (…restart…); fi.project_slugостаётся snake_case (пакет python, база), а образ —<slug с дефисами>/backend, как имена стеков и проектов во флоте (cars-system/backend, а неcars_system/backend). Переменная caddy — в PR шаблонаcaddy.Проверено рендером (
copier copy -r HEAD, layout part, postgres) иmake pre-deploy/post-deployс поддельным docker, который печатает свой каталог:mainup -d postgrestpl/(родитель проекта)--waitdocker compose restartвbackend/docker compose restart apiв корнеДля существующих проектов
copier updateпереименует образ (foo_bar/backend→foo-bar/backend):make pre-deployне найдёт образ под новым именем и соберёт его один раз, старый останется до чистки. У стеков в git-режиме имя образа задаёт слой в infra — их это не касается.Вопрос: убирать ли
make pre-deploy/post-deployи штампыrefs/deploy/*Прод флота теперь деплоит
infra/komodo(git-режим Komodo: слойcompose.fleet.yml,deploy.sh, sops в каталоге стека, теги образов по хэшу). Эти цели на проде больше не нужны, и именно в них жили баги 1–2. Но их ещё зовут стеки наfiles_on_host(сверено поfleet/**/stack.toml08.10):make pre-deploy+make post-deploy: hubmi, ai-lawyer, factory-record;make pre-deploy: superteam, lodge;Если цели убрать из шаблона,
copier updateв этих репах удалит их из Makefile, и следующий деплой стека упадёт наmake: *** No rule to make target 'pre-deploy'.Рекомендация: в этом PR цели оставить (баги в них починены, README говорит, что они для чекаута, развёрнутого руками). Убрать отдельным PR во всех шаблонах сразу (
backend-python,frontend-svelte,blank, корневой Makefileinfra), когда последний из этих пяти стеков переедет в git-режим. ai-lawyer, factory-record, lodge уже подготовлены (stack.toml.next), hubmi и superteam ждут решения по репам в Gitea.🤖 Generated with Claude Code