GitHub Actions CI: CPU compilers with ECT validation - #1469
cenamiller wants to merge 8 commits into
Conversation
|
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 |
|
Thanks for this work, @cenamiller! It will be a much needed addition to the MPAS dev workflow. Here are my suggestions so far - but let's check with @mgduda first before going ahead with proposed changes.
|
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.
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.
Derive ECT release tags from the MPAS major/minor version so compatible patch releases use the same ensemble summary and spin-up restart. Assisted-by: Claude
0f773fd to
19b169e
Compare
Resolve ECT versions from the source under test, fail when required artifacts or restart data are missing, and retain failed ECT summaries. Guard optional container setup, verify NVHPC Makefile edits, and remove the unused run-mpas action. Assisted-by: Claude
|
Hi @abishekg7, thank you for the comments!
|
|
@abishekg7 Hi again, I addressed some of your other concerns with 8c35e70
|
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:
NCAR
hpcdevDocker containers on GitHub-hosted runners.(PIO testing is available on the MPAS-Model-CI fork and
will be included in future PRs)
with two MPI implementations each (MPICH and OpenMPI)
members and comparing against a previously generated
200-member PyCECT ensemble summary
Test case data and ECT ensemble summaries are still hosted as
GitHub release assets on
NCAR/MPAS-Model-CI. TheDATA_REPOSITORYvariable in.github/ci-config.envcontrols 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 CPUbuild + ECT validation workflow
.github/workflows/test-{gcc,intel,nvhpc}-{mpich, openmpi}.yml— 6 caller workflows.github/data/ect_excluded_vars.txt— ECT variableexclusion list
README.md— CI status badgesDeveloped in
NCAR/MPAS-Model-CI. Cursor assistance.