Skip to content

Revision of the manual #332

Revision of the manual

Revision of the manual #332

Workflow file for this run

# -----------------------------------------------------------------------------
#
# Copyright (c) 2017 Sam Cox, Roberto Sommariva
#
# This file is part of the AtChem2 software package.
#
# This file is covered by the MIT license which can be found in the file
# LICENSE.md at the top level of the AtChem2 distribution.
#
# -----------------------------------------------------------------------------
# Workflow for the continuous integration (CI) of AtChem2, using
# Github Actions and Codecov
#
# Acknowledgements: J. Allsopp
# -------------------------------------------------------------------- #
name: AtChem2 CI
# ------------------------------ EVENTS ------------------------------ #
# Controls when the workflow is activated
on:
# Triggers when a pull request is created or updated (only on the
# master branch)
pull_request:
branches: [ master ]
# Triggers when a push is made to the master branch (either by
# merging a pull request, or by direct commit)
push:
branches: [ master ]
# Run manually from the Actions tab
workflow_dispatch:
# ------------------------------ JOBS ------------------------------ #
# This workflow contains a single job called `ci_testing` which
# compiles the AtChem2 model, runs the Testsuite, and checks the code
# coverage using Codecov (https://app.codecov.io/gh/AtChem/AtChem2)
jobs:
ci_testing:
# The job runs on two versions of linux (ubuntu) and macos runner
# images, with three versions of gnu fortran -- the runner images
# are described here: https://github.com/actions/runner-images
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-22.04, macos-11, macos-12]
fortran: [9, 10, 11]
exclude: # TODO: gfortran-9 does not work on macos-12
- os: macos-12
fortran: 9
fail-fast: false
# -------------------------------------------------------------
# Sequence of tasks to be executed as part of the `ci_testing` job:
# 1. Checkout the repository
# 2. Install gfortran, AtChem2 dependencies
# 3. Compile AtChem2
# 4. Run the Testsuite with default settings
# 5. Recompile AtChem2, run unit and model tests for Codecov
steps:
# -------------------------------------------------------------
# (1) Checkout the repository under $GITHUB_WORKSPACE
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 2
# -------------------------------------------------------------
# (2) Install gfortran, if not supplied with the runner image,
# and the AtChem2 dependencies: CVODE, openlibm, numdiff, FRUIT
# gfortran on ubuntu
- name: Install gfortran-11 (ubuntu-20.04)
if: matrix.os == 'ubuntu-20.04' && matrix.fortran == 11
run: sudo apt-get install gfortran-11
# gfortran on macos
- name: Install gfortran-9 (macos-11)
if: matrix.os == 'macos-11' && matrix.fortran == 9
run: brew install gcc@${{ matrix.fortran }}
- name: Install gfortran-9 and gfortran-10 (macos-12)
if: matrix.os == 'macos-12' && (matrix.fortran == 9 || matrix.fortran == 10)
run: brew install gcc@${{ matrix.fortran }}
# AtChem2 dependencies
- name: Install CVODE
run: ./tools/install/install_cvode.sh $PWD $(which gfortran-${{ matrix.fortran }})
- name: Install openlibm
run: ./tools/install/install_openlibm.sh $PWD
- name: Install numdiff
run: ./tools/install/install_numdiff.sh $PWD
- name: Install FRUIT
run: sudo ./tools/install/install_fruit.sh $PWD
# -------------------------------------------------------------
# (3) Compile AtChem2 using the standard compilation flags
- name: Build AtChem2
# Set $FORT_VERSION for use with the `Makefile`, which is
# called by the `build_atchem2.sh` script
env:
FORT_VERSION: ${{ matrix.fortran }}
run: |
cp tools/install/Makefile.skel Makefile
./build/build_atchem2.sh ./model/mechanism.fac ./model/configuration/ ./mcm/
# macos only
if [ $RUNNER_OS != "Linux" ] ; then
install_name_tool -change libopenlibm.4.dylib $PWD/openlibm-0.8.1/libopenlibm.4.dylib atchem2 ;
install_name_tool -change @rpath/libsundials_cvode.2.dylib $PWD/cvode/lib/libsundials_cvode.dylib atchem2 ;
install_name_tool -change @rpath/libsundials_fnvecserial.2.dylib $PWD/cvode/lib/libsundials_fnvecserial.dylib atchem2 ;
install_name_tool -change @rpath/libsundials_nvecserial.2.dylib $PWD/cvode/lib/libsundials_nvecserial.dylib atchem2 ;
fi
# -------------------------------------------------------------
# (4) Run the Testsuite using the standard compilation flags and
# default settings: indent, style, unit, model tests
- name: Indent and Style tests
run: |
make indenttest
make styletest
- name: Unit and Model tests
# Set $FORT_VERSION for use with the `Makefile`
env:
FORT_VERSION: ${{ matrix.fortran }}
run: |
export PATH=$PATH:$PWD/numdiff/bin
make unittests
make oldtests # NB: oldtests will eventually be merged into modeltests
#make modeltests # TODO: temporarily deactivated (pass on linux, fail on macos)
# -------------------------------------------------------------
# (5) Recompile AtChem2 using the code coverage compilation
# flags, then upload the gcov files to Codecov
- name: Unit and Model tests (x Codecov)
if: matrix.os == 'ubuntu-22.04' && matrix.fortran == 11
# Set $FORT_VERSION for use with the `Makefile`
env:
FORT_VERSION: ${{ matrix.fortran }}
run: |
export PATH=$PATH:$PWD/numdiff/bin
make clean
# unit tests
make unittests CCOV=true
mv tests/unit_tests/*.gc* ./ # needed for GCC-11 handling of *.gcda, *.gcna files
# model tests
make modeltests CCOV=true # run only the new Testsuite
- name: Upload coverage reports to Codecov
if: matrix.os == 'ubuntu-22.04' && matrix.fortran == 11
uses: codecov/codecov-action@v3
with:
gcov: true