Test of package installation & execution #1516
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
# DO NOT MODIFY THIS FILE, IT IS GENERATED. | |
# To make changes, modify '.git/../utils/test-install-base.yml' | |
# and run 'ygggha' | |
env: | |
BUILDDOCS: 0 | |
INSTALLC: 1 | |
INSTALLEXCEL: 1 | |
INSTALLFORTRAN: 1 | |
INSTALLIMAGES: 1 | |
INSTALLJULIA: 1 | |
INSTALLLPY: 0 | |
INSTALLMATLAB: 0 | |
INSTALLMPI: 1 | |
INSTALLOMP: 1 | |
INSTALLPYGMENTS: 1 | |
INSTALLPYTORCH: 1 | |
INSTALLR: 1 | |
INSTALLRMQ: 0 | |
INSTALLSBML: 0 | |
INSTALLSEQ: 1 | |
INSTALLTRIMESH: 1 | |
INSTALLZMQ: 1 | |
NUMPY: numpy | |
TMPDIR: /tmp/ | |
USEVIRTUALENV: 0 | |
YGG_GHA_JOB_ID_SUFFIX: null | |
jobs: | |
build_sdist: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Build source distribution | |
needs: | |
- test_pip | |
- test_conda | |
- test_rmq_pip | |
- test_rmq_conda | |
- test_stripped | |
- docs | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
submodules: true | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- name: Build sdist | |
run: 'python setup.py sdist | |
' | |
- name: Install sdist | |
run: 'python -m pip install dist/*.gz | |
python utils/setup_test_env.py deps pip | |
' | |
- name: Test sdist | |
run: 'ygginfo | |
pytest -m subset_rapidjson --import-mode=importlib tests | |
' | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: sdist | |
path: ./dist/* | |
build_wheels: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Build wheels on ${{ matrix.os }} | |
needs: | |
- test_pip | |
- test_conda | |
- test_rmq_pip | |
- test_rmq_conda | |
- test_stripped | |
- docs | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: runner.os == 'Linux' | |
name: (LINUX) Set up QEMU | |
uses: docker/setup-qemu-action@v1 | |
with: | |
platforms: all | |
- if: ${{ matrix.windows_arch == 'x86' }} | |
name: setup rtools for 32-bit | |
run: 'echo "PLAT=i686" >> $env:GITHUB_ENV | |
echo "PATH=$env:RTOOLS40_HOME\mingw32\bin;$env:PATH" >> $env:GITHUB_ENV | |
gfortran --version | |
' | |
- env: | |
CIBW_ARCHS_LINUX: ${{ matrix.linux_arch }} | |
CIBW_ARCHS_MACOS: ${{ matrix.mac_arch }} | |
CIBW_ARCHS_WINDOWS: ${{ matrix.windows_arch }} | |
name: Build wheels | |
uses: pypa/cibuildwheel@v2.12.1 | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
path: ./wheelhouse/*.whl | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: windows-2019 | |
windows_arch: x86 | |
- linux_arch: aarch64 | |
os: ubuntu-20.04 | |
- linux_arch: ppc64le | |
os: ubuntu-20.04 | |
linux_arch: | |
- auto | |
mac_arch: | |
- x86_64 arm64 | |
os: | |
- ubuntu-20.04 | |
- macOS-11 | |
- windows-2019 | |
windows_arch: | |
- AMD64 | |
docker: | |
if: (github.event_name == 'push' && startsWith(github.ref, 'refs/tags')) || github.event.schedule | |
== '0 10 1 * *' | |
name: Build and Publish Docker images | |
needs: | |
- test_pip | |
- test_conda | |
- test_rmq_pip | |
- test_rmq_conda | |
- test_stripped | |
- docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
- name: Build and push environment docker images for the new release | |
run: python utils/build_docker.py --push | |
- name: Build and push executable docker images for the new release | |
run: python utils/build_docker.py --push executable | |
docs: | |
env: | |
BUILDDOCS: 1 | |
name: Build the Docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- name: Install dependencies | |
run: python utils/setup_test_env.py install pip | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Build the docs | |
run: 'cd docs | |
make autodoc | |
cd ../ | |
' | |
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Publish docs to Github pages | |
uses: JamesIves/github-pages-deploy-action@3.7.1 | |
with: | |
BRANCH: gh-pages | |
FOLDER: docs/build/html/ | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
params: | |
name: Prepare test parameters | |
outputs: | |
os-versions: ${{ steps.set-os-versions.outputs.versions }} | |
runs-on: ubuntu-latest | |
steps: | |
- id: set-os-versions | |
run: echo "versions={\"ubuntu\":\"latest\", \"macos\":\"latest\", \"windows\":\"latest\"}" | |
>> $GITHUB_OUTPUT | |
schema: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Update the schema used by the model submission form | |
needs: | |
- test_pip | |
- test_conda | |
- test_rmq_pip | |
- test_rmq_conda | |
- test_stripped | |
- docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- name: Install dependencies | |
run: 'python -m pip install PyGithub | |
python utils/setup_test_env.py install pip | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Update the form | |
run: python utils/update_form_schema.py --token=${{ secrets.YGGDRASIL_UPDATE_TOKEN | |
}} | |
test_conda: | |
defaults: | |
run: | |
shell: bash -l {0} | |
name: Test (${{ matrix.python-version }}, ${{ matrix.os-base }}, ${{ matrix.install-method | |
}}, ${{ matrix.test-flags1 }}, ${{ matrix.test-flags2 }}), Install C = ${{ matrix.install-c | |
}} | |
needs: params | |
runs-on: ${{ matrix.os-base }}-${{ fromJSON(needs.params.outputs.os-versions)[matrix.os-base] | |
}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: matrix.install-c != true && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Set C installation based on matrix value | |
run: echo "INSTALLC=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-mpi != true | |
name: Set MPI installation based on matrix value | |
run: echo "INSTALLMPI=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-sbml == true | |
name: Set SBML installation based on matrix value | |
run: echo "INSTALLSBML=1" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- name: Store an ID string for the job | |
run: echo "YGG_GHA_JOB_ID=${{ runner.os }}-${{ matrix.install-method }}-py${{ | |
matrix.python-version }}-C${{ env.INSTALLC }}-RMQ${{ env.INSTALLRMQ }}${{ | |
env.YGG_GHA_JOB_ID_SUFFIX }}" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' | |
name: (WINDOWS) Patch TEMP/TMPDIR on Windows | |
run: 'echo "TMPDIR=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
echo "TEMP=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && startsWith(matrix.test-flags1, '--suite=examples') | |
name: (WINDOWS) Disable interpreted language example on Windows for speed | |
run: 'echo "TEST_FLAGS1_SUFFIX=--skip-languages python R julia" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLMPI | |
== 1 | |
name: (WINDOWS,PIP) Set up MSMPI | |
uses: mpi4py/setup-mpi@v1 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: Install R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 4.2.3 | |
- if: startsWith(runner.os, 'Linux') && matrix.install-method == 'pip' | |
name: (LINUX,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/.cache/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'macOS') && matrix.install-method == 'pip' | |
name: (MACOS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/Library/Caches/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'Windows') && matrix.install-method == 'pip' | |
name: (WINDOWS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~\AppData\Local\pip\Cache | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: matrix.install-method == 'pip' && (matrix.python-version != 3.7 || runner.os | |
!= 'macOS') | |
name: (PIP) Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- if: matrix.install-method == 'pip' && matrix.python-version == 3.7 && runner.os | |
== 'macOS' | |
name: (PIP) Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.16 | |
- if: matrix.install-method == 'pip' && env.INSTALLJULIA == 1 | |
name: (PIP) Set up Julia | |
uses: julia-actions/setup-julia@v1 | |
- if: env.INSTALLMATLAB == 1 && runner.os != 'Windows' | |
name: Set up Matlab | |
uses: matlab-actions/setup-matlab@v1 | |
- if: env.USEVIRTUALENV == 1 && matrix.install-method == 'pip' | |
name: (PIP) Set up Virtual Env | |
run: 'python utils/setup_test_env.py env virtualenv ${{ matrix.python-version | |
}} --env-name=test | |
echo "source activate ygg" > ~/.bashrc | |
source test/bin/activate | |
echo "$VIRTUAL_ENV" | |
echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV | |
echo "PATH=$VIRTUAL_ENV/bin:$PATH" >> $GITHUB_ENV | |
' | |
- if: matrix.install-method == 'pip' | |
name: (PIP) Install dependencies & package | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set the vcpkg root config value | |
run: yggconfig --vcpkg-dir=C:\\vcpkg | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: (WINDOWS,PIP) Update R requirements | |
run: ygginstall R --update-r-requirements | |
- if: matrix.install-method == 'pip' && runner.os == 'macOS' | |
name: (MACOS,PIP) Set C compiler to llvm clang | |
run: yggconfig --c-compiler=/usr/local/opt/llvm/bin/clang --c++-compiler=/usr/local/opt/llvm/bin/clang++ | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') | |
name: (CONDA) Set up miniconda base environment | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
channel-priority: strict | |
channels: conda-forge | |
miniforge-variant: Mambaforge | |
python-version: ${{ matrix.python-version }} | |
use-mamba: true | |
use-only-tar-bz2: true | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'Windows' && env.INSTALLC == 1 | |
name: (WINDOWS,CONDA) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- continue-on-error: true | |
id: conda_build | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Build package in base environment | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: ${{ steps.conda_build.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Build package in base environment (re-attempt) | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: runner.os == 'macOS' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: (MACOS,CONDA) Install old MacOSX SDK for compatibility with the conda | |
llvm (7) | |
run: ./utils/setup_old_mac_sdk.sh | |
- if: runner.os == 'Linux' && matrix.install-sbml == true | |
name: (LINUX) Install ncurses 5 for SBML runs with libroadrunner | |
run: sudo apt-get install libncurses5 libncurses5-dev libncursesw5-dev | |
- continue-on-error: true | |
id: conda_install | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Install dependencies & package from existing build | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: ${{ steps.conda_install.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Install dependencies & package from existing build (re-attempt) | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'macOS' | |
name: (MACOS,CONDA) Set allow_multiple_omp config | |
run: '[[ -d $CONDA_PREFIX/lib/clang/9.0.1 ]] && install_name_tool -change "@rpath/libc++abi.1.dylib" | |
"/usr/lib/libc++abi.1.dylib" $CONDA_PREFIX/lib/clang/9.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib | |
yggconfig --allow-multiple-omp | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Compile libraries | |
run: yggcompile | |
- if: runner.os == 'Windows' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: Run cmake test in command prompt (CONDA) | |
run: conda activate test && pytest --import-mode=importlib --ci --cov-append | |
--nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- if: runner.os == 'Windows' && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Run cmake test in command prompt (PIP) | |
run: pytest --import-mode=importlib --ci --cov-append --nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1 | |
name: Run tests (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} | |
timeout-minutes: 180 | |
- if: ${{ steps.test1.outcome == 'failure' }} | |
name: Re-run test failures (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} --last-failed --last-failed-no-failures=all | |
--second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1_script | |
if: ${{ contains(matrix.test-flags1, '--mpi-script') }} | |
name: Run generated test script (1st) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test1_script.outcome == 'failure' }} | |
name: Re-run test script failures (1st) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2 | |
if: ${{ matrix.test-flags2 != '' }} | |
name: Run tests (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} | |
timeout-minutes: 180 | |
- if: ${{ steps.test2.outcome == 'failure' }} | |
name: Re-run test failures (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2_script | |
if: ${{ matrix.test-flags2 != '' && contains(matrix.test-flags2, '--mpi-script') | |
}} | |
name: Run generated test script (2nd) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test2_script.outcome == 'failure' }} | |
name: Re-run test script failures (2nd) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
name: Combine coverage reports | |
run: '# ls .* | |
coverage combine --append | |
' | |
- if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Generate XML version of coverage report | |
run: '# ls .* | |
coverage xml -i | |
' | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
with: | |
name: ${{ env.YGG_GHA_JOB_ID }} | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- continue-on-error: true | |
if: ${{ always() }} | |
name: Download the last successful workflow environment log | |
uses: dawidd6/action-download-artifact@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: . | |
workflow: test-install.yml | |
- if: ${{ always() }} | |
name: Create a log of Python package versions | |
run: python utils/setup_test_env.py log | |
- if: ${{ success() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: new_environment_log.txt | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- install-c: true | |
install-method: conda | |
install-mpi: false | |
install-sbml: false | |
os-base: ubuntu | |
python-version: 3.6 | |
test-flags1: --long-running | |
test-flags2: '' | |
- install-c: true | |
install-method: conda | |
install-mpi: false | |
install-sbml: false | |
os-base: ubuntu | |
python-version: 3.8 | |
test-flags1: --long-running | |
test-flags2: '' | |
- install-c: true | |
install-method: conda | |
install-mpi: false | |
install-sbml: true | |
os-base: ubuntu | |
python-version: 3.9 | |
test-flags1: --long-running --remote-service | |
test-flags2: --suites examples --parametrize-language=sbml | |
- install-c: true | |
install-method: conda | |
install-mpi: false | |
install-sbml: false | |
os-base: macos | |
python-version: 3.8 | |
test-flags1: --suites examples top --parametrize-example-name=rpc_lesson3 | |
test-flags2: tests/test_tools.py | |
install-c: | |
- true | |
install-method: | |
- conda | |
install-mpi: | |
- true | |
install-sbml: | |
- false | |
os-base: | |
- ubuntu | |
- macos | |
- windows | |
python-version: | |
- 3.7 | |
test-flags1: | |
- --long-running --mpi-script=run_mpi.sh | |
test-flags2: | |
- --suite=examples --parametrize-example-name=backwards | |
max-parallel: 20 | |
test_pip: | |
name: Test (${{ matrix.python-version }}, ${{ matrix.os-base }}, ${{ matrix.install-method | |
}}, ${{ matrix.test-flags1 }}, ${{ matrix.test-flags2 }}), Install C = ${{ matrix.install-c | |
}} | |
needs: params | |
runs-on: ${{ matrix.os-base }}-${{ fromJSON(needs.params.outputs.os-versions)[matrix.os-base] | |
}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: matrix.install-c != true && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Set C installation based on matrix value | |
run: echo "INSTALLC=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-mpi != true | |
name: Set MPI installation based on matrix value | |
run: echo "INSTALLMPI=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-sbml == true | |
name: Set SBML installation based on matrix value | |
run: echo "INSTALLSBML=1" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- name: Store an ID string for the job | |
run: echo "YGG_GHA_JOB_ID=${{ runner.os }}-${{ matrix.install-method }}-py${{ | |
matrix.python-version }}-C${{ env.INSTALLC }}-RMQ${{ env.INSTALLRMQ }}${{ | |
env.YGG_GHA_JOB_ID_SUFFIX }}" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' | |
name: (WINDOWS) Patch TEMP/TMPDIR on Windows | |
run: 'echo "TMPDIR=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
echo "TEMP=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && startsWith(matrix.test-flags1, '--suite=examples') | |
name: (WINDOWS) Disable interpreted language example on Windows for speed | |
run: 'echo "TEST_FLAGS1_SUFFIX=--skip-languages python R julia" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLMPI | |
== 1 | |
name: (WINDOWS,PIP) Set up MSMPI | |
uses: mpi4py/setup-mpi@v1 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: Install R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 4.2.3 | |
- if: startsWith(runner.os, 'Linux') && matrix.install-method == 'pip' | |
name: (LINUX,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/.cache/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'macOS') && matrix.install-method == 'pip' | |
name: (MACOS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/Library/Caches/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'Windows') && matrix.install-method == 'pip' | |
name: (WINDOWS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~\AppData\Local\pip\Cache | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: matrix.install-method == 'pip' && (matrix.python-version != 3.7 || runner.os | |
!= 'macOS') | |
name: (PIP) Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- if: matrix.install-method == 'pip' && matrix.python-version == 3.7 && runner.os | |
== 'macOS' | |
name: (PIP) Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.16 | |
- if: matrix.install-method == 'pip' && env.INSTALLJULIA == 1 | |
name: (PIP) Set up Julia | |
uses: julia-actions/setup-julia@v1 | |
- if: env.INSTALLMATLAB == 1 && runner.os != 'Windows' | |
name: Set up Matlab | |
uses: matlab-actions/setup-matlab@v1 | |
- if: env.USEVIRTUALENV == 1 && matrix.install-method == 'pip' | |
name: (PIP) Set up Virtual Env | |
run: 'python utils/setup_test_env.py env virtualenv ${{ matrix.python-version | |
}} --env-name=test | |
echo "source activate ygg" > ~/.bashrc | |
source test/bin/activate | |
echo "$VIRTUAL_ENV" | |
echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV | |
echo "PATH=$VIRTUAL_ENV/bin:$PATH" >> $GITHUB_ENV | |
' | |
- if: matrix.install-method == 'pip' | |
name: (PIP) Install dependencies & package | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set the vcpkg root config value | |
run: yggconfig --vcpkg-dir=C:\\vcpkg | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: (WINDOWS,PIP) Update R requirements | |
run: ygginstall R --update-r-requirements | |
- if: matrix.install-method == 'pip' && runner.os == 'macOS' | |
name: (MACOS,PIP) Set C compiler to llvm clang | |
run: yggconfig --c-compiler=/usr/local/opt/llvm/bin/clang --c++-compiler=/usr/local/opt/llvm/bin/clang++ | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') | |
name: (CONDA) Set up miniconda base environment | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
channel-priority: strict | |
channels: conda-forge | |
miniforge-variant: Mambaforge | |
python-version: ${{ matrix.python-version }} | |
use-mamba: true | |
use-only-tar-bz2: true | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'Windows' && env.INSTALLC == 1 | |
name: (WINDOWS,CONDA) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- continue-on-error: true | |
id: conda_build | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Build package in base environment | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: ${{ steps.conda_build.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Build package in base environment (re-attempt) | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: runner.os == 'macOS' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: (MACOS,CONDA) Install old MacOSX SDK for compatibility with the conda | |
llvm (7) | |
run: ./utils/setup_old_mac_sdk.sh | |
- if: runner.os == 'Linux' && matrix.install-sbml == true | |
name: (LINUX) Install ncurses 5 for SBML runs with libroadrunner | |
run: sudo apt-get install libncurses5 libncurses5-dev libncursesw5-dev | |
- continue-on-error: true | |
id: conda_install | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Install dependencies & package from existing build | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: ${{ steps.conda_install.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Install dependencies & package from existing build (re-attempt) | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'macOS' | |
name: (MACOS,CONDA) Set allow_multiple_omp config | |
run: '[[ -d $CONDA_PREFIX/lib/clang/9.0.1 ]] && install_name_tool -change "@rpath/libc++abi.1.dylib" | |
"/usr/lib/libc++abi.1.dylib" $CONDA_PREFIX/lib/clang/9.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib | |
yggconfig --allow-multiple-omp | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Compile libraries | |
run: yggcompile | |
- if: runner.os == 'Windows' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: Run cmake test in command prompt (CONDA) | |
run: conda activate test && pytest --import-mode=importlib --ci --cov-append | |
--nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- if: runner.os == 'Windows' && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Run cmake test in command prompt (PIP) | |
run: pytest --import-mode=importlib --ci --cov-append --nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1 | |
name: Run tests (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} | |
timeout-minutes: 180 | |
- if: ${{ steps.test1.outcome == 'failure' }} | |
name: Re-run test failures (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} --last-failed --last-failed-no-failures=all | |
--second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1_script | |
if: ${{ contains(matrix.test-flags1, '--mpi-script') }} | |
name: Run generated test script (1st) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test1_script.outcome == 'failure' }} | |
name: Re-run test script failures (1st) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2 | |
if: ${{ matrix.test-flags2 != '' }} | |
name: Run tests (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} | |
timeout-minutes: 180 | |
- if: ${{ steps.test2.outcome == 'failure' }} | |
name: Re-run test failures (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2_script | |
if: ${{ matrix.test-flags2 != '' && contains(matrix.test-flags2, '--mpi-script') | |
}} | |
name: Run generated test script (2nd) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test2_script.outcome == 'failure' }} | |
name: Re-run test script failures (2nd) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
name: Combine coverage reports | |
run: '# ls .* | |
coverage combine --append | |
' | |
- if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Generate XML version of coverage report | |
run: '# ls .* | |
coverage xml -i | |
' | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
with: | |
name: ${{ env.YGG_GHA_JOB_ID }} | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- continue-on-error: true | |
if: ${{ always() }} | |
name: Download the last successful workflow environment log | |
uses: dawidd6/action-download-artifact@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: . | |
workflow: test-install.yml | |
- if: ${{ always() }} | |
name: Create a log of Python package versions | |
run: python utils/setup_test_env.py log | |
- if: ${{ success() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: new_environment_log.txt | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- install-c: false | |
install-method: pip | |
install-mpi: false | |
install-sbml: false | |
os-base: windows | |
python-version: 3.7 | |
test-flags1: --long-running | |
test-flags2: '' | |
install-c: | |
- true | |
install-method: | |
- pip | |
install-mpi: | |
- true | |
install-sbml: | |
- false | |
os-base: | |
- ubuntu | |
- macos | |
- windows | |
python-version: | |
- 3.7 | |
test-flags1: | |
- --long-running --suites timing demos top | |
- --suite=examples --extra-examples --mpi-script=run_mpi.sh --mpi-nproc=3 | |
- --suite=types --skip-languages c cpp | |
- --suite=types --languages c cpp | |
test-flags2: | |
- '' | |
max-parallel: 20 | |
test_rmq_conda: | |
defaults: | |
run: | |
shell: bash -l {0} | |
env: | |
INSTALLAPY: 1 | |
INSTALLRMQ: 1 | |
USEVIRTUALENV: 1 | |
name: Test RMQ (${{ matrix.python-version }}, ${{ matrix.os-base }}, ${{ matrix.install-method | |
}}) | |
needs: params | |
runs-on: ${{ matrix.os-base }}-${{ fromJSON(needs.params.outputs.os-versions)[matrix.os-base] | |
}} | |
services: | |
rabbitmq: | |
image: rabbitmq:latest | |
options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s | |
--health-timeout 5s --health-retries 5 | |
ports: | |
- 5672:5672 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: matrix.install-c != true && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Set C installation based on matrix value | |
run: echo "INSTALLC=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-mpi != true | |
name: Set MPI installation based on matrix value | |
run: echo "INSTALLMPI=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-sbml == true | |
name: Set SBML installation based on matrix value | |
run: echo "INSTALLSBML=1" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- name: Store an ID string for the job | |
run: echo "YGG_GHA_JOB_ID=${{ runner.os }}-${{ matrix.install-method }}-py${{ | |
matrix.python-version }}-C${{ env.INSTALLC }}-RMQ${{ env.INSTALLRMQ }}${{ | |
env.YGG_GHA_JOB_ID_SUFFIX }}" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' | |
name: (WINDOWS) Patch TEMP/TMPDIR on Windows | |
run: 'echo "TMPDIR=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
echo "TEMP=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && startsWith(matrix.test-flags1, '--suite=examples') | |
name: (WINDOWS) Disable interpreted language example on Windows for speed | |
run: 'echo "TEST_FLAGS1_SUFFIX=--skip-languages python R julia" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLMPI | |
== 1 | |
name: (WINDOWS,PIP) Set up MSMPI | |
uses: mpi4py/setup-mpi@v1 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: Install R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 4.2.3 | |
- if: startsWith(runner.os, 'Linux') && matrix.install-method == 'pip' | |
name: (LINUX,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/.cache/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'macOS') && matrix.install-method == 'pip' | |
name: (MACOS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/Library/Caches/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'Windows') && matrix.install-method == 'pip' | |
name: (WINDOWS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~\AppData\Local\pip\Cache | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: matrix.install-method == 'pip' && (matrix.python-version != 3.7 || runner.os | |
!= 'macOS') | |
name: (PIP) Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- if: matrix.install-method == 'pip' && matrix.python-version == 3.7 && runner.os | |
== 'macOS' | |
name: (PIP) Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.16 | |
- if: matrix.install-method == 'pip' && env.INSTALLJULIA == 1 | |
name: (PIP) Set up Julia | |
uses: julia-actions/setup-julia@v1 | |
- if: env.INSTALLMATLAB == 1 && runner.os != 'Windows' | |
name: Set up Matlab | |
uses: matlab-actions/setup-matlab@v1 | |
- if: env.USEVIRTUALENV == 1 && matrix.install-method == 'pip' | |
name: (PIP) Set up Virtual Env | |
run: 'python utils/setup_test_env.py env virtualenv ${{ matrix.python-version | |
}} --env-name=test | |
echo "source activate ygg" > ~/.bashrc | |
source test/bin/activate | |
echo "$VIRTUAL_ENV" | |
echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV | |
echo "PATH=$VIRTUAL_ENV/bin:$PATH" >> $GITHUB_ENV | |
' | |
- if: matrix.install-method == 'pip' | |
name: (PIP) Install dependencies & package | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set the vcpkg root config value | |
run: yggconfig --vcpkg-dir=C:\\vcpkg | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: (WINDOWS,PIP) Update R requirements | |
run: ygginstall R --update-r-requirements | |
- if: matrix.install-method == 'pip' && runner.os == 'macOS' | |
name: (MACOS,PIP) Set C compiler to llvm clang | |
run: yggconfig --c-compiler=/usr/local/opt/llvm/bin/clang --c++-compiler=/usr/local/opt/llvm/bin/clang++ | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') | |
name: (CONDA) Set up miniconda base environment | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
channel-priority: strict | |
channels: conda-forge | |
miniforge-variant: Mambaforge | |
python-version: ${{ matrix.python-version }} | |
use-mamba: true | |
use-only-tar-bz2: true | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'Windows' && env.INSTALLC == 1 | |
name: (WINDOWS,CONDA) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- continue-on-error: true | |
id: conda_build | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Build package in base environment | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: ${{ steps.conda_build.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Build package in base environment (re-attempt) | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: runner.os == 'macOS' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: (MACOS,CONDA) Install old MacOSX SDK for compatibility with the conda | |
llvm (7) | |
run: ./utils/setup_old_mac_sdk.sh | |
- if: runner.os == 'Linux' && matrix.install-sbml == true | |
name: (LINUX) Install ncurses 5 for SBML runs with libroadrunner | |
run: sudo apt-get install libncurses5 libncurses5-dev libncursesw5-dev | |
- continue-on-error: true | |
id: conda_install | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Install dependencies & package from existing build | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: ${{ steps.conda_install.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Install dependencies & package from existing build (re-attempt) | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'macOS' | |
name: (MACOS,CONDA) Set allow_multiple_omp config | |
run: '[[ -d $CONDA_PREFIX/lib/clang/9.0.1 ]] && install_name_tool -change "@rpath/libc++abi.1.dylib" | |
"/usr/lib/libc++abi.1.dylib" $CONDA_PREFIX/lib/clang/9.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib | |
yggconfig --allow-multiple-omp | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Compile libraries | |
run: yggcompile | |
- if: runner.os == 'Windows' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: Run cmake test in command prompt (CONDA) | |
run: conda activate test && pytest --import-mode=importlib --ci --cov-append | |
--nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- if: runner.os == 'Windows' && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Run cmake test in command prompt (PIP) | |
run: pytest --import-mode=importlib --ci --cov-append --nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1 | |
name: Run tests (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} | |
timeout-minutes: 180 | |
- if: ${{ steps.test1.outcome == 'failure' }} | |
name: Re-run test failures (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} --last-failed --last-failed-no-failures=all | |
--second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1_script | |
if: ${{ contains(matrix.test-flags1, '--mpi-script') }} | |
name: Run generated test script (1st) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test1_script.outcome == 'failure' }} | |
name: Re-run test script failures (1st) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2 | |
if: ${{ matrix.test-flags2 != '' }} | |
name: Run tests (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} | |
timeout-minutes: 180 | |
- if: ${{ steps.test2.outcome == 'failure' }} | |
name: Re-run test failures (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2_script | |
if: ${{ matrix.test-flags2 != '' && contains(matrix.test-flags2, '--mpi-script') | |
}} | |
name: Run generated test script (2nd) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test2_script.outcome == 'failure' }} | |
name: Re-run test script failures (2nd) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
name: Combine coverage reports | |
run: '# ls .* | |
coverage combine --append | |
' | |
- if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Generate XML version of coverage report | |
run: '# ls .* | |
coverage xml -i | |
' | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
with: | |
name: ${{ env.YGG_GHA_JOB_ID }} | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- continue-on-error: true | |
if: ${{ always() }} | |
name: Download the last successful workflow environment log | |
uses: dawidd6/action-download-artifact@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: . | |
workflow: test-install.yml | |
- if: ${{ always() }} | |
name: Create a log of Python package versions | |
run: python utils/setup_test_env.py log | |
- if: ${{ success() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: new_environment_log.txt | |
strategy: | |
fail-fast: false | |
matrix: | |
install-c: | |
- true | |
install-method: | |
- conda | |
install-mpi: | |
- false | |
install-sbml: | |
- false | |
os-base: | |
- ubuntu | |
python-version: | |
- 3.7 | |
test-flags1: | |
- --long-running --languages python R matlab | |
test-flags2: | |
- tests/test_services.py --nocapture | |
test_rmq_pip: | |
env: | |
INSTALLAPY: 1 | |
INSTALLRMQ: 1 | |
USEVIRTUALENV: 1 | |
YGG_DEFAULT_COMM: IPCComm | |
name: Test RMQ (${{ matrix.python-version }}, ${{ matrix.os-base }}, ${{ matrix.install-method | |
}}) | |
needs: params | |
runs-on: ${{ matrix.os-base }}-${{ fromJSON(needs.params.outputs.os-versions)[matrix.os-base] | |
}} | |
services: | |
rabbitmq: | |
image: rabbitmq:latest | |
options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s | |
--health-timeout 5s --health-retries 5 | |
ports: | |
- 5672:5672 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: matrix.install-c != true && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Set C installation based on matrix value | |
run: echo "INSTALLC=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-mpi != true | |
name: Set MPI installation based on matrix value | |
run: echo "INSTALLMPI=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-sbml == true | |
name: Set SBML installation based on matrix value | |
run: echo "INSTALLSBML=1" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- name: Store an ID string for the job | |
run: echo "YGG_GHA_JOB_ID=${{ runner.os }}-${{ matrix.install-method }}-py${{ | |
matrix.python-version }}-C${{ env.INSTALLC }}-RMQ${{ env.INSTALLRMQ }}${{ | |
env.YGG_GHA_JOB_ID_SUFFIX }}" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' | |
name: (WINDOWS) Patch TEMP/TMPDIR on Windows | |
run: 'echo "TMPDIR=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
echo "TEMP=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && startsWith(matrix.test-flags1, '--suite=examples') | |
name: (WINDOWS) Disable interpreted language example on Windows for speed | |
run: 'echo "TEST_FLAGS1_SUFFIX=--skip-languages python R julia" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLMPI | |
== 1 | |
name: (WINDOWS,PIP) Set up MSMPI | |
uses: mpi4py/setup-mpi@v1 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: Install R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 4.2.3 | |
- if: startsWith(runner.os, 'Linux') && matrix.install-method == 'pip' | |
name: (LINUX,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/.cache/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'macOS') && matrix.install-method == 'pip' | |
name: (MACOS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/Library/Caches/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'Windows') && matrix.install-method == 'pip' | |
name: (WINDOWS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~\AppData\Local\pip\Cache | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: matrix.install-method == 'pip' && (matrix.python-version != 3.7 || runner.os | |
!= 'macOS') | |
name: (PIP) Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- if: matrix.install-method == 'pip' && matrix.python-version == 3.7 && runner.os | |
== 'macOS' | |
name: (PIP) Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.16 | |
- if: matrix.install-method == 'pip' && env.INSTALLJULIA == 1 | |
name: (PIP) Set up Julia | |
uses: julia-actions/setup-julia@v1 | |
- if: env.INSTALLMATLAB == 1 && runner.os != 'Windows' | |
name: Set up Matlab | |
uses: matlab-actions/setup-matlab@v1 | |
- if: env.USEVIRTUALENV == 1 && matrix.install-method == 'pip' | |
name: (PIP) Set up Virtual Env | |
run: 'python utils/setup_test_env.py env virtualenv ${{ matrix.python-version | |
}} --env-name=test | |
echo "source activate ygg" > ~/.bashrc | |
source test/bin/activate | |
echo "$VIRTUAL_ENV" | |
echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV | |
echo "PATH=$VIRTUAL_ENV/bin:$PATH" >> $GITHUB_ENV | |
' | |
- if: matrix.install-method == 'pip' | |
name: (PIP) Install dependencies & package | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set the vcpkg root config value | |
run: yggconfig --vcpkg-dir=C:\\vcpkg | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: (WINDOWS,PIP) Update R requirements | |
run: ygginstall R --update-r-requirements | |
- if: matrix.install-method == 'pip' && runner.os == 'macOS' | |
name: (MACOS,PIP) Set C compiler to llvm clang | |
run: yggconfig --c-compiler=/usr/local/opt/llvm/bin/clang --c++-compiler=/usr/local/opt/llvm/bin/clang++ | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') | |
name: (CONDA) Set up miniconda base environment | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
channel-priority: strict | |
channels: conda-forge | |
miniforge-variant: Mambaforge | |
python-version: ${{ matrix.python-version }} | |
use-mamba: true | |
use-only-tar-bz2: true | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'Windows' && env.INSTALLC == 1 | |
name: (WINDOWS,CONDA) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- continue-on-error: true | |
id: conda_build | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Build package in base environment | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: ${{ steps.conda_build.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Build package in base environment (re-attempt) | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: runner.os == 'macOS' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: (MACOS,CONDA) Install old MacOSX SDK for compatibility with the conda | |
llvm (7) | |
run: ./utils/setup_old_mac_sdk.sh | |
- if: runner.os == 'Linux' && matrix.install-sbml == true | |
name: (LINUX) Install ncurses 5 for SBML runs with libroadrunner | |
run: sudo apt-get install libncurses5 libncurses5-dev libncursesw5-dev | |
- continue-on-error: true | |
id: conda_install | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Install dependencies & package from existing build | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: ${{ steps.conda_install.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Install dependencies & package from existing build (re-attempt) | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'macOS' | |
name: (MACOS,CONDA) Set allow_multiple_omp config | |
run: '[[ -d $CONDA_PREFIX/lib/clang/9.0.1 ]] && install_name_tool -change "@rpath/libc++abi.1.dylib" | |
"/usr/lib/libc++abi.1.dylib" $CONDA_PREFIX/lib/clang/9.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib | |
yggconfig --allow-multiple-omp | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Compile libraries | |
run: yggcompile | |
- if: runner.os == 'Windows' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: Run cmake test in command prompt (CONDA) | |
run: conda activate test && pytest --import-mode=importlib --ci --cov-append | |
--nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- if: runner.os == 'Windows' && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Run cmake test in command prompt (PIP) | |
run: pytest --import-mode=importlib --ci --cov-append --nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1 | |
name: Run tests (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} | |
timeout-minutes: 180 | |
- if: ${{ steps.test1.outcome == 'failure' }} | |
name: Re-run test failures (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} --last-failed --last-failed-no-failures=all | |
--second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1_script | |
if: ${{ contains(matrix.test-flags1, '--mpi-script') }} | |
name: Run generated test script (1st) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test1_script.outcome == 'failure' }} | |
name: Re-run test script failures (1st) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2 | |
if: ${{ matrix.test-flags2 != '' }} | |
name: Run tests (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} | |
timeout-minutes: 180 | |
- if: ${{ steps.test2.outcome == 'failure' }} | |
name: Re-run test failures (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2_script | |
if: ${{ matrix.test-flags2 != '' && contains(matrix.test-flags2, '--mpi-script') | |
}} | |
name: Run generated test script (2nd) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test2_script.outcome == 'failure' }} | |
name: Re-run test script failures (2nd) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
name: Combine coverage reports | |
run: '# ls .* | |
coverage combine --append | |
' | |
- if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Generate XML version of coverage report | |
run: '# ls .* | |
coverage xml -i | |
' | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
with: | |
name: ${{ env.YGG_GHA_JOB_ID }} | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- continue-on-error: true | |
if: ${{ always() }} | |
name: Download the last successful workflow environment log | |
uses: dawidd6/action-download-artifact@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: . | |
workflow: test-install.yml | |
- if: ${{ always() }} | |
name: Create a log of Python package versions | |
run: python utils/setup_test_env.py log | |
- if: ${{ success() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: new_environment_log.txt | |
strategy: | |
fail-fast: false | |
matrix: | |
install-c: | |
- true | |
install-method: | |
- pip | |
install-mpi: | |
- false | |
install-sbml: | |
- false | |
os-base: | |
- ubuntu | |
python-version: | |
- 3.7 | |
test-flags1: | |
- --long-running --languages python R matlab | |
test-flags2: | |
- '' | |
test_stripped: | |
env: | |
INSTALLC: 0 | |
INSTALLFORTRAN: 0 | |
INSTALLLPY: 0 | |
INSTALLMPI: 0 | |
INSTALLPYGMENTS: 0 | |
INSTALLR: 0 | |
INSTALLRMQ: 0 | |
INSTALLTRIMESH: 0 | |
INSTALLZMQ: 0 | |
YGG_GHA_JOB_ID_SUFFIX: -stripped | |
name: Test stripped install (${{ matrix.python-version }}, ${{ matrix.os-base | |
}}, ${{ matrix.install-method }}) | |
needs: params | |
runs-on: ${{ matrix.os-base }}-${{ fromJSON(needs.params.outputs.os-versions)[matrix.os-base] | |
}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- if: matrix.install-c != true && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Set C installation based on matrix value | |
run: echo "INSTALLC=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-mpi != true | |
name: Set MPI installation based on matrix value | |
run: echo "INSTALLMPI=0" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: matrix.install-sbml == true | |
name: Set SBML installation based on matrix value | |
run: echo "INSTALLSBML=1" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- name: Store an ID string for the job | |
run: echo "YGG_GHA_JOB_ID=${{ runner.os }}-${{ matrix.install-method }}-py${{ | |
matrix.python-version }}-C${{ env.INSTALLC }}-RMQ${{ env.INSTALLRMQ }}${{ | |
env.YGG_GHA_JOB_ID_SUFFIX }}" >> $GITHUB_ENV | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' | |
name: (WINDOWS) Patch TEMP/TMPDIR on Windows | |
run: 'echo "TMPDIR=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
echo "TEMP=$USERPROFILE\\AppData\\Local\\Temp" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && startsWith(matrix.test-flags1, '--suite=examples') | |
name: (WINDOWS) Disable interpreted language example on Windows for speed | |
run: 'echo "TEST_FLAGS1_SUFFIX=--skip-languages python R julia" >> $GITHUB_ENV | |
' | |
shell: bash -l {0} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLMPI | |
== 1 | |
name: (WINDOWS,PIP) Set up MSMPI | |
uses: mpi4py/setup-mpi@v1 | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: Install R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 4.2.3 | |
- if: startsWith(runner.os, 'Linux') && matrix.install-method == 'pip' | |
name: (LINUX,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/.cache/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'macOS') && matrix.install-method == 'pip' | |
name: (MACOS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~/Library/Caches/pip | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: startsWith(runner.os, 'Windows') && matrix.install-method == 'pip' | |
name: (WINDOWS,PIP) Cache pip | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
path: ~\AppData\Local\pip\Cache | |
restore-keys: '${{ runner.os }}-pip- | |
' | |
- if: matrix.install-method == 'pip' && (matrix.python-version != 3.7 || runner.os | |
!= 'macOS') | |
name: (PIP) Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- if: matrix.install-method == 'pip' && matrix.python-version == 3.7 && runner.os | |
== 'macOS' | |
name: (PIP) Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.16 | |
- if: matrix.install-method == 'pip' && env.INSTALLJULIA == 1 | |
name: (PIP) Set up Julia | |
uses: julia-actions/setup-julia@v1 | |
- if: env.INSTALLMATLAB == 1 && runner.os != 'Windows' | |
name: Set up Matlab | |
uses: matlab-actions/setup-matlab@v1 | |
- if: env.USEVIRTUALENV == 1 && matrix.install-method == 'pip' | |
name: (PIP) Set up Virtual Env | |
run: 'python utils/setup_test_env.py env virtualenv ${{ matrix.python-version | |
}} --env-name=test | |
echo "source activate ygg" > ~/.bashrc | |
source test/bin/activate | |
echo "$VIRTUAL_ENV" | |
echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV | |
echo "PATH=$VIRTUAL_ENV/bin:$PATH" >> $GITHUB_ENV | |
' | |
- if: matrix.install-method == 'pip' | |
name: (PIP) Install dependencies & package | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLC | |
== 1 | |
name: (WINDOWS,PIP) Set the vcpkg root config value | |
run: yggconfig --vcpkg-dir=C:\\vcpkg | |
- if: runner.os == 'Windows' && matrix.install-method == 'pip' && env.INSTALLR | |
== 1 | |
name: (WINDOWS,PIP) Update R requirements | |
run: ygginstall R --update-r-requirements | |
- if: matrix.install-method == 'pip' && runner.os == 'macOS' | |
name: (MACOS,PIP) Set C compiler to llvm clang | |
run: yggconfig --c-compiler=/usr/local/opt/llvm/bin/clang --c++-compiler=/usr/local/opt/llvm/bin/clang++ | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') | |
name: (CONDA) Set up miniconda base environment | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
channel-priority: strict | |
channels: conda-forge | |
miniforge-variant: Mambaforge | |
python-version: ${{ matrix.python-version }} | |
use-mamba: true | |
use-only-tar-bz2: true | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'Windows' && env.INSTALLC == 1 | |
name: (WINDOWS,CONDA) Set up MSVC Compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
- continue-on-error: true | |
id: conda_build | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Build package in base environment | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: ${{ steps.conda_build.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Build package in base environment (re-attempt) | |
run: 'conda activate base | |
python utils/setup_test_env.py build ${{ matrix.install-method }} --python | |
${{ matrix.python-version }} --use-mamba | |
' | |
- if: runner.os == 'macOS' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: (MACOS,CONDA) Install old MacOSX SDK for compatibility with the conda | |
llvm (7) | |
run: ./utils/setup_old_mac_sdk.sh | |
- if: runner.os == 'Linux' && matrix.install-sbml == true | |
name: (LINUX) Install ncurses 5 for SBML runs with libroadrunner | |
run: sudo apt-get install libncurses5 libncurses5-dev libncursesw5-dev | |
- continue-on-error: true | |
id: conda_install | |
if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Install dependencies & package from existing build | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: ${{ steps.conda_install.outcome == 'failure' && (matrix.install-method == | |
'conda' || matrix.install-method == 'mamba')}} | |
name: (CONDA) Install dependencies & package from existing build (re-attempt) | |
run: python utils/setup_test_env.py install ${{ matrix.install-method }} --without-build | |
--use-mamba | |
- if: (matrix.install-method == 'conda' || matrix.install-method == 'mamba') && | |
runner.os == 'macOS' | |
name: (MACOS,CONDA) Set allow_multiple_omp config | |
run: '[[ -d $CONDA_PREFIX/lib/clang/9.0.1 ]] && install_name_tool -change "@rpath/libc++abi.1.dylib" | |
"/usr/lib/libc++abi.1.dylib" $CONDA_PREFIX/lib/clang/9.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib | |
yggconfig --allow-multiple-omp | |
' | |
- name: Verify installation | |
run: python utils/setup_test_env.py verify | |
- name: Compile libraries | |
run: yggcompile | |
- if: runner.os == 'Windows' && (matrix.install-method == 'conda' || matrix.install-method | |
== 'mamba') | |
name: Run cmake test in command prompt (CONDA) | |
run: conda activate test && pytest --import-mode=importlib --ci --cov-append | |
--nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- if: runner.os == 'Windows' && matrix.install-method != 'conda' && matrix.install-method | |
!= 'mamba' | |
name: Run cmake test in command prompt (PIP) | |
run: pytest --import-mode=importlib --ci --cov-append --nocapture tests/drivers/test_CMakeModelDriver.py | |
shell: cmd /C CALL {0} | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1 | |
name: Run tests (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} | |
timeout-minutes: 180 | |
- if: ${{ steps.test1.outcome == 'failure' }} | |
name: Re-run test failures (1st) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags1 | |
}} ${{ env.TEST_FLAGS1_SUFFIX }} --last-failed --last-failed-no-failures=all | |
--second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test1_script | |
if: ${{ contains(matrix.test-flags1, '--mpi-script') }} | |
name: Run generated test script (1st) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test1_script.outcome == 'failure' }} | |
name: Re-run test script failures (1st) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2 | |
if: ${{ matrix.test-flags2 != '' }} | |
name: Run tests (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} | |
timeout-minutes: 180 | |
- if: ${{ steps.test2.outcome == 'failure' }} | |
name: Re-run test failures (2nd) | |
run: pytest --import-mode=importlib --ci --cov-append ${{ matrix.test-flags2 | |
}} --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
id: test2_script | |
if: ${{ matrix.test-flags2 != '' && contains(matrix.test-flags2, '--mpi-script') | |
}} | |
name: Run generated test script (2nd) | |
run: ./run_mpi.sh | |
timeout-minutes: 180 | |
- if: ${{ steps.test2_script.outcome == 'failure' }} | |
name: Re-run test script failures (2nd) | |
run: ./run_mpi.sh --last-failed --last-failed-no-failures=all --second-attempt | |
timeout-minutes: 180 | |
- continue-on-error: true | |
name: Combine coverage reports | |
run: '# ls .* | |
coverage combine --append | |
' | |
- if: matrix.install-method == 'conda' || matrix.install-method == 'mamba' | |
name: (CONDA) Generate XML version of coverage report | |
run: '# ls .* | |
coverage xml -i | |
' | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
with: | |
name: ${{ env.YGG_GHA_JOB_ID }} | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- continue-on-error: true | |
if: ${{ always() }} | |
name: Download the last successful workflow environment log | |
uses: dawidd6/action-download-artifact@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: . | |
workflow: test-install.yml | |
- if: ${{ always() }} | |
name: Create a log of Python package versions | |
run: python utils/setup_test_env.py log | |
- if: ${{ success() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: environment-log-${{ env.YGG_GHA_JOB_ID }} | |
path: new_environment_log.txt | |
strategy: | |
fail-fast: false | |
matrix: | |
install-c: | |
- false | |
install-method: | |
- pip | |
install-mpi: | |
- false | |
install-sbml: | |
- false | |
os-base: | |
- ubuntu | |
- macos | |
- windows | |
python-version: | |
- 3.7 | |
test-flags1: | |
- --long-running | |
test-flags2: | |
- '' | |
upload_sdist: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Upload sdist | |
needs: | |
- build_sdist | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v2 | |
with: | |
name: sdist | |
path: dist | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.pypi }} | |
skip_existing: true | |
user: __token__ | |
upload_wheels: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
name: Upload wheels | |
needs: | |
- build_wheels | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v2 | |
with: | |
name: artifact | |
path: dist | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.pypi }} | |
skip_existing: true | |
user: __token__ | |
name: Test of package installation & execution | |
'on': | |
push: | |
branches-ignore: | |
- gh-pages | |
tags: | |
- '*' | |
schedule: | |
- cron: 0 10 * * 1 | |
- cron: 0 10 1 * * |