Skip to content

Enable professional-grade mypy (#129) #514

Enable professional-grade mypy (#129)

Enable professional-grade mypy (#129) #514

Workflow file for this run

name: test
# TODO workaround for Codecov/squash and merge, a bit wasteful
# Revise e.g. via https://github.com/codecov/feedback/issues/369
on:
pull_request:
push:
branches:
- 'main'
jobs:
test:
timeout-minutes: 30
strategy:
matrix:
python-version:
- "3.10" # Earliest version supported by ixmp4
- "3.11"
- "3.12"
- "3.13" # Latest version supported by ixmp4
with-pyarrow:
- false
postgres-version:
- "16"
pandas-version:
- false
backend:
- "sqlite,rest-sqlite,postgres,rest-postgres"
include:
# with pyarrow
- python-version: "3.13"
with-pyarrow: true
postgres-version: "16"
pandas-version: false
backend: "sqlite,rest-sqlite"
# pgsql 15
- python-version: "3.13"
with-pyarrow: false
postgres-version: "15"
pandas-version: false
backend: "postgres,rest-postgres"
# with pyarrow
- python-version: "3.12"
with-pyarrow: true
postgres-version: "16"
pandas-version: false
backend: "sqlite,rest-sqlite"
# pandas 2.1.3
- python-version: "3.11"
with-pyarrow: true
postgres-version: "16"
backend: "sqlite,rest-sqlite"
pandas-version: "2.1.3"
# pandas 2.1.0
- python-version: "3.10"
with-pyarrow: true
postgres-version: "16"
backend: "sqlite,rest-sqlite"
pandas-version: "2.1.0"
name: py${{ matrix.python-version }} | backend=${{ matrix.backend }} | with-pyarrow=${{ matrix.with-pyarrow }} | pgsql=${{ matrix.postgres-version }} | pandas=${{ matrix.pandas-version }}
runs-on: ubuntu-latest
services:
postgres:
image: ${{ contains(matrix.backend, 'postgres') && format('postgres:{0}', matrix.postgres-version) || '' }}
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: test
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
#------------------------------------
# check-out repo and set-up python
#------------------------------------
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
#------------------------------
# install & configure poetry
#------------------------------
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
#----------------------------------
# install dynamic version plugin
#----------------------------------
- name: Install poetry-dynamic-versioning
run: poetry self add "poetry-dynamic-versioning[plugin]"
#------------------------------------
# load cached venv if cache exists
#------------------------------------
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
#------------------------------------------------
# install dependencies if cache does not exist
#------------------------------------------------
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root --with dev,server
- name: Install PyArrow
if: ${{ matrix.with-pyarrow }}
run: pip install pyarrow
- name: Install legacy pandas
if: ${{ matrix.pandas-version }}
run: poetry add pandas@${{ matrix.pandas-version }} [email protected] --lock
#------------------------
# install root project
#------------------------
- name: Install library
run: poetry install --no-interaction
#------------------
# run test suite
#------------------
- name: Run tests
run: |
source .venv/bin/activate
pytest --backend ${{ matrix.backend }} --postgres-dsn "postgresql://postgres:postgres@localhost:5432/test" --cov-report xml:.coverage.xml --cov=ixmp4 -rsxX --benchmark-skip --color=yes
#------------------------------
# Upload coverage to codecov
#------------------------------
- name: Upload results to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: .coverage.xml
pre-commit:
name: Code quality
runs-on: ubuntu-latest
steps:
#------------------------------------
# check-out repo and set-up python
#------------------------------------
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
#------------------------------
# install & configure poetry
#------------------------------
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
#----------------------------------
# install dynamic version plugin
#----------------------------------
- name: Install poetry-dynamic-versioning
run: poetry self add "poetry-dynamic-versioning[plugin]"
#------------------------------------
# load cached venv if cache exists
#------------------------------------
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
#------------------------------------------------
# install dependencies if cache does not exist
#------------------------------------------------
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root --with dev,server
#------------------------
# install root project
#------------------------
- name: Install library
run: poetry install --no-interaction
#-------------------------------
# run pre-commit/(mypy, ruff)
#-------------------------------
- uses: pre-commit/[email protected]