ci: печатать код возврата pytest явно (#2871) #2875

Merged
bot-backend merged 1 commit from ci/2871-pytest-exit-code into main 2026-08-13 17:32:09 +00:00
Collaborator

Что показали маркеры из #2872

Прогон 7530 на ветке #2865 — все шаги отчитались успешно, и job всё равно красная:

17:10:06  4647 passed, 28 skipped, 7 warnings in 892.48s
17:10:09  ### шаг «Coverage summary» начался
17:10:15  ### coverage report вернул код 0
17:10:15  ### шаг «Coverage summary» закончился успешно
17:10:15  ### шаг «Снести тестовый Postgres» начался (CI_PG=ci-pg-backend-7532)
17:10:15  ### шаг «Снести тестовый Postgres» закончился успешно
17:10:16  Skipping step 'Cache uv packages' due to 'success()'    ← job уже НЕ success
17:10:21  🏁  Job failed

Ни одного ::error, ни одного во всём логе. Оба подозреваемых из #2872
чистые. Значит я подозревал не тех.

Остался один невидимый кандидат — сам pytest

Сводка pytest печатается до выхода процесса. Ненулевой код возврата после зелёной
сводки (внутренняя ошибка на teardown, сбой плагина, ошибка записи coverage.xml) выглядит
ровно так, как мы видим: «тесты прошли, job упала неизвестно где». Проверить это нечем,
потому что шаг код возврата не печатает.

Печатаем явно, гейт сохраняем через exit $rc.

|| rc=$?, а не отдельная строка rc=$? — под set -e присваивание после упавшей
команды просто не выполнится и код снова потеряется. Третий раз за сегодня эта же
ловушка (в #2870 и #2872 тоже).

Границы

Это по-прежнему диагностика, а не починка. Если в следующем прогоне окажется
### pytest вернул код 0, значит виновата не работа шага, а учёт самого act_runner,
и разбираться надо уже с раннером — но тогда это будет установлено, а не предположено.

Параллельно гоняю ту же команду локально на той же ветке с явным echo $? — сравню.

  • yaml.safe_load — валиден
  • pre-commit check yaml — passed

Refs #2871

## Что показали маркеры из #2872 Прогон 7530 на ветке #2865 — все шаги отчитались успешно, и job всё равно красная: ``` 17:10:06 4647 passed, 28 skipped, 7 warnings in 892.48s 17:10:09 ### шаг «Coverage summary» начался 17:10:15 ### coverage report вернул код 0 17:10:15 ### шаг «Coverage summary» закончился успешно 17:10:15 ### шаг «Снести тестовый Postgres» начался (CI_PG=ci-pg-backend-7532) 17:10:15 ### шаг «Снести тестовый Postgres» закончился успешно 17:10:16 Skipping step 'Cache uv packages' due to 'success()' ← job уже НЕ success 17:10:21 🏁 Job failed ``` Ни одного `::error`, ни одного `❌` во всём логе. Оба подозреваемых из #2872 — чистые. Значит я подозревал не тех. ## Остался один невидимый кандидат — сам pytest Сводка pytest печатается **до** выхода процесса. Ненулевой код возврата после зелёной сводки (внутренняя ошибка на teardown, сбой плагина, ошибка записи coverage.xml) выглядит ровно так, как мы видим: «тесты прошли, job упала неизвестно где». Проверить это нечем, потому что шаг код возврата не печатает. Печатаем явно, гейт сохраняем через `exit $rc`. `|| rc=$?`, а не отдельная строка `rc=$?` — под `set -e` присваивание после упавшей команды просто не выполнится и код снова потеряется. Третий раз за сегодня эта же ловушка (в #2870 и #2872 тоже). ## Границы Это по-прежнему **диагностика, а не починка**. Если в следующем прогоне окажется `### pytest вернул код 0`, значит виновата не работа шага, а учёт самого act_runner, и разбираться надо уже с раннером — но тогда это будет установлено, а не предположено. Параллельно гоняю ту же команду локально на той же ветке с явным `echo $?` — сравню. - [x] `yaml.safe_load` — валиден - [x] pre-commit `check yaml` — passed Refs #2871
bot-backend added 1 commit 2026-08-13 17:13:15 +00:00
ci: печатать код возврата pytest явно
All checks were successful
CI Trade-In / changes (pull_request) Successful in 13s
CI / changes (pull_request) Successful in 14s
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) Successful in 2m15s
CI / openapi-codegen-check (pull_request) Successful in 3m40s
CI / backend-tests (pull_request) Successful in 17m42s
9c58e20e4e
Маркеры из #2872 показали, что оба шага после pytest отрабатывают успешно
(«coverage report вернул код 0», «Снести тестовый Postgres закончился
успешно»), и всё равно через 250 мс act объявляет job упавшей.

Значит остаётся один невидимый кандидат — сам шаг с pytest. Его сводка
(«4647 passed, 28 skipped») печатается ДО выхода процесса, поэтому
ненулевой код после зелёной сводки выглядит как «упало неизвестно где».

Печатаем код явно и сохраняем гейт через `exit $rc`. `|| rc=$?`, а не
отдельная строка: под `set -e` присваивание после упавшей команды не
выполнится.

Refs #2871
bot-backend merged commit 7de5aa0551 into main 2026-08-13 17:32:09 +00:00
bot-backend deleted branch ci/2871-pytest-exit-code 2026-08-13 17:32:09 +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#2875
No description provided.