Test #1439
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
name: Test | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
# 05:00 UTC = 06:00 CET = 07:00 CEST | |
schedule: | |
- cron: "0 5 * * *" | |
# Cancel previous runs that have not completed | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
GAMS_VERSION: 25.1.1 | |
# See description in lint.yml | |
depth: 100 | |
jobs: | |
pytest: | |
strategy: | |
matrix: | |
os: | |
- macos-latest | |
- ubuntu-latest | |
- windows-latest | |
python-version: | |
- "3.7" # Earliest version supported by message_ix | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" # Latest version supported by message_ix | |
# Below this comment are newly released or development versions of | |
# Python. For these versions, binary wheels are not available for some | |
# dependencies, e.g. llvmlite, numba, numpy, and/or pandas. Compiling | |
# these on the job runner requires a more elaborate build environment, | |
# currently out of scope for the message_ix project. | |
# - "3.12.0-alpha.1" # Development version | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
name: ${{ matrix.os }}-py${{ matrix.python-version }} | |
steps: | |
- name: Check out message_ix | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: ${{ env.depth }} | |
- name: Fetch tags (for setuptools-scm) | |
run: git fetch --tags --depth=${{ env.depth }} | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: pip | |
cache-dependency-path: "**/pyproject.toml" | |
- name: Set RETICULATE_PYTHON | |
# Use the environment variable set by the setup-python action, above. | |
run: echo "RETICULATE_PYTHON=$pythonLocation" >> $GITHUB_ENV | |
shell: bash | |
- uses: ts-graphviz/[email protected] | |
with: | |
macos-skip-brew-update: true | |
- uses: r-lib/actions/setup-r@v2 | |
id: setup-r | |
- name: Cache GAMS installer, Python packages, and R packages | |
uses: actions/cache@v3 | |
with: | |
path: | | |
gams | |
${{ env.R_LIBS_USER }} | |
key: ${{ matrix.os }}-gams${{ env.GAMS_VERSION }}-R${{ steps.setup-r.outputs.installed-r-version }} | |
restore-keys: | | |
${{ matrix.os }}-gams${{ env.GAMS_VERSION }}- | |
${{ matrix.os }}- | |
- uses: iiasa/actions/setup-gams@main | |
with: | |
version: ${{ env.GAMS_VERSION }} | |
license: ${{ secrets.GAMS_LICENSE }} | |
- name: Install Python package and dependencies | |
# By default, the below installs ixmp from the main branch. To run against | |
# other code, e.g. other branches for open PRs), temporarily edit as | |
# appropriate. DO NOT merge such changes to `main`. | |
run: | | |
pip install --upgrade "ixmp @ git+https://github.com/iiasa/ixmp.git@main" | |
pip install .[tests] | |
- name: Install R dependencies and tutorial requirements | |
run: | | |
install.packages("remotes") | |
remotes::install_cran( | |
c("dplyr", "IRkernel", "reticulate"), | |
dependencies = TRUE, | |
# force = TRUE, | |
) | |
IRkernel::installspec() | |
shell: Rscript {0} | |
- name: Run test suite using pytest | |
env: | |
# For test_cli.test_dl; see code in message_ix.cli.dl | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Work around iiasa/ixmp#411 | |
run: | | |
pytest message_ix \ | |
-m "not nightly" \ | |
-rA --verbose --color=yes --durations=20 \ | |
--cov-report=xml \ | |
--numprocesses=auto --dist=loadgroup || ( [ $? -eq 127 -a "${{ runner.os }}" = "Windows" ] && echo "Spurious exit code 127 from pytest" && exit 0) | |
shell: bash | |
- name: Test documentation build using Sphinx | |
if: ${{ startsWith(matrix.os, 'ubuntu') }} | |
env: | |
# For pull_request triggers, GitHub creates a temporary merge commit | |
# with a hash that does not match the head of the branch. Tell it which | |
# branch to use. | |
SPHINXOPTS: -D linkcode_github_remote_head=${{ github.head_ref }} | |
run: make --directory=doc html | |
- name: Upload test coverage to Codecov.io | |
uses: codecov/codecov-action@v3 |