[tradein][infra][devops] deploy-tradein глотает ошибки миграций + нет tracking (H1) #636

Closed
opened 2026-05-29 06:28:50 +00:00 by Light1YT · 0 comments
Owner

Проблема (root-cause долга по верификации)

.forgejo/workflows/deploy-tradein.yml применял миграции так:

psql ... -v ON_ERROR_STOP=on < "$sql_file" || echo "  (skipped — already applied or error: $fname)"

Два дефекта:

  1. Нет tracking — каждая .sql гоняется на КАЖДОМ деплое (опора на идемпотентность).
  2. || echo глотает ЛЮБУЮ ошибку — упавшая миграция = «деплой прошёл», схема кривая.

Именно отсюда долг «не знаем, наложились ли миграции 121/122/072/073/075» после батча 2026-05-28.

Фикс

Портировать проверенный паттерн _schema_migrations из основного deploy.yml (там уже корректно: skip-if-applied + || { echo FAILED; exit 1; }). Адаптировать под -p gendesign-tradein, psql -U tradein -d tradein, backend/data/sql/. Добавить first-run baseline (прод уже на схеме 001-076; 7 миграций несут INSERT-seed без ON CONFLICT → повторный прогон под строгим gate упал бы на PK-violation).

Acceptance

  • Упавшая миграция → exit 1 (деплой стоп), не swallowed.
  • Каждая миграция применяется ровно один раз.
  • Baseline помечает 001-076 applied без прогона на первом деплое.
  • Ordering сохранён (up -d → migrate → restart backend для FDW).
## Проблема (root-cause долга по верификации) `.forgejo/workflows/deploy-tradein.yml` применял миграции так: ```bash psql ... -v ON_ERROR_STOP=on < "$sql_file" || echo " (skipped — already applied or error: $fname)" ``` Два дефекта: 1. **Нет tracking** — каждая `.sql` гоняется на КАЖДОМ деплое (опора на идемпотентность). 2. **`|| echo` глотает ЛЮБУЮ ошибку** — упавшая миграция = «деплой прошёл», схема кривая. Именно отсюда долг «не знаем, наложились ли миграции 121/122/072/073/075» после батча 2026-05-28. ## Фикс Портировать проверенный паттерн `_schema_migrations` из основного `deploy.yml` (там уже корректно: skip-if-applied + `|| { echo FAILED; exit 1; }`). Адаптировать под `-p gendesign-tradein`, `psql -U tradein -d tradein`, `backend/data/sql/`. Добавить **first-run baseline** (прод уже на схеме 001-076; 7 миграций несут INSERT-seed без ON CONFLICT → повторный прогон под строгим gate упал бы на PK-violation). ## Acceptance - [ ] Упавшая миграция → `exit 1` (деплой стоп), не swallowed. - [ ] Каждая миграция применяется ровно один раз. - [ ] Baseline помечает 001-076 applied без прогона на первом деплое. - [ ] Ordering сохранён (up -d → migrate → restart backend для FDW).
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#636
No description provided.