Repository navigation
GitHub Actions CI: CPU compilers with ECT validation - #1469
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
|
|
Hi @abishekg7 and @mgduda, I've reduced the number/frequency of tests this initial CI PR contains like we discussed. The tests are more limited in scope now, just a CPU build and ensemble consistency test with GNU, Intel OneAPI, and NVHPC. Only MPICH is used, but OpenMPI remains an easy option for the future. The events that would trigger the tests are opening a PR against 'develop' or when there's a push on 'master' (like a new release). The tests can be triggered for old PRs by pushing a new commit to them, or by closing and reopening the PR. I also removed the CI badges section of the README for now, but it will be easy to add back once we decide which tests we want to have reporting their status on the README. |
|
@cenamiller I had merged this PR locally to |
|
This PR has been replaced by PR #1524. |
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 MPICH. (OpenMPI testing is available on the
MPAS-Model-CI fork and will be included in future PRs)
All run on new PRs against
develop(or when someone pushesa new commit to an open PR) and on push to
master.Only the GNU + MPICH test also runs on push to
develop.members and comparing against a previously generated
200-member PyCECT ensemble summary
README.md was reverted to base. CI status badges can be added
as a future feature.
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.yml—3 caller workflows
.github/data/ect_excluded_vars.txt— ECT variableexclusion list
Developed in
NCAR/MPAS-Model-CI. Claude assistance.