Module Integration Tests #6
This file contains 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
name: Module Integration Tests | |
# Controls when the action will run. | |
on: | |
push: | |
branches: [ master, dev, notreal ] | |
pull_request: | |
branches: [ master, dev, notreal ] | |
workflow_dispatch: | |
env: | |
# Obtained from https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources | |
# TODO: add something later that can check the runners for hyperthreading | |
LINUX_NUM_PROC_CORES: 2 | |
MACOS_NUM_PROC_CORES: 3 | |
ASAN_OPTIONS: detect_leaks=false | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
# Run general unit tests in linux environment | |
test_surfacebmi_plus_cfe: | |
# The type of runner that the job will run on | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- uses: actions/checkout@v2 | |
- name: Build Surfacebmi | |
id: submod_build_1 | |
uses: ./.github/actions/ngen-submod-build | |
with: | |
mod-dir: " extern/noah-owp-modular/" | |
targets: "surfacebmi" | |
- name: Build ISO C Fortran BMI | |
id: submod_build_2 | |
uses: ./.github/actions/ngen-submod-build | |
with: | |
mod-dir: "extern/iso_c_fortran_bmi/" | |
- name: Build CFE | |
id: submod_build_3 | |
uses: ./.github/actions/ngen-submod-build | |
with: | |
mod-dir: "extern/cfe/" | |
targets: "cfebmi" | |
- name: Build PET | |
id: submod_build_5 | |
uses: ./.github/actions/ngen-submod-build | |
with: | |
mod-dir: "extern/evapotranspiration/evapotranspiration" | |
targets: "petbmi" | |
- name: Build SLoTH | |
id: submod_build_6 | |
uses: ./.github/actions/ngen-submod-build | |
with: | |
mod-dir: "extern/sloth/" | |
targets: "slothmodel" | |
- name: Build Ngen | |
uses: ./.github/actions/ngen-build | |
with: | |
targets: "ngen" | |
build-cores: ${{ env.LINUX_NUM_PROC_CORES }} | |
#is this required for this test? | |
bmi_c: 'ON' | |
bmi_fortran: 'ON' | |
timeout-minutes: 15 | |
- name: Run surfacebmi plus cfebmi | |
run: | | |
inputfile='data/example_bmi_multi_realization_config.json' | |
./cmake_build/ngen data/catchment_data.geojson "cat-27" data/nexus_data.geojson "nex-26" $inputfile | |
- name: Run surfacebmi, cfebmi and petbmi | |
run: | | |
inputfile='data/example_bmi_multi_realization_config_w_noah_pet_cfe.json' | |
./cmake_build/ngen data/catchment_data.geojson "cat-27" data/nexus_data.geojson "nex-26" $inputfile | |
# Run t-route/pybind integration test | |
test_troute_integration: | |
# The type of runner that the job will run on | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- uses: actions/checkout@v2 | |
- name: Build Ngen | |
uses: ./.github/actions/ngen-build | |
with: | |
targets: "test_routing_pybind" | |
build-cores: ${{ env.LINUX_NUM_PROC_CORES }} | |
#is this required for this test? | |
use_python: 'ON' | |
use_troute: 'ON' | |
timeout-minutes: 15 | |
# Disabling this cache for the time being for a few reasons | |
# 1) t-route build/install can be tricky without pre-cythonized sources | |
# 2) may not want to use a cached version of t-route if we are testing its integration | |
# we want to use the latest code in the repo and make sure it works...a cached version | |
# wouldn't be good for that... | |
#- name: Cache troute dependency | |
# id: cache-linux-troute-dep | |
# uses: actions/cache@v1 | |
# with: | |
# path: .venv | |
# key: linux-troute-dep-fixed | |
- name: Checkout t-route (latest master) | |
uses: actions/checkout@v3 | |
with: | |
repository: NOAA-OWP/t-route | |
path: t-route | |
#This step should come after ngen build??? | |
- name: Configure Fortran Compiler | |
run: | | |
if [ ${{ runner.os }} == 'macOS' ] | |
then | |
sudo ln -s $(which gfortran-11) $(dirname $(which gfortran-11))/gfortran | |
export FC=gfortran-11 | |
export F90=gfortran-11 | |
fi | |
- name: Build T-route Dependency | |
#if: steps.cache-linux-troute-dep.outputs.cache-hit != 'true' | |
#MacOS pybind has issues with egg links, so install all packages without egg links on that os | |
run: | | |
python3 -m venv .venv | |
. .venv/bin/activate | |
cd t-route | |
pip install 'pip>=23.0,<23.1' | |
pip install -U setuptools | |
pip install -r requirements.txt | |
pip install deprecated 'pyarrow==11.0.0' tables geopandas numpy | |
if [ ${{ runner.os }} == 'macOS' ] | |
then | |
export LIBRARY_PATH=/usr/local/lib/gcc/11/ | |
export LD_LIBRARY_PATH=/usr/local/lib/gcc/11/ | |
fi | |
sed -i.bak 's/NETCDF}"/NETCDF}\/include"/' compiler.sh | |
export FC=gfortran | |
export F90=gfortran | |
./compiler.sh | |
cd src | |
pip install troute-nwm/ | |
pip install --install-option="--use-cython" troute-network/ | |
pip install --install-option="--use-cython" troute-routing/ | |
deactivate | |
- name: Run test | |
run: | | |
. .venv/bin/activate | |
./cmake_build/test/test_routing_pybind | |
deactivate |