chore(ci): деплой на изменение ролей, ruff-гейт для МЕРЫ, удаление мёртвого workflow #2751

Merged
lekss361 merged 2 commits from chore/ci-config-cleanup-v2 into main 2026-08-15 19:39:06 +00:00
Owner

Пересобранная версия PR #2748 — тот заблокирован конфликтом (за сегодня в main переписали ту же секцию), и одна из трёх его правок за это время стала вредной. Старый PR закрываю в пользу этого.

1. Изменение прав вступало в силу в случайный момент (Птица)

auth/** добавлен в on.push.paths у deploy.yml. Роли лежат в auth/roles.yaml, монтируются read-only в контейнер и читаются под кэшем на всё время жизни процесса — сбросить можно только рестартом. Без триггера правка прав применялась тогда, когда чей-то посторонний мерж случайно пересоздавал контейнер.

Путь добавлен только в верхнеуровневый триггер, не в changes-фильтр infra: деплой в конце безусловно пересоздаёт контейнеры, значит самого запуска достаточно, а добавление в infra вызвало бы бесполезную пересборку идентичных образов.

Исправлена неточность прошлой версии: в комментарии было «монтируется в backend+worker». По факту — только в backend (docker-compose.prod.yml:139); worker монтирует лишь ./data и ./reports (строки 190-192).

2. Линтер не запускался в CI (МЕРА)

Добавлен блокирующий шаг ruff check после установки зависимостей. Проверено, что за сегодня он в main сам не появился — дублирования нет.

Три срабатывания RUF059 в test_estimator_pure_units.py:381 вычищены переходом на _ для неиспользуемых значений распаковки — та же конвенция уже применена в трёх соседних тестах того же файла.

Причина, по которой это не ловилось раньше: хуки pre-commit пиннят ruff 0.7.4, а зафиксированные зависимости — 0.15.20. Локальная проверка физически не видела этих правил.

3. Мёртвый конфиг удалён — но без «заготовки»

.github/workflows/ci.yml удалён (Forgejo его не исполняет, зеркало на GitHub отстало на 522 коммита), README.md поправлен: mypy был приписан гейту CI, где его нет.

Ключевое отличие от прошлой версии: закомментированный блок services: postgres не переносится никуда. В прошлой версии он сохранялся как заготовка на будущее с обоснованием «тестов против живой БД в проекте нет». За сегодня оба утверждения устарели: такие тесты появились, и там сознательно не стали использовать services: — обоснование записано в ci-tradein.yml:91-100: раннер запускает задания и сервис-контейнеры в сети хоста, а на порту 5432 этого хоста слушает продовая база. То есть тот, кто раскомментировал бы заготовку, направил бы тесты в прод.

Проверка

  • YAML разбирается в обоих изменённых workflow. Разборщик предварительно проверен на намеренно сломанном файле — ошибку ловит.
  • actionlint: deploy.yml чисто; в ci-tradein.yml одно информационное замечание (SC2012, ls вместо find, строка 117) — сверено с немодифицированной версией тем же инструментом, замечание предсуществующее, не из этой правки.
  • Диффы paths сравнены построчно: только добавления, ни один прежний путь не исчез. ci-tradein.yml фильтры вообще не трогает — там только новый шаг.

Побочное наблюдение (вне объёма)

.forgejo/workflows/ci.yml содержит две комментарные ссылки на удаляемый .github/workflows/ci.yml (строки 5 и 16). Это устаревание оставлено чужим PR #2745 и в объём этой правки не входит — фиксирую, чтобы не потерялось.

deploy-tradein.yml не тронут.

Пересобранная версия PR #2748 — тот заблокирован конфликтом (за сегодня в main переписали ту же секцию), и одна из трёх его правок за это время стала вредной. Старый PR закрываю в пользу этого. ## 1. Изменение прав вступало в силу в случайный момент (Птица) `auth/**` добавлен в `on.push.paths` у `deploy.yml`. Роли лежат в `auth/roles.yaml`, монтируются read-only в контейнер и читаются под кэшем на всё время жизни процесса — сбросить можно только рестартом. Без триггера правка прав применялась тогда, когда чей-то посторонний мерж случайно пересоздавал контейнер. Путь добавлен **только** в верхнеуровневый триггер, не в `changes`-фильтр `infra`: деплой в конце безусловно пересоздаёт контейнеры, значит самого запуска достаточно, а добавление в `infra` вызвало бы бесполезную пересборку идентичных образов. **Исправлена неточность прошлой версии:** в комментарии было «монтируется в backend+worker». По факту — только в `backend` (`docker-compose.prod.yml:139`); `worker` монтирует лишь `./data` и `./reports` (строки 190-192). ## 2. Линтер не запускался в CI (МЕРА) Добавлен блокирующий шаг `ruff check` после установки зависимостей. Проверено, что за сегодня он в main сам не появился — дублирования нет. Три срабатывания `RUF059` в `test_estimator_pure_units.py:381` вычищены переходом на `_` для неиспользуемых значений распаковки — та же конвенция уже применена в трёх соседних тестах того же файла. Причина, по которой это не ловилось раньше: хуки pre-commit пиннят ruff 0.7.4, а зафиксированные зависимости — 0.15.20. Локальная проверка физически не видела этих правил. ## 3. Мёртвый конфиг удалён — но без «заготовки» `.github/workflows/ci.yml` удалён (Forgejo его не исполняет, зеркало на GitHub отстало на 522 коммита), `README.md` поправлен: mypy был приписан гейту CI, где его нет. **Ключевое отличие от прошлой версии:** закомментированный блок `services: postgres` **не переносится никуда**. В прошлой версии он сохранялся как заготовка на будущее с обоснованием «тестов против живой БД в проекте нет». За сегодня оба утверждения устарели: такие тесты появились, и там **сознательно не стали** использовать `services:` — обоснование записано в `ci-tradein.yml:91-100`: раннер запускает задания и сервис-контейнеры в сети хоста, **а на порту 5432 этого хоста слушает продовая база**. То есть тот, кто раскомментировал бы заготовку, направил бы тесты в прод. ## Проверка - YAML разбирается в обоих изменённых workflow. Разборщик предварительно проверен на намеренно сломанном файле — ошибку ловит. - `actionlint`: `deploy.yml` чисто; в `ci-tradein.yml` одно информационное замечание (`SC2012`, `ls` вместо `find`, строка 117) — сверено с немодифицированной версией тем же инструментом, замечание **предсуществующее**, не из этой правки. - Диффы `paths` сравнены построчно: только добавления, ни один прежний путь не исчез. `ci-tradein.yml` фильтры вообще не трогает — там только новый шаг. ## Побочное наблюдение (вне объёма) `.forgejo/workflows/ci.yml` содержит две комментарные ссылки на удаляемый `.github/workflows/ci.yml` (строки 5 и 16). Это устаревание оставлено чужим PR #2745 и в объём этой правки не входит — фиксирую, чтобы не потерялось. `deploy-tradein.yml` не тронут.
lekss361 added 1 commit 2026-08-06 18:36:05 +00:00
chore(ci): деплой на изменение ролей, ruff-гейт для МЕРЫ, удаление мёртвого workflow
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Successful in 46s
CI Trade-In / frontend-checks (pull_request) Successful in 1m14s
CI Trade-In / backend-tests (pull_request) Successful in 3m57s
26fe9e4d77
- deploy.yml: добавлен auth/** в path-триггеры. app.core.auth кэширует
  roles.yaml на весь lifetime процесса (@lru_cache), а файл монтируется
  ТОЛЬКО в backend (не в worker, у него лишь ./data и ./reports) — без
  триггера правка ролей вступала бы в силу в случайный момент.
- ci-tradein.yml: добавлен блокирующий шаг `ruff check` — гейт для tradein
  backend его не гонял вообще. Заодно почищены 3 срабатывания RUF059
  (unused unpacked vars) в test_estimator_pure_units.py:381 по established
  convention (`_` уже используется в соседнем тесте того же файла).
- Удалён мёртвый .github/workflows/ci.yml (Forgejo его не исполняет; GitHub
  mirror отстал на 500+ коммитов). Закомментированный postgres-services блок
  НЕ перенесён — обоснование, ради которого его хотели оставить как заготовку
  ("тестов против живой БД нет"), уже неверно: tests/sql/ реально гоняются
  против Postgres в ci.yml (#2745), и там намеренно НЕ используется `services:`
  — раннер поднимает job и service-контейнеры в сети хоста, где порт 5432
  занят прод-базой (см. ci.yml:91-100).
- README.md: убрана ложная привязка mypy к живому CI-гейту (только ruff +
  pytest + coverage gate ≥65%); убран stale-блок про .github/workflows/ —
  каталог после удаления ci.yml пуст.
bot-backend added 1 commit 2026-08-15 19:30:56 +00:00
Merge main в chore/ci-config-cleanup-v2
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Successful in 52s
CI Trade-In / frontend-checks (pull_request) Successful in 1m19s
CI Trade-In / backend-tests (pull_request) Successful in 5m7s
87258075a2
Слить актуальный main (билд-раннер #2841/#2869, невалидные индексы #2752,
честный health-check и deploy-status #2841) в ветку очистки CI. Один конфликт
в .forgejo/workflows/deploy.yml: список triggers.paths — main добавил
ops/docker-prune.sh (#2887), ветка добавила auth/** (RBAC roles config).
Разрешено сохранением обоих путей, без потери ни одного триггера.
lekss361 merged commit 48e75534bb into main 2026-08-15 19:39:06 +00:00
lekss361 deleted branch chore/ci-config-cleanup-v2 2026-08-15 19:39:06 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#2751
No description provided.