From 67204754d93dd50860f4308c6c24fe5afb6df522 Mon Sep 17 00:00:00 2001 From: Christian Boos Date: Sat, 7 Nov 2026 15:42:29 +0100 Subject: [PATCH] Let every CI cell finish when one fails Both matrix jobs, `test` and `browser`, now set `fail-fast: false`. With the default, the first red cell cancelled the rest of its job, the primary cell included, so one flaky cell also took coverage's combine down and a rerun had to repeat every cancelled cell. Now each cell reports its own result, and "Re-run failed jobs" repeats only the red ones. The cost: a push that is broken everywhere runs every cell to the end. The coverage job's comment no longer mentions a primary cell cancelled by fail-fast, which can no longer happen. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51a89e80..ac6d4a66 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,6 +18,10 @@ jobs: test: runs-on: ${{ matrix.os }} strategy: + # Every cell runs to the end when another fails: a flaky cell then + # costs only its own rerun, and does not cancel the primary cell + # whose coverage data the `coverage` job needs. + fail-fast: false matrix: os: ["ubuntu-latest", "windows-latest"] python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] @@ -126,6 +130,8 @@ jobs: browser: runs-on: ${{ matrix.os }} strategy: + # As in `test`: no cell cancels the others. + fail-fast: false matrix: os: ["ubuntu-latest", "windows-latest"] include: @@ -182,10 +188,9 @@ jobs: needs: [test, browser] # Run once the two jobs are over, red cells included, so a failure in # a non-primary cell does not withhold the report. The report needs - # both primary artifacts, though: a primary cell whose pytest failed, - # or that the matrix's default fail-fast cancelled after another - # cell's failure, never reaches its upload, and this job then fails at - # the combine below, beside the cell that failed first. + # both primary artifacts, though: a primary cell whose pytest failed + # never reaches its upload, and this job then fails at the combine + # below, beside that cell. if: ${{ !cancelled() }} env: PYTHON_VERSION: "3.12"