test(ci): сторож пропусков кричит ::error:: под Actions (#2871) #2876

Merged
bot-backend merged 1 commit from ci/2871-skip-guard-loud into main 2026-08-13 21:05:55 +00:00
Collaborator

Зачем

13.08 этот сторож четыре прогона подряд ронял backend-tests — и совершенно правильно:
два новых теста скипались без TEST_DATABASE_URL и не были объявлены в
skip_allowlist.txt. Ровно то, ради чего он написан (#2722/#2729/#2740).

Но найти его я не смог. Его строка лежала на 1014-й строке лога, за две секунды до
зелёной сводки pytest:

НЕУЧТЁННЫЙ ПРОПУСК (1): проверка не исполнилась и не объявлена в skip_allowlist.txt:
  - tests/integration/test_analyze_parcels_sql.py::TestVelocityCompetitorsSql::test_explain_competitors

Обычный print(), по-русски, в середине тысячи строк. Мой поиск шёл по
FAILED|ERROR|::error|❌ — ни одного из этих слов там нет. В итоге причину искали три часа:
диск, раннер, гейт покрытия, кэш и два совершенно невиновных шага.

Защита сработала — её не услышали. Это и чиню.

Что меняется

Под Actions (GITHUB_ACTIONS/CI) сообщение дублируется строкой ::error:: — Forgejo
поднимает такие строки в аннотацию job'ы, и они видны без чтения лога.

Локально ничего не меняется: человеческий текст как был, ::error:: не печатается
(он бы только мешал).

Тесты двусторонние

Против conftest.py из main:

1 failed, 2 passed
    FAILED test_guard_emits_error_annotation_under_actions
    passed test_guard_stays_quiet_locally            ← контроль
    passed test_guard_silent_when_all_skips_declared ← контроль
после правки: 3 passed

Оба контрольных зелёные с обеих сторон: они проверяют, что правка не сломала
локальный вывод и не сделала сторожа болтливым там, где объявлены все пропуски.

  • pytest tests/test_skip_guard_loud.py — 3 passed
  • ruff check — clean

Refs #2871

## Зачем 13.08 этот сторож четыре прогона подряд ронял `backend-tests` — и **совершенно правильно**: два новых теста скипались без `TEST_DATABASE_URL` и не были объявлены в `skip_allowlist.txt`. Ровно то, ради чего он написан (#2722/#2729/#2740). Но найти его я не смог. Его строка лежала на **1014-й строке** лога, за две секунды до зелёной сводки pytest: ``` НЕУЧТЁННЫЙ ПРОПУСК (1): проверка не исполнилась и не объявлена в skip_allowlist.txt: - tests/integration/test_analyze_parcels_sql.py::TestVelocityCompetitorsSql::test_explain_competitors ``` Обычный `print()`, по-русски, в середине тысячи строк. Мой поиск шёл по `FAILED|ERROR|::error|❌` — ни одного из этих слов там нет. В итоге причину искали три часа: диск, раннер, гейт покрытия, кэш и два совершенно невиновных шага. **Защита сработала — её не услышали.** Это и чиню. ## Что меняется Под Actions (`GITHUB_ACTIONS`/`CI`) сообщение дублируется строкой `::error::` — Forgejo поднимает такие строки в аннотацию job'ы, и они видны без чтения лога. Локально ничего не меняется: человеческий текст как был, `::error::` не печатается (он бы только мешал). ## Тесты двусторонние Против `conftest.py` из main: ``` 1 failed, 2 passed FAILED test_guard_emits_error_annotation_under_actions passed test_guard_stays_quiet_locally ← контроль passed test_guard_silent_when_all_skips_declared ← контроль после правки: 3 passed ``` Оба контрольных зелёные с обеих сторон: они проверяют, что правка **не** сломала локальный вывод и **не** сделала сторожа болтливым там, где объявлены все пропуски. - [x] `pytest tests/test_skip_guard_loud.py` — 3 passed - [x] `ruff check` — clean Refs #2871
bot-backend added 1 commit 2026-08-13 17:36:52 +00:00
test(ci): сторож пропусков кричит ::error:: под Actions
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m20s
CI / backend-tests (pull_request) Successful in 16m44s
662ada3927
13.08 этот сторож четыре прогона подряд ронял backend-tests совершенно
правильно: два новых теста скипались без TEST_DATABASE_URL и не были
объявлены в skip_allowlist.txt. Но его строка лежала посреди тысячи
других — обычный print, по-русски, на 1014-й строке лога, за две секунды
до зелёной сводки pytest. Поиск по «FAILED / ERROR» её не находил.
Причину искали три часа: диск, раннер, покрытие, кэш, два невиновных шага.

Защита сработала, её не услышали. Под Actions дублируем сообщение
в ::error:: — Forgejo поднимает такие строки в аннотации job'ы.
Локально ничего не меняется: человеческий текст как был.

Тесты двусторонние: против conftest из main падает ровно новый
(test_guard_emits_error_annotation_under_actions), два контрольных —
«локально ::error:: нет» и «без незадекларированных пропусков молчит
и не роняет» — зелёные с обеих сторон.

Один хунк форматирования — не мой: pre-commit ruff v0.7.4 против 0.15.12 (#2864).

Refs #2871
bot-backend merged commit a068e4b612 into main 2026-08-13 21:05:55 +00:00
bot-backend deleted branch ci/2871-skip-guard-loud 2026-08-13 21:05:55 +00:00
Sign in to join this conversation.
No reviewers
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#2876
No description provided.