Быстрый путь caddy_only не исполняется: мерж с единственным caddy-файлом пересоздал весь стек ПТИЦЫ, а пропущенная джоба показана как success #3448

Closed
opened 2026-09-11 20:47:42 +00:00 by bot-backend · 0 comments
Collaborator

Быстрый путь «правка ТОЛЬКО прокси» (#2916) не исполняется — проверено сегодня на мерже, где в диффе ровно один caddy-файл.

Что сделано и что получилось. PR #3446 намеренно собран из единственного файла caddy/sites/apps.caddy — ровно чтобы получить caddy_only=true → джобу deploy-caddy (там git reset --hard + caddy reload, без пересоздания контейнеров). Мерж-коммит 84920e6c действительно содержит один файл:

$ git diff --name-only 84920e6c^1 84920e6c
caddy/sites/apps.caddy

Но на проде после этого мержа контейнеры пересозданы:

gendesign-caddy-1     Created=2026-09-11T20:40:14.789Z  Started=20:40:15.763  Restarts=0
gendesign-backend-1   Created=2026-09-11T20:40:11.142Z
gendesign-worker-1    Created=2026-09-11T20:40:11.157Z
gendesign-frontend-1  Created=2026-09-11T20:40:01.805Z

и в логе Caddy "msg":"serving initial configuration" — это холодный старт процесса, а не caddy reload. То есть прошёл ПОЛНЫЙ деплой ПТИЦЫ со всеми сборками и up -d --force-recreate --no-deps caddy (deploy.yml:1004-1005).

Почему это не видно по статусам. В статусах коммита стоят одновременно deploy-caddy=success И deploy=success с тремя build-*, хотя их условия взаимоисключающие (caddy_only == 'true' против != 'true'). Объяснение: Forgejo показывает пропущенную джобу как success. Значит «зелёный deploy-caddy» ничего не доказывает — доказывает только метка Created контейнера.

Гипотеза о причине (требует проверки по логам джобы changes). dorny/paths-filter@v3 вызван без base: (deploy.yml:130-133), то есть на push опирается на github.event.before. Если под Forgejo для мерж-коммита before пустой/нулевой, фильтр считает изменёнными все файлы → non_caddy=truecaddy_only=false всегда. Это укладывается в то, что быстрый путь не наблюдался ни разу.

Почему это важнее, чем кажется: ровно из-за этого #3443 (полное падение Caddy на 67 с, все домены code=000) случается не только на «больших» деплоях ПТИЦЫ, но и на любой правке прокси — то есть чаще, чем предполагалось при написании #2916.

Проверяемый критерий (годится и как приёмка фикса): следующий мерж с единственным файлом под caddy/** не должен менять docker inspect gendesign-caddy-1 --format '{{.Created}}'; в логе Caddy должно быть сообщение о reload, а не serving initial configuration.

Возможный фикс: не полагаться на event.before — считать диапазон явно (git diff --name-only ${{ github.event.before }}..${{ github.sha }} с фолбэком на HEAD^..HEAD для мерж-коммита) либо получать список файлов PR через API. Плюс отдельно: сделать так, чтобы пропуск джобы не выглядел в статусах как её успех (иначе любой «зелёный» быстрый путь неотличим от невыполненного).

Refs #2916, #3443, #3274.

**Быстрый путь «правка ТОЛЬКО прокси» (#2916) не исполняется — проверено сегодня на мерже, где в диффе ровно один caddy-файл.** **Что сделано и что получилось.** PR #3446 намеренно собран из единственного файла `caddy/sites/apps.caddy` — ровно чтобы получить `caddy_only=true` → джобу `deploy-caddy` (там `git reset --hard` + `caddy reload`, без пересоздания контейнеров). Мерж-коммит `84920e6c` действительно содержит один файл: ``` $ git diff --name-only 84920e6c^1 84920e6c caddy/sites/apps.caddy ``` Но на проде после этого мержа контейнеры **пересозданы**: ``` gendesign-caddy-1 Created=2026-09-11T20:40:14.789Z Started=20:40:15.763 Restarts=0 gendesign-backend-1 Created=2026-09-11T20:40:11.142Z gendesign-worker-1 Created=2026-09-11T20:40:11.157Z gendesign-frontend-1 Created=2026-09-11T20:40:01.805Z ``` и в логе Caddy `"msg":"serving initial configuration"` — это холодный старт процесса, а не `caddy reload`. То есть прошёл ПОЛНЫЙ деплой ПТИЦЫ со всеми сборками и `up -d --force-recreate --no-deps caddy` (`deploy.yml:1004-1005`). **Почему это не видно по статусам.** В статусах коммита стоят одновременно `deploy-caddy=success` И `deploy=success` с тремя `build-*`, хотя их условия взаимоисключающие (`caddy_only == 'true'` против `!= 'true'`). Объяснение: Forgejo показывает **пропущенную** джобу как `success`. Значит «зелёный `deploy-caddy`» ничего не доказывает — доказывает только метка `Created` контейнера. **Гипотеза о причине (требует проверки по логам джобы `changes`).** `dorny/paths-filter@v3` вызван без `base:` (`deploy.yml:130-133`), то есть на push опирается на `github.event.before`. Если под Forgejo для мерж-коммита `before` пустой/нулевой, фильтр считает изменёнными все файлы → `non_caddy=true` → `caddy_only=false` **всегда**. Это укладывается в то, что быстрый путь не наблюдался ни разу. **Почему это важнее, чем кажется:** ровно из-за этого #3443 (полное падение Caddy на 67 с, все домены `code=000`) случается не только на «больших» деплоях ПТИЦЫ, но и на любой правке прокси — то есть чаще, чем предполагалось при написании #2916. **Проверяемый критерий (годится и как приёмка фикса):** следующий мерж с единственным файлом под `caddy/**` не должен менять `docker inspect gendesign-caddy-1 --format '{{.Created}}'`; в логе Caddy должно быть сообщение о reload, а не `serving initial configuration`. **Возможный фикс:** не полагаться на `event.before` — считать диапазон явно (`git diff --name-only ${{ github.event.before }}..${{ github.sha }}` с фолбэком на `HEAD^..HEAD` для мерж-коммита) либо получать список файлов PR через API. Плюс отдельно: сделать так, чтобы пропуск джобы не выглядел в статусах как её успех (иначе любой «зелёный» быстрый путь неотличим от невыполненного). Refs #2916, #3443, #3274.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3448
No description provided.