Skip to content

Test

Test #1407

Workflow file for this run

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/setup-graphviz@v1.2.0
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