Skip to content

CI: build fixes for v4.6 #387

CI: build fixes for v4.6

CI: build fixes for v4.6 #387

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python package
on:
push:
branches:
- main
- develop
- release-*
pull_request:
branches:
- develop
- release-*
release:
types:
- published
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "pip"
cache-dependency-path: "pyproject.toml"
- name: Install dependencies
run: |
python -m pip install --upgrade pip wheel
python -m pip install --editable .[dev]
- name: Lint with ruff
run: |
ruff check --select I .
ruff format --check .
- name: Type check with Pyright
run: pyright
- name: Build sdist
run: python -m build --sdist --no-isolation --skip-dependency-check --outdir dist
- uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
- name: Check for [ci build] in commit message
run: |
if git log -1 --pretty=format:"%B" | grep "\[ci build\]" ; then
echo "force-build=true" >> "$GITHUB_OUTPUT"
else
echo "force-build=false" >> "$GITHUB_OUTPUT"
fi
test:
needs: [lint]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
python-version: ["3.7", "3.12"]
exclude:
# Latest macos runner does not support older Python versions
# https://github.com/actions/setup-python/issues/852
- os: macos-latest
python-version: "3.7"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
cache-dependency-path: "pyproject.toml"
- name: Install dependencies
run: |
python -m pip install --upgrade pip wheel
python -m pip install --editable .[dev]
- name: Downgrade numpy
if: ${{ matrix.python-version == '3.7' }}
run: |
# test with older numpy version to ensure compatibility
python -m pip install numpy==1.15
- name: Test with pytest
run: |
pytest -v --benchmark-disable -n auto
foo:
needs: [lint]
runs-on: ubuntu-latest
steps:
- run: echo "${{ needs.lint.outputs.force-build }}"
# NOTE: build step only runs on tag builds or when the commit message contains
# "[ci build]" for testing
build:
# needs: [lint, test]
needs: [lint]
if: "${{ startsWith(github.ref, 'refs/tags/') || needs.lint.outputs.force-build == 'true' }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: ["ubuntu-20.04", "macos-12", "windows-2019"]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up QEMU
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- uses: pypa/cibuildwheel@v2.20.0
env:
CIBW_SKIP: cp36-* pp*-win* pp*-macosx* *_i686
CIBW_TEST_SKIP: "*-win_arm64"
CIBW_ARCHS_LINUX: "x86_64 aarch64"
CIBW_ARCHS_MACOS: "x86_64 arm64 universal2"
CIBW_ARCHS_WINDOWS: "AMD64 ARM64"
with:
output-dir: dist
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ runner.os }}
path: dist
# NOTE: release step only runs on tag builds
release:
name: Release
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/') }}
needs: [build]
steps:
- uses: actions/download-artifact@v4
with:
name: wheels
- uses: actions/download-artifact@v4
with:
name: wheels-Linux
- uses: actions/download-artifact@v4
with:
name: wheels-macOS
- uses: actions/download-artifact@v4
with:
name: wheels-Windows
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Publish to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python -m pip install --upgrade twine
twine upload --skip-existing *