GitHub Actions CI: CPU compilers with ECT validation#1469
Open
cenamiller wants to merge 6 commits into
Open
Conversation
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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.