Skip to content

Testing and Validation #15

Testing and Validation

Testing and Validation #15

# Test changes that have been pushed to the master and dev branches
name: Testing and Validation
# 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_unit:
# 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:
- name: Checkout the commit
uses: actions/checkout@v2
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_unit test_geopackage"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
- name: Run Tests
run: ./cmake_build/test/test_unit
timeout-minutes: 15
- name: Run GeoPackage Tests
run: |
# Container underflow report is a false positive, from a build with instrumentation
# disabled in one file where it hangs the compiler (ngen#567)
export ASAN_OPTIONS=${ASAN_OPTIONS}:detect_container_overflow=0
./cmake_build/test/test_geopackage
timeout-minutes: 15
- name: Clean Up
uses: ./.github/actions/clean-build
# Test PET
test_pet:
# 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 PET Submodule
id: submod_build_5
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/evapotranspiration/evapotranspiration"
targets: "petbmi"
- name: Build PET Tests
uses: ./.github/actions/ngen-build
with:
targets: "compare_pet"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
- name: Run Tests
run: ./cmake_build/test/compare_pet
timeout-minutes: 15
- name: Clean Up
uses: ./.github/actions/clean-build
# Test MPI remote nexus behavior in linux
test_mpi_remote_nexus:
# The type of runner that the job will run on
strategy:
matrix:
os: [ubuntu-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 Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_remote_nexus"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
use_mpi: 'ON'
- name: run_tests
run: mpirun --allow-run-as-root -np 2 ./cmake_build/test/test_remote_nexus
timeout-minutes: 15
- name: Clean Up
uses: ./.github/actions/clean-build
# Run BMI C++ tests in linux environment
test_bmi_cpp:
# 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
#make sure cxx bmi is initialized/ready
- uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/bmi-cxx/"
- name: Build Submodules
id: submod_build
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_cpp/"
targets: "testbmicppmodel"
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_bmi_cpp"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
- name: Run Tests
run: |
cd ./cmake_build/test/
./test_bmi_cpp
cd ../../
timeout-minutes: 15
- name: Clean Up Unit Test Build
uses: ./.github/actions/clean-build
- name: Clean Up Submodule Build
uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build.outputs.build-dir }}
# Run BMI C tests in linux environment, and separating to isolate
test_bmi_c:
# 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 Submodules
id: submod_build
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_c"
targets: "testbmicmodel"
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_bmi_c"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
bmi_c: 'ON'
#Is this required for this test???
use_python: 'ON'
- name: run_bmi_c_tests
run: |
cd ./cmake_build/test/
./test_bmi_c
cd ../../
timeout-minutes: 15
- name: Clean Up Unit Test Build
uses: ./.github/actions/clean-build
- name: Clean Up Submodule Build
uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build.outputs.build-dir }}
# As with the BMI C ubuntu job, separate Fortran in linux tests to keep setups clean and cause of failures clear.
test_bmi_fortran:
# 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 Submodules
id: submod_build_1
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_fortran/"
- name: Build Submodules
id: submod_build_2
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/iso_c_fortran_bmi/"
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_bmi_fortran"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
#is this required for this test?
bmi_c: 'ON'
bmi_fortran: 'ON'
- name: Run Unit Tests
run: |
cd ./cmake_build/test/
./test_bmi_fortran
cd ../../
timeout-minutes: 15
- name: Clean Up Unit Test Build
uses: ./.github/actions/clean-build
- name: Clean Up Submodule Build
uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_1.outputs.build-dir }}
- uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_2.outputs.build-dir }}
# As with the BMI C ubuntu job, separate Python in linux tests to keep setups clean and cause of failures clear.
test_bmi_python:
# 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 repository under $GITHUB_WORKSPACE, so job can access it
- uses: actions/checkout@v2
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_bmi_python"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
#is this required for this test?
bmi_c: 'ON'
use_python: 'ON'
additional_python_requirements: 'extern/test_bmi_py/requirements.txt'
- name: run_bmi_python_tests
run: |
cd ./cmake_build/test/
./test_bmi_python
cd ../../
timeout-minutes: 15
- name: Clean Up Unit Test Build
uses: ./.github/actions/clean-build
# As with the BMI C ubuntu job, separate multi BMI in linux tests to keep setups clean and cause of failures clear.
test_bmi_multi:
# 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 Submodules
id: submod_build_1
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_fortran/"
- name: Build Submodules
id: submod_build_2
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/iso_c_fortran_bmi/"
- name: Build Submodules
id: submod_build_3
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_c/"
targets: "testbmicmodel"
#make sure cxx bmi is initialized/ready
- uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/bmi-cxx/"
- name: Build Submodules
id: submod_build_4
uses: ./.github/actions/ngen-submod-build
with:
mod-dir: "extern/test_bmi_cpp/"
targets: "testbmicppmodel"
- name: Build Unit Tests
uses: ./.github/actions/ngen-build
with:
targets: "test_bmi_multi"
build-cores: ${{ env.LINUX_NUM_PROC_CORES }}
bmi_c: 'ON'
bmi_fortran: 'ON'
use_python: 'ON'
additional_python_requirements: 'extern/test_bmi_py/requirements.txt'
- name: Run Unit Tests
run: ./cmake_build/test/test_bmi_multi
timeout-minutes: 15
- name: Clean Up Unit Test Build
uses: ./.github/actions/clean-build
- name: Clean Up Submodule Build
uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_1.outputs.build-dir }}
- uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_2.outputs.build-dir }}
- uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_3.outputs.build-dir }}
- uses: ./.github/actions/clean-build
with:
build-dir: ${{ steps.submod_build_4.outputs.build-dir }}
# TODO: fails due to compilation error, at least in large part due to use of POSIX functions not supported on Windows.
# TODO: Need to determine whether Windows support (in particular, development environment support) is necessary.
# test_unit_windows_latest:
# # The type of runner that the job will run on
# runs-on: windows-latest
#
# # 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: git submodule
# run: git submodule update --init --recursive -- test/googletest
#
# - name: cmake_init_build
# run: cmake -B cmake_build -S .
#
# - name: build_tests
# run: cmake --build cmake_build --target test_unit
# timeout-minutes: 15
#
# - name: run_tests
# run: ./cmake_build/test/test_unit
# timeout-minutes: 15
#
# - name: clean_build
# run: cmake --build cmake_build --target clean
#
# - name: cleanup_dir
# run: rm -rf cmake_build