Skip to content

fix(ci): test suite hangs on CI and burns the full 6h limit — CodeLens CI has not gone green in 60+ runs, no timeout-minutes anywhere #303

Description

@Wolfvin

Mengapa (falsifiable — diverifikasi 2026-07-17)

Gate CI CodeLens mati total, dan sudah mati berhari-hari. Tak ada yang menyadarinya karena kegagalannya diam.

gh run list --workflow "CodeLens CI" --limit 60NOL sukses. Semua cancelled, mundur setidaknya sampai 2026-07-14.

cancelled itu menyesatkan — tak ada manusia yang membatalkannya. Buktinya durasi:

run 29502899082: created=2026-07-16T13:36:17Z  updated=2026-07-16T19:36:35Z  conclusion=cancelled

6 jam 0 menit 18 detik — itu batas keras job GitHub. Job-nya hang sampai dibunuh platform, lalu ditandai cancelled.

Di mana hang-nya (run 29555933312, PR #298, diperiksa saat masih hidup):

Step Status
1. Set up job ✅ 04:53:23Z
2. Checkout repository ✅ 04:53:24Z
3. Set up Python 3.11 ✅ 04:53:25Z
4. Install dependencies ✅ 04:53:25Z
5. Run test suite in_progress sejak 04:53:30Z — 64+ menit dan terus

Runner nyata ter-assign (GitHub Actions 1000009177), bukan antri. Suite yang sama selesai 346 detik di Windows lokal, dan daftar kegagalannya stabil (19, identik dengan main).

Diperparah: grep -rn "timeout-minutes" .github/workflows/kosong. Tak satu pun workflow punya timeout. Jadi setiap hang membakar 6 jam penuh menit Actions sebelum mati, dikali CodeLens CI + CodeLens Quality Gate (4 matriks Python) + CodeLens SARIF per push.

Konteks

Tujuan

CI gagal cepat dan terbaca, bukan hang 6 jam lalu diam — sehingga hang-nya bisa didiagnosis dan gate merge kembali berarti.

Constraint

  • timeout-minutes BUKAN fix root cause — ia guard yang membuat hang terlihat dan murah. Jangan tutup issue ini hanya karena timeout ditambahkan; hang-nya harus diketahui penyebabnya.
  • Ambil batas dari fakta terukur: suite lokal 346 detik. Batas job yang longgar tapi waras (mis. 20-30 menit) mengubah kebakaran 6 jam jadi kegagalan cepat berlog.
  • Jangan mask hang dengan menghapus/skip test sampai penyebabnya diketahui — itu menukar gate palsu dengan gate palsu yang lain.
  • pytest-timeout tidak terpasang (--timeoutunrecognized arguments). Kalau dipakai untuk melokalisasi test yang hang, tambahkan sebagai dev-dep secara eksplisit.

Definition of Done

  • Semua workflow punya timeout-minutes; run yang hang mati dalam menit, bukan 6 jam, dan log-nya terbaca
  • Step/test persis yang hang di Linux teridentifikasi dari log, dan ditulis di issue ini
  • Root cause hang diketahui dan diperbaiki (atau di-skip dengan alasan tertulis + issue lanjutan kalau lingkungan CI memang tak mendukungnya)
  • CodeLens CI menyelesaikan satu run sampai conclusion nyata (success/failure) — bukan cancelled
  • Kegagalan CI yang tersisa cocok dengan baseline lokal (19, sesuai audit(ci): triage 13 test failures unmasked by segfault fix (#266) #271), bukan angka misterius

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions