Skip to content

ci: parallelise tests-providers into a per-provider matrix#725

Merged
lewisjared merged 6 commits into
mainfrom
ci/parallelise-providers
Jun 14, 2026
Merged

ci: parallelise tests-providers into a per-provider matrix#725
lewisjared merged 6 commits into
mainfrom
ci/parallelise-providers

Conversation

@lewisjared

@lewisjared lewisjared commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to #723. The tests-providers CI job ran all four diagnostic providers serially in a single runner, which made it the critical path for the CI.

This splits it into a matrix over [example, esmvaltool, ilamb, pmp] so the providers run in parallel on separate runners.
The integration tests are also split out from the unit tests

Checklist

Please confirm that this pull request has done the following:

  • Tests added (CI-only change; no application code touched)
  • Documentation added (where applicable)
  • Changelog item added to changelog/

The four diagnostic providers ran serially in one runner (~10m44s,
dominated by esmvaltool at ~5m). Split them into a matrix so they run in
parallel on separate runners; the providers critical path drops to the
slowest single provider (~6m).

- Each job fetches only sample data up front; the ilamb target fetches its
  own ilamb-test registry, so the other providers skip that download.
- Per-job `coverage report` is non-gating (it is scoped to a single
  provider); the aggregate fail_under gate is enforced by codecov/project,
  since all four jobs upload to the shared `providers` flag.
- Scratch artifacts are named per provider to avoid upload-artifact collisions.
@codecov

codecov Bot commented Jun 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
core 93.28% <ø> (-0.04%) ⬇️
providers 91.79% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Split the long tests-core job (core + ref + celery + integration run
serially, ~11m) into two parallel jobs: tests-core (core, celery and the
climate-ref unit tests) and a new tests-integration job (the climate-ref
integration suite plus the top-level cross-package tests). Both upload to
the `core` codecov flag with `--fail-under=0`; the aggregate gate stays on
codecov/project.

Add `concurrency` groups to ci, packaging and provider-compat so superseded
pull-request runs are cancelled (main/tags are never cancelled), and trim
the provider-compatibility matrix to a single Python version on pull
requests. Together these keep the per-PR job fan-out under the runner
concurrency cap while roughly halving the critical path.

The Makefile gains test-ref-unit / test-ref-integration targets (test-ref
runs both); the unit target keeps --doctest-modules so src module-level
coverage is still tracked. Also harden a providers-list test whose
assertion depended on a long tmp_path not being truncated in the rendered
rich table, which fails under pytest-xdist.
`coverage xml` re-applies the pyproject `fail_under=70` after writing the
report, so the tests-integration job failed (partial coverage ~49%) even
though `coverage report` was already run with `--fail-under=0`. Pass
`--fail-under=0` to `coverage xml` too; the aggregate gate is enforced by
codecov/project. Same latent issue applied to the tests-core and
tests-providers jobs, fixed consistently.
@lewisjared lewisjared merged commit 8995af1 into main Jun 14, 2026
26 checks passed
@lewisjared lewisjared deleted the ci/parallelise-providers branch June 14, 2026 04:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant