Skip to content

Use a better example for the "IF" conditional compilation statement t… #331

Use a better example for the "IF" conditional compilation statement t…

Use a better example for the "IF" conditional compilation statement t… #331

Workflow file for this run

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: [windows-2019, ubuntu-20.04, macos-11]
backend: [c, cpp]
python-version:
- "2.7"
- "3.5"
- "3.6"
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12-dev"
env: [{}]
include:
# Temporary - Allow failure on Python 3.12-dev jobs until they are in beta (feature frozen)
- python-version: 3.12-dev
allowed_failure: true
# Ubuntu sub-jobs:
# ================
# GCC 11 (with latest language standards)
- os: ubuntu-20.04
python-version: 3.9
backend: c
env: { GCC_VERSION: 11, EXTRA_CFLAGS: "-std=c17" }
extra_hash: "-gcc11"
- os: ubuntu-20.04
python-version: 3.9
backend: cpp
env: { GCC_VERSION: 11, EXTRA_CFLAGS: "-std=c++20" }
extra_hash: "-gcc11"
# compile all modules
- os: ubuntu-20.04
python-version: 2.7
backend: c
env: { CYTHON_COMPILE_ALL: 1 }
extra_hash: "-all"
- os: ubuntu-20.04
python-version: 2.7
backend: cpp
env: { CYTHON_COMPILE_ALL: 1 }
extra_hash: "-all"
- os: ubuntu-20.04
python-version: "3.10"
backend: c
env: { CYTHON_COMPILE_ALL: 1 }
extra_hash: "-all"
- os: ubuntu-20.04
python-version: "3.10"
backend: cpp
env: { CYTHON_COMPILE_ALL: 1 }
extra_hash: "-all"
# Linting
- os: ubuntu-20.04
python-version: 3.9
backend: "c,cpp"
env: { TEST_CODE_STYLE: 1, NO_CYTHON_COMPILE: 1 }
extra_hash: "-codestyle"
# Limited API
- os: ubuntu-20.04
python-version: 3.6
backend: "c,cpp"
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" }
extra_hash: "-limited_api"
- os: ubuntu-20.04
python-version: 3.7
backend: "c,cpp"
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" }
extra_hash: "-limited_api"
- os: ubuntu-20.04
python-version: 3.8
backend: "c,cpp"
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" }
extra_hash: "-limited_api"
- os: ubuntu-20.04
python-version: "3.11"
backend: "c,cpp"
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" }
extra_hash: "-limited_api"
- os: ubuntu-20.04
python-version: "3.12-dev"
allowed_failure: true
backend: "c,cpp"
env: { LIMITED_API: "--limited-api", EXCLUDE: "--no-file" }
extra_hash: "-limited_api"
# Type specs
- os: ubuntu-20.04
python-version: 3.9
backend: c
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" }
extra_hash: "-typespecs"
- os: ubuntu-20.04
python-version: 3.8
backend: c
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" }
extra_hash: "-typespecs"
- os: ubuntu-20.04
python-version: 3.7
backend: c
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" }
extra_hash: "-typespecs"
- os: ubuntu-20.04
python-version: 3.6
backend: c
env: { EXTRA_CFLAGS: "-DCYTHON_USE_TYPE_SPECS=1" }
extra_hash: "-typespecs"
# Stackless
- os: ubuntu-20.04
python-version: 2.7
backend: c
env: { STACKLESS: true, PY: 2 }
extra_hash: "-stackless"
- os: ubuntu-20.04
python-version: 3.6
backend: c
env: { STACKLESS: true, PY: 3 }
extra_hash: "-stackless"
- os: ubuntu-20.04
python-version: 3.8
backend: c
env: { STACKLESS: true, PY: 3 }
extra_hash: "-stackless"
# Pypy
- os: ubuntu-20.04
python-version: pypy-2.7
backend: c
env: { NO_CYTHON_COMPILE: 1 }
- os: ubuntu-20.04
python-version: pypy-3.9-v7.3.12
backend: c
env: { NO_CYTHON_COMPILE: 1 }
# Coverage
- os: ubuntu-20.04
python-version: 3.8
backend: "c,cpp"
env: { COVERAGE: 1 }
extra_hash: '-coverage'
- os: windows-2019
# missing dependencies
python-version: 3.6
allowed_failure: true
exclude:
# fails due to lack of a compatible compiler
- os: windows-2019
python-version: 2.7
# cpp specific test fails
- os: windows-2019
python-version: 3.5
backend: cpp
# 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: 10.15
GCC_VERSION: 8
USE_CCACHE: 1
CCACHE_SLOPPINESS: "pch_defines,time_macros"
CCACHE_COMPRESS: 1
CCACHE_MAXSIZE: "200M"
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Setup python
uses: actions/setup-python@v3
if: startsWith(matrix.python-version, '3.') || startsWith(matrix.python-version, 'pypy')
with:
python-version: ${{ matrix.python-version }}
- name: Setup Python2 (Linux)
if: matrix.python-version == '2.7' && startsWith(matrix.os, 'ubuntu')
run: |
sudo ln -fs python2 /usr/bin/python
sudo apt-get update
sudo apt-get install python-setuptools python2.7 python2.7-dev
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
ls -l /usr/bin/pip* /usr/local/bin/pip*
which pip
- name: Compilation Cache
uses: hendrikmuhs/ccache-action@v1.2.9
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@v3
with:
name: htmldocs
path: docs/build/html
if-no-files-found: ignore
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels-${{ runner.os }}${{ matrix.extra_hash }}
path: dist/*.whl
if-no-files-found: ignore
pycoverage:
runs-on: ubuntu-20.04
env:
BACKEND: c,cpp
OS_NAME: ubuntu-20.04
PYTHON_VERSION: "3.10"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup python
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Run Coverage
env: { COVERAGE: 1, NO_CYTHON_COMPILE: 1 }
run: bash ./Tools/ci-run.sh
- name: Upload Coverage Report
uses: actions/upload-artifact@v3
with:
name: pycoverage_html
path: coverage-report-html
cycoverage:
runs-on: ubuntu-20.04
env:
BACKEND: c,cpp
OS_NAME: ubuntu-20.04
PYTHON_VERSION: "3.10"
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Setup python
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Run Coverage
env: { COVERAGE: 1 }
run: bash ./Tools/ci-run.sh
- name: Upload Coverage Report
uses: actions/upload-artifact@v3
with:
name: cycoverage_html
path: coverage-report-html
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Codespell
uses: codespell-project/actions-codespell@v2