Repository navigation
ci: relieve queue via macOS test de-dup and cancel-in-progress on all platforms - #5096
Conversation
There was a problem hiding this comment.
Pull request overview
Reduces CI queue pressure by cancelling superseded runs and removing redundant macOS test executions.
Changes:
- Adds concurrency cancellation to Linux, macOS, and Windows CI.
- Narrows SSL-backend macOS jobs and disables one redundant codec job.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
.github/workflows/ci-win.yml |
Cancels superseded Windows runs. |
.github/workflows/ci-mac.yml |
Cancels superseded runs and deduplicates tests. |
.github/workflows/ci-linux.yml |
Cancels superseded Linux runs. |
… platforms The CI queue (especially macOS) is frequently very long because GitHub caps the number of concurrent runners (org-wide, shared across all repos), and the macOS job matrix re-ran several test suites that a given job variant cannot actually affect. A single flaky timing test (e.g. sleep_test) therefore failed a whole matrix of jobs at once and forced a full re-queue. Concurrency (all platforms: macOS, Ubuntu, Windows): - Add a concurrency group with cancel-in-progress so a force-push to a PR stops the superseded run from holding scarce runner slots. macOS test de-dup (principle: a variant job should run only the tests its variant changes): - The full pjlib-test, pjlib-util-test and pjnath-test suites already run once in the Default jobs. In the OpenSSL and GnuTLS jobs we now run only the SSL-backend-dependent tests per backend: ssl_sock_test and ssl_sock_stress_test (from pjlib-test) and turn_sock_test (pjnath's TURN-over-TLS coverage), run directly as ioq-cb-with-lock already does. pjlib-util-test has no SSL dependency and is dropped from these jobs. - The "Openh264+VPX / pjlib,util,pjnath" job ran only codec-independent suites already covered by the Default jobs and was entirely redundant; it is disabled (commented out) to free a macOS runner slot. Removed/narrowed macOS steps are commented out (not deleted) with the rationale inline, so they are easy to restore. pjmedia-test, pjsip-test and pjsua-test runs are intentionally left unchanged. This cuts the flaky timing tests (sleep/timer/timestamp) from 4 runs to 1 per macOS CI run while preserving per-backend ssl_sock and TURN-over-TLS coverage. Co-Authored-By Claude Code
|
Good catches from @copilot — both verified against the source and now fixed in ec7ff17:
|
… platforms (pjsip#5096) The CI queue (especially macOS) is frequently very long because GitHub caps the number of concurrent runners (org-wide, shared across all repos), and the macOS job matrix re-ran several test suites that a given job variant cannot actually affect. A single flaky timing test (e.g. sleep_test) therefore failed a whole matrix of jobs at once and forced a full re-queue. Concurrency (all platforms: macOS, Ubuntu, Windows): - Add a concurrency group with cancel-in-progress so a force-push to a PR stops the superseded run from holding scarce runner slots. macOS test de-dup (principle: a variant job should run only the tests its variant changes): - The full pjlib-test, pjlib-util-test and pjnath-test suites already run once in the Default jobs. In the OpenSSL and GnuTLS jobs we now run only the SSL-backend-dependent tests per backend: ssl_sock_test and ssl_sock_stress_test (from pjlib-test) and turn_sock_test (pjnath's TURN-over-TLS coverage), run directly as ioq-cb-with-lock already does. pjlib-util-test has no SSL dependency and is dropped from these jobs. - The "Openh264+VPX / pjlib,util,pjnath" job ran only codec-independent suites already covered by the Default jobs and was entirely redundant; it is disabled (commented out) to free a macOS runner slot. Removed/narrowed macOS steps are commented out (not deleted) with the rationale inline, so they are easy to restore. pjmedia-test, pjsip-test and pjsua-test runs are intentionally left unchanged. This cuts the flaky timing tests (sleep/timer/timestamp) from 4 runs to 1 per macOS CI run while preserving per-backend ssl_sock and TURN-over-TLS coverage. Co-Authored-By Claude Code
The CI queue — especially macOS — is frequently very long: GitHub caps concurrent runners (org-wide, shared across all repos), and the macOS job matrix re-ran several suites that a given variant can't actually affect. A single flaky timing test (e.g.
sleep_test) then failed a whole matrix of jobs at once and forced a full re-queue behind that long queue.1. Cancel superseded runs — all platforms (macOS, Ubuntu, Windows)
Add a
concurrencygroup withcancel-in-progresstoci-mac.yml,ci-linux.yml,ci-win.yml, so a force-push to a PR stops the superseded run from holding scarce runner slots (which return to the shared pool immediately).2. macOS test de-dup
Principle: a variant job should run only the tests its variant actually changes. The full
pjlib-test,pjlib-util-testandpjnath-testsuites run once in the Default jobs; the OpenSSL/GnuTLS jobs keep only the parts that genuinely differ by SSL backend:pjlib-test→ Default runs the full suite (incl. the timing testssleep/timer/timestamp). The OpenSSL/GnuTLS jobs run onlyssl_sock_test+ssl_sock_stress_test(the backend-dependent parts), run directly asioq-cb-with-lockalready does.pjnath-test→ Default runs the full suite. The OpenSSL/GnuTLS jobs run onlyturn_sock_test, which covers TURN-over-TLS (turn_sock_testvariant 2 →PJ_TURN_TP_TLS, exercisingpj_ssl_sock_t) — the only SSL-backend-dependent surface in pjnath.pjlib-util-test→ dropped from the SSL jobs entirely; it has no SSL/https path (verified inhttp_client.c) and is codec-independent, so the single Default run suffices.Openh264+VPX / pjlib,util,pjnathjob ran only those three suites, all already covered by the Default jobs and unaffected by the video codec → disabled (commented out), freeing a runner slot.Removed/narrowed macOS steps are commented out with the rationale inline, so they're trivial to restore.
pjmedia-test,pjsip-test,pjsua-testruns are intentionally left unchanged (conservative scope).Effect
sleep/timer/timestamp, which live in the fullpjlib-test) go from 4 runs → 1 per macOS CI run — so one timing blip can no longer fail the whole matrix.pjnath-test(~17 min) andpjlib-test(~10 min) no longer run 3× each — the Default run stays, the two SSL jobs run only small backend-specific subsets, and the fully-redundant job is dropped.Note on status checks (no action needed)
I checked the repo:
masterhas no branch protection and no required status checks (the only ruleset, "Copilot review for default branch", is disabled). So disabling theOpenh264+VPX / pjlib,util,pjnathjob does not block any PR — nothing to update. Recording it only for the future: if required status checks are ever enabled, that job's check name should not be added to the required list (it no longer reports); all other check names are unchanged.Related: the
sleep_testtolerance fix is #5095 (merged) — complementary: that reduces the failure rate, this reduces the blast radius.Co-Authored-By Claude Code