Avoid useless copy. We only ever modify the current index, not anythi… #718
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: CI | |
on: | |
push: | |
paths: | |
- '**' | |
- '!.github/**' | |
- '.github/workflows/ci.yml' | |
pull_request: | |
paths: | |
- '**' | |
- '!.github/**' | |
- '.github/workflows/ci.yml' | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
jobs: | |
ci: | |
strategy: | |
# Allows for matrix sub-jobs to fail without canceling the rest | |
fail-fast: false | |
# MATRIX: | |
# ======= | |
# Required parameters: | |
# os the os to run on | |
# python-version the python version to use | |
# backend the backend to use | |
# env any additional env variables. Set to '{}' for none | |
# Optional parameters: | |
# allowed_failure whether the job is allowed to fail | |
# extra_hash extra hash str to differentiate from other caches with similar name (must always start with '-') | |
matrix: | |
# Tests [amd64] | |
# | |
# FIXME: 'cpp' tests seems to fail due to compilation errors (numpy_pythran_unit) | |
# in all python versions and test failures (builtin_float) in 3.5< | |
os: [ubuntu-22.04, windows-2019, macos-13] | |
backend: [c, cpp] | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
- "3.13" | |
- "3.13t" | |
env: [{}] | |
exclude: | |
# Windows and free-threading is difficult to build right now | |
- os: windows-2019 | |
python-version: 3.13t | |
backend: "c" | |
- os: windows-2019 | |
python-version: 3.13t | |
backend: "cpp" | |
include: | |
#- python-version: "3.13" | |
# allowed_failure: true | |
# Ubuntu sub-jobs: | |
# ================ | |
# graalpy is really slow... | |
- os: ubuntu-22.04 | |
python-version: graalpy24 | |
backend: c | |
env: { NO_CYTHON_COMPILE: 1 } | |
allowed_failure: true | |
# GCC 13 (with broad language standards) | |
- os: ubuntu-22.04 | |
python-version: "3.9" | |
backend: c | |
env: { GCC_VERSION: 13, EXTRA_CFLAGS: "-std=c99" } | |
extra_hash: "-c99" | |
- os: ubuntu-22.04 | |
python-version: "3.10" | |
backend: c | |
env: { GCC_VERSION: 13, EXTRA_CFLAGS: "-std=c17" } | |
extra_hash: "-gcc11" | |
- os: ubuntu-22.04 | |
python-version: "3.12" | |
backend: c | |
env: { GCC_VERSION: 13, EXTRA_CFLAGS: "-std=c17" } | |
extra_hash: "-gcc11" | |
- os: ubuntu-22.04 | |
python-version: "3.13" | |
backend: cpp | |
env: { GCC_VERSION: 13, EXTRA_CFLAGS: "-std=c++20" } | |
extra_hash: "-gcc11" | |
# compile all modules | |
- os: ubuntu-22.04 | |
python-version: "3.8" | |
backend: c | |
env: { CYTHON_COMPILE_ALL: 1 } | |
extra_hash: "-all" | |
- os: ubuntu-22.04 | |
python-version: "3.8" | |
backend: cpp | |
env: { CYTHON_COMPILE_ALL: 1 } | |
extra_hash: "-all" | |
- os: ubuntu-22.04 | |
python-version: "3.11" | |
backend: c | |
env: { CYTHON_COMPILE_ALL: 1 } | |
extra_hash: "-all" | |
- os: ubuntu-22.04 | |
python-version: "3.11" | |
backend: cpp | |
env: { CYTHON_COMPILE_ALL: 1 } | |
extra_hash: "-all" | |
# Linting | |
- os: ubuntu-22.04 | |
python-version: "3.9" | |
backend: "c,cpp" | |
env: { TEST_CODE_STYLE: 1, NO_CYTHON_COMPILE: 1 } | |
extra_hash: "-codestyle" | |
# Limited API | |
- os: ubuntu-22.04 | |
python-version: "3.8" | |
backend: "c,cpp" | |
env: { LIMITED_API: "--limited-api", NO_LIMITED_COMPILE: 1, EXCLUDE: "--no-file" } | |
extra_hash: "-limited_api" | |
- os: ubuntu-22.04 | |
python-version: "3.11" | |
backend: "c,cpp" | |
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" } | |
extra_hash: "-limited_api" | |
- os: ubuntu-22.04 | |
python-version: "3.12" | |
allowed_failure: true | |
backend: "c,cpp" | |
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" } | |
extra_hash: "-limited_api" | |
- os: ubuntu-22.04 | |
python-version: "3.13" | |
allowed_failure: true | |
backend: "c,cpp" | |
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" } | |
extra_hash: "-limited_api" | |
# Type specs | |
- os: ubuntu-22.04 | |
python-version: "3.12" | |
backend: c | |
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" } | |
extra_hash: "-typespecs" | |
- os: ubuntu-22.04 | |
python-version: "3.9" | |
backend: c | |
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" } | |
extra_hash: "-typespecs" | |
- os: ubuntu-22.04 | |
python-version: "3.8" | |
backend: c | |
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" } | |
extra_hash: "-typespecs" | |
# Stackless | |
- os: ubuntu-22.04 | |
python-version: "3.8" | |
backend: c | |
env: { STACKLESS: true, PY: 3 } | |
extra_hash: "-stackless" | |
# Pypy | |
- os: ubuntu-22.04 | |
python-version: pypy-3.9 | |
backend: c | |
env: { NO_CYTHON_COMPILE: 1 } | |
- os: ubuntu-22.04 | |
python-version: pypy-3.10 | |
backend: c | |
env: { NO_CYTHON_COMPILE: 1 } | |
# Free-threading | |
- os: ubuntu-22.04 | |
python-version: 3.13t | |
backend: "c" | |
allowed_failure: true | |
- os: ubuntu-22.04 | |
python-version: 3.13t | |
backend: "cpp" | |
allowed_failure: true | |
# - os: windows-2019 | |
# python-version: 3.13t | |
# backend: "c" | |
# allowed_failure: true | |
# - os: windows-2019 | |
# python-version: 3.13t | |
# backend: "cpp" | |
# allowed_failure: true | |
- os: macos-13 | |
python-version: 3.13t | |
backend: "c" | |
allowed_failure: true | |
- os: macos-13 | |
python-version: 3.13t | |
backend: "cpp" | |
allowed_failure: true | |
# This defaults to 360 minutes (6h) which is way too long and if a test gets stuck, it can block other pipelines. | |
# From testing, the runs tend to take ~20 minutes for ubuntu / macos and ~40 for windows, | |
# so a limit of 80 minutes should be enough. This can always be changed in the future if needed. | |
timeout-minutes: 80 | |
runs-on: ${{ matrix.os }} | |
env: | |
BACKEND: ${{ matrix.backend }} | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
MACOSX_DEPLOYMENT_TARGET: "11.0" | |
GCC_VERSION: 10 | |
USE_CCACHE: 1 | |
CCACHE_SLOPPINESS: "pch_defines,time_macros" | |
CCACHE_COMPRESS: 1 | |
CCACHE_MAXSIZE: "200M" | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4.1.1 | |
with: | |
fetch-depth: 1 | |
- name: Setup python | |
uses: Quansight-Labs/setup-python@v5.3.1 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Compilation Cache | |
uses: hendrikmuhs/ccache-action@v1.2.12 | |
with: | |
variant: ${{ startsWith(runner.os, 'windows') && 'sccache' || 'ccache' }} # fake ternary | |
key: ${{ runner.os }}-hendrikmuhs-ccache${{ matrix.extra_hash }}-${{ matrix.python-version }}-${{ matrix.backend == 'c' || matrix.backend == 'c,cpp' }}-${{ contains(matrix.backend, 'cpp') }}-${{ hashFiles('test-requirements*.txt', '.github/**/ci.yml', 'Tools/**/ci-run.sh') }} | |
max-size: ${{ env.CCACHE_MAXSIZE }} | |
- name: Run CI | |
continue-on-error: ${{ matrix.allowed_failure || false }} | |
env: ${{ matrix.env }} | |
run: bash ./Tools/ci-run.sh | |
- name: Upload HTML docs | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: htmldocs | |
path: docs/build/html | |
if-no-files-found: ignore | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: wheels-${{ runner.os }}-${{ matrix.python-version }}${{ matrix.extra_hash }} | |
path: dist/*.whl | |
if-no-files-found: ignore | |
pycoverage: | |
runs-on: ubuntu-22.04 | |
env: | |
BACKEND: c,cpp | |
OS_NAME: ubuntu-22.04 | |
PYTHON_VERSION: "3.11" | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4.1.1 | |
- name: Setup python | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: "3.11" | |
- name: Run Coverage | |
env: { COVERAGE: 1, NO_CYTHON_COMPILE: 1 } | |
run: bash ./Tools/ci-run.sh | |
- name: Upload Coverage Report | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: pycoverage_html | |
path: coverage-report-html | |
cycoverage: | |
runs-on: ubuntu-22.04 | |
env: | |
BACKEND: c,cpp | |
OS_NAME: ubuntu-22.04 | |
PYTHON_VERSION: "3.11" | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4.1.1 | |
with: | |
fetch-depth: 1 | |
- name: Setup python | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: "3.11" | |
- name: Run Coverage | |
env: { COVERAGE: 1 } | |
run: bash ./Tools/ci-run.sh | |
- name: Upload Coverage Report | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: cycoverage_html | |
path: coverage-report-html | |
codespell: | |
name: Check for spelling errors | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Codespell | |
uses: codespell-project/actions-codespell@v2 |