Skip to content

Protocol-driven test suite rework + cross-check pipeline #196

Protocol-driven test suite rework + cross-check pipeline

Protocol-driven test suite rework + cross-check pipeline #196

Workflow file for this run

# A GitHub Actions workflow file to run on pull request and on main.
name: CI Tests
on:
pull_request:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# ----------------------------------------------------------------------------------------------
# Code Quality Checks and Linting
# ----------------------------------------------------------------------------------------------
check_code_quality:
name: Code Quality Checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Install pre-commit
run: |
uv sync --group lint
uv run pre-commit install
- name: Run code-quality checks
run: uv run pre-commit run --all-files --show-diff-on-failure
# ----------------------------------------------------------------------------------------------
# Install and Import Check `shapiq`
# ----------------------------------------------------------------------------------------------
install_and_import_shapiq:
name: Install and import check shapiq
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
python-version: "3.12"
- os: ubuntu-latest
python-version: "3.14"
- os: windows-latest
python-version: "3.12"
- os: macos-latest
python-version: "3.12"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: ${{ matrix.python-version }}
enable-cache: true
- if: matrix.os == 'macos-latest'
name: Install libomp on macOS
run: brew install libomp
- name: Create uv virtual environment
run: uv venv
- name: Install shapiq package
run: uv run --no-sync uv pip install .
- name: Test import
run: uv run --no-sync python -c "import shapiq; print('shapiq imported successfully')"
# ----------------------------------------------------------------------------------------------
# Install and Import Check `shapiq_games`
# ----------------------------------------------------------------------------------------------
install_and_import_shapiq_games:
name: Install and import check shapiq-games
runs-on: ubuntu-latest
needs:
- install_and_import_shapiq
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Create uv virtual environment
run: uv venv
- name: Install shapiq package
run: uv run --no-sync uv pip install .
- name: Install dependencies
run: uv sync --no-dev --group all_ml
- name: Test import of shapiq_games
run: uv run --no-sync python -c "import shapiq_games; print('shapiq_games imported successfully')"
# ----------------------------------------------------------------------------------------------
# Unit Tests for shapiq (Stable Python and Matrix)
# ----------------------------------------------------------------------------------------------
test_shapiq_stable:
name: Run Unit Tests (Stable Python)
runs-on: ubuntu-latest
needs:
- install_and_import_shapiq
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Install test dependencies
run: uv sync
- name: Run unit tests
run: uv run pytest "tests/shapiq"
test_shapiq_matrix:
name: Run Unit Tests (Matrix)
needs:
- test_shapiq_stable
- install_and_import_shapiq
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
python-version: "3.14" # Test latest Python on Ubuntu
- os: windows-latest
python-version: "3.12" # Test stable Python on Windows
- os: macos-latest
python-version: "3.12" # Test stable Python on macOS
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: ${{ matrix.python-version }}
enable-cache: true
- if: matrix.os == 'macos-latest'
name: Install libomp on macOS
run: brew install libomp
- name: Install test dependencies
run: uv sync
- name: Run unit tests
run: uv run pytest "tests/shapiq"
# ----------------------------------------------------------------------------------------------
# Slow Tests (convergence, seeded cross-checks, datasets)
# ----------------------------------------------------------------------------------------------
test_shapiq_slow:
name: Run Slow Tests
runs-on: ubuntu-latest
needs:
- test_shapiq_stable
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Install test dependencies
run: uv sync
- name: Run slow tests
run: uv run pytest "tests/shapiq" -m slow
# ----------------------------------------------------------------------------------------------
# Test Documentation Build
# ----------------------------------------------------------------------------------------------
doc_build:
name: Test Documentation Build
runs-on: ubuntu-latest
needs:
- install_and_import_shapiq
- check_code_quality
- test_shapiq_stable
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Install dependencies
run: uv sync --no-dev --group docs
- name: Build documentation
run: uv run --no-sync sphinx-build -W --keep-going -b html docs/source docs/build/html
# ----------------------------------------------------------------------------------------------
# Code Coverage
# ----------------------------------------------------------------------------------------------
run_coverage:
name: Run Test Coverage
runs-on: ubuntu-latest
needs:
- install_and_import_shapiq
- check_code_quality
- test_shapiq_stable
steps:
- uses: actions/checkout@v6
- name: Set up Python and uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Install test dependencies
run: uv sync
- name: Measure coverage
run: uv run pytest "tests/shapiq" -m "" --cov=shapiq --cov-report=xml -n logical
- name: Upload coverage to codecov
uses: codecov/codecov-action@v6
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true