1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
# allow manual runs on branches without a PR
env:
FORCE_COLOR: "1"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version:
- "3.8"
- "3.10"
- "3.13"
- "3.14"
include:
- os: ubuntu-22.04
python-version: "3.9"
- os: ubuntu-22.04
python-version: "3.11"
- os: macos-15-intel
python-version: "3.12"
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Set up non-default Pythons
uses: actions/setup-python@v6
with:
python-version: |
3.9
3.10
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Setup uv
uses: astral-sh/setup-uv@v7
- name: Set up Miniconda
uses: conda-incubator/setup-miniconda@v3
if: matrix.python-version == '3.13'
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
use-mamba: true
channels: conda-forge
- name: Install Nox-under-test (uv)
run: uv pip install --system .
- name: Run tests on ${{ matrix.os }}
run: nox --session "tests-${{ matrix.python-version }}" -- --full-trace
- name: Run min-version tests on ${{ matrix.os }}
run: nox --session minimums --force-python="${{ matrix.python-version }}" -- --full-trace
- name: Run Conda tests
if: matrix.python-version == '3.13'
run: nox --session "conda_tests" -- --full-trace
- name: Save coverage report
uses: actions/upload-artifact@v5
with:
name: coverage-${{ github.job }}-${{ strategy.job-index }}
path: .coverage.*
include-hidden-files: true
if-no-files-found: error
coverage:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Setup uv
uses: astral-sh/setup-uv@v7
- name: Install Nox-under-test
run: uv pip install --system .
- name: Download individual coverage reports
uses: actions/download-artifact@v6
with:
pattern: coverage-*
merge-multiple: true
- name: Display structure of downloaded files
run: ls -aR
- name: Run coverage
run: nox --session "cover"
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install Nox-under-test
run: python -m pip install --disable-pip-version-check .
- name: Lint
run: nox --session "lint"
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Setup uv
uses: astral-sh/setup-uv@v7
- name: Install Nox-under-test
run: uv pip install --system .
- name: Docs
run: nox --session "docs"
|