From c0782a8c4c9d86a1c74a8cea04b0a67d626e62a2 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 15 Aug 2026 17:14:00 +0300 Subject: [PATCH] =?UTF-8?q?chore(deploy):=20=D1=82=D1=80=D0=B8=D0=B3=D0=B3?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D1=82=D1=8C=20=D0=B4=D0=B5=D0=BF=D0=BB=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83=20?= =?UTF-8?q?ops/docker-prune.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Скрипт уборки docker-мусора (#2887) исполняется на прод-VM по cron из /opt/gendesign/ops/. Файлы туда попадают единственным путём — шагом `git reset --hard origin/main` внутри deploy.yml. Но paths-фильтр deploy.yml перечисляет подпути ops/ поимённо, а не ops/**. Поэтому мерж #2887 деплой НЕ запустил: скрипт остался в main, на VM его не было, а установленный cron указывал в пустоту. Правки скрипта и дальше доезжали бы только случайно — со следующим чужим коммитом в backend/. Ровно этот же баг уже ловили на ops/db-bootstrap/** — там рядом стоит комментарий с той же формулировкой. Добавляю ops/docker-prune.sh по образцу и фиксирую грабли в rules/deploy.md, чтобы следующий исполняемый файл в ops/ не наступил на них третий раз. --- .claude/rules/deploy.md | 3 ++- .forgejo/workflows/deploy.yml | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.claude/rules/deploy.md b/.claude/rules/deploy.md index c01e72de..6b0077bb 100644 --- a/.claude/rules/deploy.md +++ b/.claude/rules/deploy.md @@ -25,7 +25,8 @@ Reference incident: PR #346 (2026-05-18) deploy → user сам нашёл prod ## Path triggers (Forgejo Actions, `.forgejo/workflows/`) -- `backend/**`, `frontend/**`, `Caddyfile`, `caddy/**`, `docker-compose.prod.yml`, `data/sql/**`, `ops/glitchtip-auth-forwarder/**`, `.forgejo/workflows/deploy.yml` → `deploy.yml` (main Site Finder stack) +- `backend/**`, `frontend/**`, `Caddyfile`, `caddy/**`, `docker-compose.prod.yml`, `data/sql/**`, `ops/glitchtip-auth-forwarder/**`, `ops/db-bootstrap/**`, `ops/docker-prune.sh`, `.forgejo/workflows/deploy.yml` → `deploy.yml` (main Site Finder stack) +- ⚠️ `ops/**` целиком **не** триггерит — только перечисленные подпути. Любой новый файл в `ops/`, который исполняется на VM (cron / шаг деплоя), надо добавлять в `paths:` явно, иначе он не доедет до `/opt/gendesign` и будет молча исполняться в старой версии - trade-in изменения → `deploy-tradein.yml` (отдельный stack; paths-filter base = last deployed SHA → накопленный diff, fail-safe build-all) - `docker-compose.obsidian.yml`, `scripts/setup-couchdb.sh`, `docs/obsidian-livesync.md` → `.forgejo/workflows/deploy-obsidian.yml` - `docs/**` alone → НЕ триггерит деплой diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index ebdcc75f..604e28ee 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -20,6 +20,11 @@ on: # деплоя ниже — без этого триггера правка bootstrap-файла молча не доезжала бы # до прода до следующего чужого коммита в backend/. - "ops/db-bootstrap/**" + # То же самое, ровно тот же класс бага (#2887): скрипт запускается на VM + # по cron из /opt/gendesign/ops/, куда попадает только через `git reset --hard` + # шага деплоя. Без этой строки правка скрипта лежала бы в main, а cron месяцами + # исполнял бы старую версию — молча и без единого сигнала. + - "ops/docker-prune.sh" workflow_dispatch: concurrency: -- 2.45.3