Skip to content

Improve CI - #226

Open
clairemerker wants to merge 65 commits into
mainfrom
testing-hackathon
Open

clairemerker wants to merge 65 commits into
mainfrom
testing-hackathon

Conversation

@clairemerker

@clairemerker clairemerker commented Jul 23, 2026 •

Copy link
Copy Markdown
Contributor

See Testing documentation and CI/CD setup.

Disentangle inference testing from core-functionality testing (reports, meteograms, animations). Core logic is checked fast on every push; expensive inference is replayed from frozen reference data where possible, with full end-to-end runs kept separate.

Tiers

0. Unit — GitHub Actions on every push; locally pytest.

1. longtest (per-PR; cscs-ci run longtest or ci/run-integration-coverage.sh longtest tests/integration)
Baseline or frozen inference fixtures only — no GPU/MLflow, so it stays quick.

  • test_scoremaps_small — ICON-CH2-CTRL, 2025-04-01, KENDA-CH1 truth, T_2M/TOT_PREC6, Switzerland
  • test_replay_dryrun — fixture-replay DAG wiring + missing/checksum guards
  • test_meteogram_small — Varda + ICON-CH1/2-CTRL, 2024-08-01, SwissMetNet, GVE/SAE (skipped: fixture stale after the TOT_PREC fix, needs re-capture with servicedepl MLflow access)
  • test_dashboard_small — ICON-CH1-CTRL + INCA (WIP, disabled)
  • test_mec_small — Varda forecaster, 2025-08-01, MEC (no ffv2) (needs sarus)

2. heavytest (weekly cron; cscs-ci run heavytest or .../heavytest tests/integration)
Full workflow incl. real inference (test_configs.py).

  • forecasters-ich1.yaml — forecaster eval, 2025-03-01→02, ICON-CH2-EPS, KENDA-CH1
  • varda-single-1.0.yaml — forecaster + downscaler, 4 seasons, INCA/ICON-CH2-CTRL/ICON-CH1-CTRL, SwissMetNet, scorecards

Mechanisms

  • Uses cscs-ci and https://github.com/MeteoSwiss/varda-cscs-ci-workflows
  • Tests can be triggered per comment in the PR or locally.
  • Fixture capture/replay (evalml capture-fixture, src/evalml/fixtures.py) with per-GRIB checksums in MANIFEST.yaml.
  • Golden-reference metric checks (re-bless with EVALML_UPDATE_REFERENCE=1).
  • Subprocess-aware coverage across the snakemake/SLURM chain.
  • uv env pinned to a managed Python.

Todo / missing tests

  • config/ lives alongside tests/integration/configs/ currently (duplicated): team to decide final location
  • mean & median baselines in longtest
  • longtest: test_animation_small.py (ICON-CH2-CTRL, 2 lead times)
  • heavytest: aifs-single.yaml, forecasters-ich1-oper.yaml, forecasters-ich1-oper-fixed.yaml, forecasters-ich1_mec_ffv2.yaml
  • consolidate CI docs into main README
  • re-capture meteogram fixture (servicedepl MLflow) and un-skip

@lclanzi

lclanzi commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run

@jonasbhend

Copy link
Copy Markdown
Contributor

cscs-ci run

clairemerker and others added 6 commits July 24, 2026 09:12
Co-authored-by: Mary McGlohon <Mary.McGlohon@meteoswiss.ch>
Adds an integration test that runs the full evalml experiment pipeline
and asserts that key verification metrics match reference values from a
known-good run.

---------

Co-authored-by: Luca Lanzilao <llanzila@balfrin-ln004.cscs.ch>
Co-authored-by: Luca Lanzilao <llanzila@balfrin-ln003.cscs.ch>
This PR implements minor changes to the existing meteogram integration
test.

### Summary of changes
* rename test and config to meteogram_small
* change date to 2024-08-01 (official start of ICON archive)
* additional parameters to cover all use cases (derived, aggregated and
instantaneous)
@lclanzi

lclanzi commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run

@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run

2 similar comments
@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run

@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run

marymcglo and others added 5 commits July 27, 2026 13:42
Under the service account, uv needs to be installed for every CI run
since there is no global installation.

---------

Co-authored-by: Mary McGlohon <Mary.McGlohon@meteoswiss.ch>
Co-authored-by: clairemerker <34312518+clairemerker@users.noreply.github.com>
Two different pipelines:
- longtest: intergration tests
- heavytest: heavy integration tests (full end to end)

The idea is to trigger heavytest weekly or nighly using the CI cron, and
longtest in PRs using the comment call.
Fix truth in config test
move configs to test folder

---------

Co-authored-by: Luca Lanzilao <llanzila@balfrin-ln004.cscs.ch>
@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run heavytest

@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run heavytest

@lclanzi

lclanzi commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

cscs-ci run heavytest

@marymcglo

Copy link
Copy Markdown
Collaborator

cscs-ci run heavytest

@marymcglo

Copy link
Copy Markdown
Collaborator

cscs-ci run longtest

Mary McGlohon and others added 5 commits October 14, 2026 15:21
Resolve conflict in workflow/rules/inference.smk by keeping the
unset ECCODES_ECKIT_GEO fix from main.
- Restore lead_time to 120h in sgm-multidataset ich1-oper config
- Pin uv version to 0.11.32 in CI install
- Add 'cancel' to summarize_logs error keywords
- Fix snakefmt indentation of account_flag params block in inference.smk
- Apply ruff formatting to summarize_logs error keyword set
Apply trailing-whitespace, end-of-file, and ruff-format fixes to
existing files flagged by pre-commit run --all-files.
@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run longtest

@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run heavytest

CI runners resolve a system Python 3.12 built without the sqlite3
extension, which crashes pytest-cov (coverage imports sqlite3 at
startup). Pin python-preference = only-managed so uv always uses a
python-build-standalone interpreter, which bundles sqlite3.
@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run longtest

The spatial-interpolation tolerance fix (#271) merged from main slightly
changes the matched-cell set: N_total drops 2295960 -> 2284728 (-0.49%)
and stat means shift ~1-2%, while min/max extremes are unchanged and all
field invariants (RMSE>=MAE, RMSE**2==STDE**2+BIAS**2) and the not-grey
PNG checks still pass. Recorded with EVALML_UPDATE_REFERENCE=1 on linard.
The TOT_PREC units fix merged from main changed the forecaster config,
so its run_id hash moved (864a->f361) and the frozen fixture no longer
matches. Re-capturing needs a real inference run with servicedepl mlflow
access; skip the test until then so longtest is green.
@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run longtest

The file is written by the evalml CLI before launching snakemake, but is
absent when the workflow is invoked directly (e.g. snakemake -n in the
replay dry-run tests), which crashed DAG building at parse time. It only
feeds the startup banner, so fall back to an empty string when missing.
@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run longtest

The script is CI-only; co-locate it with the other CI assets and update
the longtest/heavytest job references. Removes the now-empty tools/ dir.
Co-locate run-integration-coverage.sh and coverage-integration.cfg with the
test suite they drive; update the longtest/heavytest job invocations, the CI
README, and the scripts' internal config path.
Replace the local runner and setup fragments (.baremetal-runner-balfrin,
.sh_preamble, .install_uv, .install_evalml) with the reusable blocks from
varda-cscs-ci-workflows, included remotely. cscs.yml now defines a single
.evalml-job base (shared runner config, .mch-* setup before_script, and the
log-summary artifact); longtest/heavytest only set their marker and Slurm
time limit. Cluster selection is delegated to the shared cluster.yml
(currently linard).
@clairemerker

Copy link
Copy Markdown
Contributor Author

cscs-ci run longtest

The PR moved the production configs into tests/integration/configs/, which
breaks existing workflows that reference config/. Restore config/ from main
so those keep working; the test suite continues to use its own copies under
tests/integration/configs/. Intentionally duplicated until the team decides
on a single location.
Move the contents of tests/integration/README.md (inference fixtures, MEC
caveats, fixture versioning, regenerating expected metrics) into the Testing
documentation section of the top-level README, and repoint the test/config
references at it. Removes the separate tests/integration/README.md.
Move the CI/CD admin/setup and trigger docs into a CI/CD setup subsection of
the main README (images repathed to ci/images/), and remove ci/README.md so
all documentation lives in one place.
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.

7 participants