Skip to content

GitHub Actions CI: CPU compilers with ECT validation#1469

Open
cenamiller wants to merge 6 commits into
MPAS-Dev:developfrom
NCAR:feature/ci-cpu-testing
Open

GitHub Actions CI: CPU compilers with ECT validation#1469
cenamiller wants to merge 6 commits into
MPAS-Dev:developfrom
NCAR:feature/ci-cpu-testing

Conversation

@cenamiller

Copy link
Copy Markdown

This PR adds some initial GitHub Actions continuous integration (CI) for MPAS-A. These workflows do automated build and correctness testing for Intel OneAPI, NVHPC, and GNU compilers on CPU.

This is a subset of the testing that's been developed on the
github.com/NCAR/MPAS-Model-CI fork.

The goal of this testing is to catch build issues and validate that
the model output remains within the bounds of internal variability
using the Ensemble Consistency Test
(ECT/PyCECT; Price-Broncucia et al. 2025,
doi:10.5194/gmd-18-2349-2025).

These workflows:

  • Build MPAS-A in double precision with SMIOL I/O inside
    NCAR hpcdev Docker containers on GitHub-hosted runners.
    (PIO testing is available on the MPAS-Model-CI fork and
    will be included in future PRs)
  • Test three compiler families (GNU, Intel OneAPI, NVHPC)
    with two MPI implementations each (MPICH and OpenMPI)
  • Validate correctness by running 3 perturbed ensemble
    members and comparing against a previously generated
    200-member PyCECT ensemble summary
  • Update CI status badges in README.md

Test case data and ECT ensemble summaries are still hosted as
GitHub release assets on NCAR/MPAS-Model-CI. The
DATA_REPOSITORY variable in .github/ci-config.env
controls where data is downloaded from.

File descriptions:

  • .github/ci-config.env — central CI configuration
  • .github/actions/ — 9 composite actions (build-mpas,
    download-testdata, resolve-container, run-mpas,
    run-perturb-mpas, validate-ect, mpas-version,
    print-mpas-logs, ect-summary)
  • .github/workflows/_test-compiler.yml — reusable CPU
    build + ECT validation workflow
  • .github/workflows/test-{gcc,intel,nvhpc}-{mpich, openmpi}.yml — 6 caller workflows
  • .github/data/ect_excluded_vars.txt — ECT variable
    exclusion list
  • README.md — CI status badges

Developed in NCAR/MPAS-Model-CI. Cursor assistance.

Add the GitHub Actions CI infrastructure for
MPAS-Atmosphere CPU testing. This includes:

- ci-config.env: central configuration for container
  images, compiler mappings, MPI flags, test data release
  tags, and ECT parameters. Test data is hosted on
  NCAR/MPAS-Model-CI GitHub releases.
- Composite actions for building MPAS (build-mpas),
  downloading test data archives (download-testdata),
  resolving container images (resolve-container), running
  MPAS (run-mpas), running perturbed ensemble members for
  ECT (run-perturb-mpas), validating with PyCECT
  (validate-ect), extracting the MPAS version from
  Registry.xml (mpas-version), printing per-rank log files
  (print-mpas-logs), and generating consolidated ECT
  summary tables (ect-summary).
- ECT variable exclusion list.

Developed in NCAR/MPAS-Model-CI. Cursor assistance.
Add GitHub Actions workflows that build MPAS-Atmosphere
and validate correctness using the Ensemble Consistency
Test (PyCECT) across three compiler families and two MPI
implementations:

- _test-compiler.yml: reusable workflow (build ->
  3 perturbed ensemble members in parallel -> PyCECT
  validation -> artifact cleanup)
- Per-compiler callers: GCC+MPICH, GCC+OpenMPI,
  Intel+MPICH, Intel+OpenMPI, NVHPC+MPICH, NVHPC+OpenMPI

All callers run automatically on push/PR to master,
develop, and feature/ci-cpu-testing.

All builds run on GitHub-hosted ubuntu-latest runners
inside NCAR hpcdev Docker containers. Test data and ECT
ensemble summaries are downloaded from NCAR/MPAS-Model-CI
GitHub releases.

ECT reference: Price-Broncucia et al. (2025),
doi:10.5194/gmd-18-2349-2025

Developed in NCAR/MPAS-Model-CI. Cursor assistance.
Add a CI Status section to the top of README.md showing
ECT validation badges for all six compiler+MPI
combinations (GCC, Intel, NVHPC x MPICH, OpenMPI).
Badges link to the GitHub Actions workflow runs.

Cursor assistance.
@cenamiller

cenamiller commented Jun 10, 2026

Copy link
Copy Markdown
Author

I think the tests will be able to start running against 'develop' PRs once these workflows are on the 'develop' branch, and we shouldn't need to add everything to the master branch yet like I told you I was afraid we had to do. (Caveat: parts of the github actions UI might not show up until the workflows are on the default branch, but I think we can still do testing and make sure things are working how they should without that until the next release)

*pull_request and push aren't listed as needing to be on the default branch, just the merge ref https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows

Prevent GITHUB_TOKEN from persisting in .git/config
after checkout. Only the build job's checkouts had this
set; add it to config, ect-run, and ect-validate jobs.

Cursor assistance.
Move actions:write from workflow-level to the cleanup
job, which is the only job that needs it (for deleting
temporary artifacts). Other jobs now run with only
contents:read.

Cursor assistance.
Pin all GitHub Actions (checkout, upload-artifact,
download-artifact, cache, setup-python) to full commit
SHAs instead of mutable version tags.

Pin PyCECT clone to a verified commit SHA (3.3.1 tag)
and add a commit verification check in validate-ect.

Cursor assistance.
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