Skip to content

Commit

Permalink
add gh/ci eamxx standalone testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mahf708 authored Sep 23, 2024
1 parent 4a44b19 commit 09554e7
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 25 deletions.
57 changes: 57 additions & 0 deletions .github/workflows/eamxx-gh-ci-standalone.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: gh-standalone

on:
pull_request:
branches: [ master ]
paths:
# first, yes to these
- '.github/workflows/eamxx-gh-ci-standalone.yml'
- 'cime_config/**'
- 'components/eam/**'
- 'components/eamxx/**'
- 'components/elm/**'
- 'driver-moab/**'
- 'driver-mct/**'
- 'components/homme/**'
# second, no to these
- '!components/eam/docs/**'
- '!components/eam/mkdocs.yml'
- '!components/eamxx/docs/**'
- '!components/eamxx/mkdocs.yml'
- '!components/elm/docs/**'
- '!components/elm/mkdocs.yml'

workflow_dispatch:

jobs:

ci:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
test:
# TODO: add opt, dbg, etc. here once we stabilize testing
# TODO: note that currently, there is a fail in atm_proc test
# TODO: components/eamxx/src/share/tests/atm_process_tests.cpp
# TODO: REQUIRE (dag.has_unmet_dependencies());
# TODO: but only on some machines...
- sp
container:
image: ghcr.io/e3sm-project/containers-ghci:ghci-0.1.1

steps:
-
name: Checkout
uses: actions/checkout@v4
with:
show-progress: false
submodules: recursive
-
name: standalone
env:
SHELL: sh
run: |
# get rid of this extra line if we can?
git config --global safe.directory '*'
./components/eamxx/scripts/test-all-scream -m ghci-oci -t ${{ matrix.test }}
61 changes: 36 additions & 25 deletions components/eamxx/cmake/BuildCprnc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,43 @@
include (EkatUtils)
macro(BuildCprnc)

# Make sure this is built only once
if (NOT TARGET cprnc)
if (SCREAM_CIME_BUILD)
string (CONCAT MSG
"WARNING! By default, scream should not build tests in a CIME build,\n"
"and cprnc should only be built by scream in case tests are enabled.\n"
"If you explicitly requested tests to be on in a CIME build,\n"
"then you can discard this warning. Otherwise, please, contact developers.\n")
message("${MSG}")
endif()
set(BLDROOT ${PROJECT_BINARY_DIR}/externals/cprnc)
file(WRITE ${BLDROOT}/Macros.cmake
"
set(SCC ${CMAKE_C_COMPILER})
set(SFC ${CMAKE_Fortran_COMPILER})
set(FFLAGS \"${CMAKE_Fortran_FLAGS}\")
set(NETCDF_PATH ${NetCDF_Fortran_PATH})
"
)
set(SRC_ROOT ${SCREAM_BASE_DIR}/../..)
add_subdirectory(${SRC_ROOT}/cime/CIME/non_py/cprnc ${BLDROOT})
EkatDisableAllWarning(cprnc)

set(CPRNC_BINARY ${BLDROOT}/cprnc CACHE INTERNAL "")

# TODO: handle this more carefully and more gracefully in the future
# TODO: For now, it is just a hack to get going...
# find cprnc defined in machine entries
if(EXISTS "${CCSM_CPRNC}")
message(STATUS "Path ${CCSM_CPRNC} exists, so we will use it")
set(CPRNC_BINARY ${CCSM_CPRNC} CACHE INTERNAL "")
configure_file (${SCREAM_BASE_DIR}/cmake/CprncTest.cmake.in
${CMAKE_BINARY_DIR}/bin/CprncTest.cmake @ONLY)
else()
message(WARNING "Path ${CCSM_CPRNC} does not exist, so we will try to build it")
# Make sure this is built only once
if (NOT TARGET cprnc)
if (SCREAM_CIME_BUILD)
string (CONCAT MSG
"WARNING! By default, scream should not build tests in a CIME build,\n"
"and cprnc should only be built by scream in case tests are enabled.\n"
"If you explicitly requested tests to be on in a CIME build,\n"
"then you can discard this warning. Otherwise, please, contact developers.\n")
message("${MSG}")
endif()
set(BLDROOT ${PROJECT_BINARY_DIR}/externals/cprnc)
file(WRITE ${BLDROOT}/Macros.cmake
"
set(SCC ${CMAKE_C_COMPILER})
set(SFC ${CMAKE_Fortran_COMPILER})
set(FFLAGS \"${CMAKE_Fortran_FLAGS}\")
set(NETCDF_PATH ${NetCDF_Fortran_PATH})
"
)
set(SRC_ROOT ${SCREAM_BASE_DIR}/../..)
add_subdirectory(${SRC_ROOT}/cime/CIME/non_py/cprnc ${BLDROOT})
EkatDisableAllWarning(cprnc)

set(CPRNC_BINARY ${BLDROOT}/cprnc CACHE INTERNAL "")

configure_file (${SCREAM_BASE_DIR}/cmake/CprncTest.cmake.in
${CMAKE_BINARY_DIR}/bin/CprncTest.cmake @ONLY)
endif()
endif()
endmacro()
13 changes: 13 additions & 0 deletions components/eamxx/cmake/machine-files/ghci-oci.cmake
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
include(${CMAKE_CURRENT_LIST_DIR}/common.cmake)
common_setup()

set(CMAKE_Fortran_FLAGS "-Wno-maybe-uninitialized -Wno-unused-dummy-argument -fallow-argument-mismatch" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "-fvisibility-inlines-hidden -fmessage-length=0 -Wno-use-after-free -Wno-unused-variable -Wno-maybe-uninitialized" CACHE STRING "" FORCE)

# TODO: figure out a better way to handle this, e.g.,
# TODO: --map-by ppr:1:node:pe=1 doesn't work with mpich,
# TODO: but -map-by core:1:numa:hwthread=1 may work well?
# TODO: this will need to be handled in EKAT at some point
set(EKAT_MPI_NP_FLAG "-np" CACHE STRING "-np")

# TODO: hack in place to get eamxx to recognize CPRNC
# TODO: See note in BuildCprnc.cmake...
set(CCSM_CPRNC "/usr/local/packages/bin/cprnc")
4 changes: 4 additions & 0 deletions components/eamxx/scripts/machines_specs.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@
["mpicxx","mpifort","mpicc"],
"",
""),
"ghci-oci" : ([f"eval $({CIMEROOT}/CIME/Tools/get_case_env -c SMS.ne4pg2_ne4pg2.F2010-SCREAMv1.ghci-oci_gnu)"],
["mpicxx","mpifort","mpicc"],
"",
""),
"linux-generic" : ([],["mpicxx","mpifort","mpicc"],"", ""),
"linux-generic-debug" : ([],["mpicxx","mpifort","mpicc"],"", ""),
"linux-generic-serial" : ([],["mpicxx","mpifort","mpicc"],"", ""),
Expand Down

0 comments on commit 09554e7

Please sign in to comment.