2. Automated Testing¶
GeoGate uses GitHub Actions to build the Catalyst and Python plugins from scratch against a Spack-managed toolchain, run a small ESMX-driven coupled case (DATM + DOCN + GeoGate), and upload the run’s logs/output as artifacts. The workflow definitions live under .github/workflows, with the composite build/run steps factored out into .github/actions.
2.1. GitHub Actions Workflows¶
test_catalyst_osmesa.yaml / test_catalyst_egl.yaml: build GeoGate with the Catalyst plugin, one per headless GL backend. Both run the same
config/catalyst/esmxRun.yaml, which visualizes DATM/DOCN fields with the Catalyst scripts in that directory.test_python.yaml: builds GeoGate with the Python plugin instead, and runs
config/python/esmxRun.yaml: a two-instance GeoGate pipeline (COP1 -> COP2) that exercises multiple incoming connections, a two-way Python script with an MPI-aware spatial reduction, and a one-way Python script, all in one case.
2.2. Composite Actions Pipeline¶
The workflows share four composite actions under .github/actions, run in this order:
create_env: builds/caches the Spack environment (ESMF, Conduit, libcatalyst, ParaView, all with+python). Workflows that use the same versions and GL backend share the same cache.install_geogate: configures and builds GeoGate itself, withuse_python/use_catalysttoggling which plugin(s) get compiled in.install_cdeps: builds the DATM/DOCN data components GeoGate couples against.case_run: assembles the ESMX executable, links the config’sesmxRun.yaml, and runs it withmpirun. Takesconfig_dir(required) to pick whichconfig/<config_dir>/to use, andesmx_np(default6) for the PET count.
Note
test_python.yaml adds one extra step between install_geogate and install_cdeps to install matplotlib/mpi4py into the same Spack-provided Python that GeoGate’s embedded interpreter loads. After activating the Spack environment, the first python3 on PATH is Spack’s own internal bootstrap interpreter, not that Python, so its install prefix is resolved explicitly instead.
2.3. Configuration Layout¶
config/
├── shared/ # DATM/DOCN runtime config used by every test
├── catalyst/ # esmxRun.yaml + pv_*.py for the two Catalyst workflows
└── python/ # esmxRun.yaml + geogate_modify.py/geogate_plot.py for the Python workflow
case_run’s config_dir input picks the test-specific directory; shared/ files are always symlinked in regardless of which test is running. Every esmxRun.yaml is named the same across directories – the directory is what disambiguates them, not the filename.