From 1892d7f5ebea4a70e23c3e9d994f3d948eed5c7f Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Mon, 21 Sep 2026 07:16:32 +0800 Subject: [PATCH] ci: give minimum Node lane runner headroom Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .github/workflows/python-tests.yml | 5 ++++- tests/test_python_ci_workflow.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 2ed266160f..b34294e778 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -213,7 +213,10 @@ jobs: needs: changes if: needs.changes.outputs.core_tests == 'true' runs-on: ubuntu-latest - timeout-minutes: 10 + # Recent full minimum-runtime lanes need roughly 8-11 minutes including + # dependency install. Keep the complete conformance set and leave enough + # runner variance so the qualification fails on assertions, not the clock. + timeout-minutes: 15 steps: - uses: actions/checkout@v7 - uses: actions/setup-node@v6 diff --git a/tests/test_python_ci_workflow.py b/tests/test_python_ci_workflow.py index b9dd776b88..560dce71ea 100644 --- a/tests/test_python_ci_workflow.py +++ b/tests/test_python_ci_workflow.py @@ -62,6 +62,18 @@ def test_checks_aggregate_requires_both_parallel_lanes( assert (result.returncode == 0) == (kernel == dashboard == "success") +def test_minimum_node_lane_keeps_full_coverage_with_runner_headroom() -> None: + minimum = WORKFLOW.split(" node-minimum-compatibility:\n", 1)[1].split( + " node-forward-compatibility:\n", 1, + )[0] + + assert "timeout-minutes: 15" in minimum + assert "for test in tests/control_plane_ts/*.test.ts" in minimum + assert 'node --no-warnings --experimental-sqlite --experimental-strip-types --test "${tests[@]}"' in minimum + assert "--test-name-pattern" not in minimum + assert "shard" not in minimum + + @pytest.mark.parametrize("result", ["success", "failure", "cancelled", "skipped", ""]) def test_stage2c_gate_requires_all_lanes(result: str) -> None: gate = WORKFLOW.split(" stage2c-correctness-e2e:", 1)[1].split(" windows-powershell:", 1)[0]