diff --git a/.github/actions/setup-amici-cpp/action.yml b/.github/actions/setup-amici-cpp/action.yml new file mode 100644 index 0000000000..09ec9311bf --- /dev/null +++ b/.github/actions/setup-amici-cpp/action.yml @@ -0,0 +1,44 @@ +name: Set up AMICI C++ +description: | + Build the AMICI C++ interface and set things for for coverage analysis. + (Currently ubuntu-only). + +runs: + using: "composite" + steps: + # BioNetGen Path + - run: echo "BNGPATH=${GITHUB_WORKSPACE}/ThirdParty/BioNetGen-2.7.0" >> $GITHUB_ENV + shell: bash + + # use all available cores + - run: echo "AMICI_PARALLEL_COMPILE=" >> $GITHUB_ENV + shell: bash + + # enable coverage + - run: echo "ENABLE_GCOV_COVERAGE=TRUE" >> $GITHUB_ENV + shell: bash + + - name: Set up Sonar tools + uses: ./.github/actions/setup-sonar-tools + + - name: Install apt dependencies + uses: ./.github/actions/install-apt-dependencies + + - name: Install additional apt dependencies + run: | + sudo apt-get update \ + && sudo apt-get install -y \ + cmake \ + python3-venv \ + lcov + shell: bash + + - name: Build AMICI dependencies + run: scripts/buildDependencies.sh + shell: bash + + - name: Build AMICI + run: scripts/buildAmici.sh + shell: bash + env: + CI_SONARCLOUD: "TRUE" diff --git a/.github/workflows/test_python_cplusplus.yml b/.github/workflows/test_python_cplusplus.yml index acc8759a3c..860e1d6218 100644 --- a/.github/workflows/test_python_cplusplus.yml +++ b/.github/workflows/test_python_cplusplus.yml @@ -8,20 +8,13 @@ on: - master jobs: - build: - name: Tests Ubuntu - - # TODO: prepare image with more deps preinstalled + ubuntu-cpp-python-tests: + name: C++/Python tests Ubuntu runs-on: ubuntu-22.04 - env: - AMICI_PARALLEL_COMPILE: "" - ENABLE_GCOV_COVERAGE: "TRUE" - CI_SONARCLOUD: "TRUE" - strategy: matrix: - python-version: [ 3.9 ] + python-version: [ "3.9" ] steps: - name: Set up Python ${{ matrix.python-version }} @@ -33,28 +26,9 @@ jobs: - run: git fetch --prune --unshallow - run: echo "AMICI_DIR=$(pwd)" >> $GITHUB_ENV - - run: echo "BNGPATH=${GITHUB_WORKSPACE}/ThirdParty/BioNetGen-2.7.0" >> $GITHUB_ENV - - - name: Set up Sonar tools - uses: ./.github/actions/setup-sonar-tools - - - name: Install apt dependencies - uses: ./.github/actions/install-apt-dependencies - - # install amici dependencies - - name: apt - run: | - sudo apt-get update \ - && sudo apt-get install -y \ - cmake \ - python3-venv \ - lcov - - name: Build AMICI dependencies - run: scripts/buildDependencies.sh - - - name: Build AMICI - run: CI_SONARCLOUD=TRUE scripts/buildAmici.sh + - name: Set up AMICI C++ libraries + uses: ./.github/actions/setup-amici-cpp - name: C++ tests run: scripts/run-cpp-tests.sh @@ -62,19 +36,20 @@ jobs: - name: Install python package run: scripts/installAmiciSource.sh - - name: Python tests + - name: Python tests (part 1) run: | source build/venv/bin/activate \ && pytest \ --ignore-glob=*petab* \ --ignore-glob=*test_splines.py \ + --ignore-glob=*test_splines_short.py \ + --ignore-glob=*test_pysb.py \ --cov=amici \ --cov-report=xml:"${AMICI_DIR}/build/coverage_py.xml" \ --cov-append \ --durations=10 \ ${AMICI_DIR}/python/tests - - name: Python tests splines if: ${{ github.base_ref == 'master' || github.event.merge_group.base_ref == 'master'}} run: | @@ -86,16 +61,77 @@ jobs: --durations=10 \ ${AMICI_DIR}/python/tests/test_splines.py - - name: Install notebook dependencies + - name: Codecov Python + uses: codecov/codecov-action@v3.1.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: build/coverage_py.xml + flags: python + fail_ci_if_error: true + verbose: true + + - name: Capture coverage info (lcov) run: | - source build/venv/bin/activate \ - && pip install jax[cpu] + lcov --compat-libtool --no-external \ + -d ${AMICI_DIR}/build/CMakeFiles/amici.dir/src \ + -b ${AMICI_DIR} -c -o coverage_cpp.info \ + && lcov --compat-libtool --no-external \ + -d ${AMICI_DIR}/python/sdist/build/temp_amici/CMakeFiles/amici.dir/src \ + -b ${AMICI_DIR}/python/sdist -c -o coverage_py.info \ + && lcov -a coverage_cpp.info -a coverage_py.info -o coverage.info - - name: example notebooks - run: scripts/runNotebook.sh python/examples/example_*/ + - name: Codecov CPP + uses: codecov/codecov-action@v3.1.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: coverage.info + flags: cpp + fail_ci_if_error: true - - name: doc notebooks - run: scripts/runNotebook.sh documentation/GettingStarted.ipynb + - name: Run sonar-scanner + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: | + sonar-scanner \ + -Dsonar.cfamily.build-wrapper-output=bw-output \ + -Dsonar.projectVersion="$(git describe --abbrev=4 --dirty=-dirty --always --tags | tr -d '\n')" + + ubuntu-python-tests: + name: Python tests Ubuntu + runs-on: ubuntu-22.04 + + strategy: + matrix: + python-version: [ "3.9" ] + + steps: + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - uses: actions/checkout@v3 + - run: git fetch --prune --unshallow + + - run: echo "AMICI_DIR=$(pwd)" >> $GITHUB_ENV + + - name: Set up AMICI C++ libraries + uses: ./.github/actions/setup-amici-cpp + + - name: Install python package + run: scripts/installAmiciSource.sh + + - name: Python tests + run: | + source build/venv/bin/activate \ + && pytest \ + --cov=amici \ + --cov-report=xml:"${AMICI_DIR}/build/coverage_py.xml" \ + --cov-append \ + --durations=10 \ + ${AMICI_DIR}/python/tests/test_pysb.py \ + ${AMICI_DIR}/python/tests/test_splines_short.py - name: Codecov Python uses: codecov/codecov-action@v3.1.0 @@ -106,7 +142,7 @@ jobs: fail_ci_if_error: true verbose: true - - name: lcov + - name: Capture coverage info (lcov) run: | lcov --compat-libtool --no-external \ -d ${AMICI_DIR}/build/CMakeFiles/amici.dir/src \ @@ -121,7 +157,7 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} file: coverage.info - flags: cpp + flags: cpp_python fail_ci_if_error: true - name: Run sonar-scanner @@ -133,6 +169,45 @@ jobs: -Dsonar.cfamily.build-wrapper-output=bw-output \ -Dsonar.projectVersion="$(git describe --abbrev=4 --dirty=-dirty --always --tags | tr -d '\n')" + + ubuntu-notebook-tests: + name: Notebook tests Ubuntu + runs-on: ubuntu-22.04 + + strategy: + matrix: + python-version: [ "3.9" ] + + steps: + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - uses: actions/checkout@v3 + - run: git fetch --prune --unshallow + + - run: echo "AMICI_DIR=$(pwd)" >> $GITHUB_ENV + + - name: Set up AMICI C++ libraries + uses: ./.github/actions/setup-amici-cpp + + - name: Install python package + run: scripts/installAmiciSource.sh + + - name: Install notebook dependencies + run: | + source build/venv/bin/activate \ + && pip install jax[cpu] + + - name: example notebooks + run: scripts/runNotebook.sh python/examples/example_*/ + + - name: doc notebooks + run: scripts/runNotebook.sh documentation/GettingStarted.ipynb + + # TODO: Include notebooks in coverage report + osx: name: Tests OSX runs-on: macos-latest