diff --git a/.gitea/workflows/backend-quality-gate.yml b/.gitea/workflows/backend-quality-gate.yml index 089a64c4..6e6391aa 100644 --- a/.gitea/workflows/backend-quality-gate.yml +++ b/.gitea/workflows/backend-quality-gate.yml @@ -166,6 +166,7 @@ jobs: DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ "${packages[@]}" fi + echo "runner: $(nproc) CPUs, $(awk '/MemTotal/ {printf "%.1f", $2 / 1048576}' /proc/meminfo) GiB RAM" python3 --version curl --version git --version @@ -324,6 +325,7 @@ jobs: DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ "${packages[@]}" fi + echo "runner: $(nproc) CPUs, $(awk '/MemTotal/ {printf "%.1f", $2 / 1048576}' /proc/meminfo) GiB RAM" python3 --version curl --version git --version @@ -472,6 +474,33 @@ jobs: export PATH="$PWD/.venv/bin:$PATH" npm test --prefix frontend + - name: Report slowest frontend tests + if: always() + run: | + set -euo pipefail + # Timing evidence for CI tuning: the 25 slowest top-level tests and + # the sum of all top-level test time (tests run concurrently, so the + # sum is larger than the step's wall time). + tap=gate-logs/frontend-tests.tap + [ -f "$tap" ] || { echo "no $tap"; exit 0; } + python3 - "$tap" <<'PY' + import re, sys + rows, name = [], None + for line in open(sys.argv[1], encoding="utf-8", errors="replace"): + head = re.match(r"^(?:not )?ok \d+ - (.*)$", line) + if head: + name = head.group(1) + continue + took = re.match(r"^ duration_ms: ([0-9.]+)$", line) + if took and name is not None: + rows.append((float(took.group(1)), name)) + name = None + rows.sort(reverse=True) + print(f"top-level tests={len(rows)} summed={sum(r[0] for r in rows) / 1000:.0f}s") + for ms, test in rows[:25]: + print(f"{ms / 1000:8.1f}s {test[:150]}") + PY + - name: Frontend lint run: | set -euo pipefail