ci: сделать видимыми два безмолвных шага после pytest
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
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 1m19s
CI / openapi-codegen-check (pull_request) Successful in 2m20s
CI / backend-tests (pull_request) Successful in 16m37s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
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 1m19s
CI / openapi-codegen-check (pull_request) Successful in 2m20s
CI / backend-tests (pull_request) Successful in 16m37s
backend-tests трижды покраснел ПОСЛЕ зелёного pytest (4647 passed, покрытие 74.57% ≥ 65), и по логу невозможно понять, в каком из двух `if: always()` шагов это случилось: act_runner не печатает баннеры обычных `run:`-шагов, а оба шага в штатном режиме молчат — один пишет в $GITHUB_STEP_SUMMARY, второй глушит вывод в /dev/null. Зелёный и красный прогоны в этом месте неотличимы построчно. Добавлены маркеры начала/конца обоих шагов. Отдельно: `coverage report` уважает fail_under из pyproject и выходит с кодом 2, а `run:` идёт под `bash -eo pipefail` — то есть шаг-ОТЧЁТ умел ронять сборку. Воспроизведено локально (pytest exit=0, шаг exit=2). Теперь код возврата печатается, а гейт остаётся там, где ему место — в `pytest --cov-fail-under=65`. `|| cov_rc=$?` вместо отдельной строки `cov_rc=$?`: под `set -e` присваивание после упавшей команды не выполнилось бы, и код снова потерялся бы. Refs #2871
This commit is contained in:
parent
53bb769ea5
commit
254a52d89c
1 changed files with 16 additions and 2 deletions
|
|
@ -246,20 +246,34 @@ jobs:
|
|||
# если переменная пустая/файла нет, печатаем в обычный лог (fallback).
|
||||
if: always()
|
||||
run: |
|
||||
echo "### шаг «Coverage summary» начался"
|
||||
[ -f coverage.xml ] || { echo "coverage.xml отсутствует — пропускаю summary"; exit 0; }
|
||||
report="$(uv run coverage report --skip-covered --sort=cover | tail -40)"
|
||||
# NB (#2871): `coverage report` уважает fail_under из pyproject и выходит с
|
||||
# кодом 2, когда порог не набран, а `run:` идёт под `bash -eo pipefail` —
|
||||
# то есть падение ЭТОГО шага гасит зелёный pytest и выглядит как «job упал
|
||||
# неизвестно где». Разделяем вычисление и вывод, чтобы код возврата был виден.
|
||||
# `|| cov_rc=$?`, а не отдельная строка: под `set -e` присваивание после
|
||||
# упавшей команды просто не выполнится, и код возврата снова потеряется.
|
||||
cov_rc=0
|
||||
uv run coverage report --skip-covered --sort=cover > /tmp/cov_report.txt || cov_rc=$?
|
||||
echo "### coverage report вернул код $cov_rc"
|
||||
report="$(tail -40 /tmp/cov_report.txt)"
|
||||
if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
|
||||
{ echo '```'; echo "$report"; echo '```'; } >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "$report"
|
||||
fi
|
||||
echo "### шаг «Coverage summary» закончился успешно"
|
||||
|
||||
- name: Снести тестовый Postgres
|
||||
# if: always() — контейнер уходит и когда сьют красный, и когда прогон
|
||||
# отменён concurrency-группой. Иначе на раннере копятся мёртвые контейнеры.
|
||||
if: always()
|
||||
working-directory: .
|
||||
run: docker rm -f "$CI_PG" >/dev/null 2>&1 || true
|
||||
run: |
|
||||
echo "### шаг «Снести тестовый Postgres» начался (CI_PG=${CI_PG:-<пусто>})"
|
||||
docker rm -f "$CI_PG" >/dev/null 2>&1 || true
|
||||
echo "### шаг «Снести тестовый Postgres» закончился успешно"
|
||||
|
||||
frontend-tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue