Testing and Validation #17
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
# 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 |