Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

default maturin pipeline #158

Merged
merged 10 commits into from
Dec 30, 2023
329 changes: 69 additions & 260 deletions .github/workflows/python_release.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# file adapted from https://github.com/milesgranger/pyrus-cramjam/blob/master/.github/workflows/CI.yml

name: cryo python release
# This file is autogenerated by maturin v1.4.0
# To update, run
#
# maturin generate-ci github
#
name: python-release

# section adapted from https://github.com/astral-sh/ruff/blob/main/.github/workflows/release.yaml
on:
Expand All @@ -18,58 +21,32 @@ on:
# When we change pyproject.toml, we want to ensure that the maturin builds still work
- pyproject.toml
# And when we change this workflow itself...
- .github/workflows/release.yaml
- .github/workflows/python_release.yaml


permissions:
contents: read

jobs:
macos:
runs-on: macos-latest
linux:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64]
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: actions/setup-python@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Build
run: cargo build --release
- name: Tests
run: cargo test --no-default-features --release
- name: Build wheels - x86_64 - cryo-python
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: x86_64
args: -i python --release --out dist --sdist --manifest-path crates/python/Cargo.toml
- name: Install built wheels - x86_64
run: |
pip install cryo_python --no-index --find-links dist --force-reinstall
- name: Build wheels - universal2
if: ${{ matrix.python-version >= '3.8' || contains(fromJson('["3.10", "3.11", "3.12"]'), matrix.python-version) }}
uses: PyO3/maturin-action@v1
with:
args: -i python --release --target universal2-apple-darwin --out dist --manifest-path crates/python/Cargo.toml
- name: Install built wheels - universal2
if: ${{ matrix.python-version >= '3.8' || contains(fromJson('["3.10", "3.11", "3.12"]'), matrix.python-version) }}
run: |
pip install cryo_python --no-index --find-links dist --force-reinstall
# - name: Python UnitTest - cryo_python
# run: |
# pip install pytest numpy hypothesis
# python -m pytest cryo_python -vs
target: ${{ matrix.target }}
args: --release --out dist --interpreter python${{ matrix.python-version }} --manifest-path crates/python/Cargo.toml
sccache: 'true'
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
Expand All @@ -80,244 +57,77 @@ jobs:
runs-on: windows-latest
strategy:
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x64]
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: actions/setup-python@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.target }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Build
if: matrix.target == 'x64'
run: cargo build --release
- name: Tests
if: matrix.target == 'x64'
run: cargo test --no-default-features --release
- name: Build wheels - cryo_python
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: -i python --release --out dist --manifest-path crates/python/Cargo.toml
- name: Install built wheel
run: |
pip install cryo_python --no-index --find-links dist --force-reinstall
# - name: Python UnitTest - cryo_python
# run: |
# pip install pytest numpy hypothesis
# python -m pytest cryo_python -vs
args: --release --out dist --interpreter python${{ matrix.python-version }} --manifest-path crates/python/Cargo.toml
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

linux:
runs-on: ubuntu-latest
macos:
runs-on: macos-latest
strategy:
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
target: [x86_64, i686]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Build
run: cargo build --release
- name: Tests
run: cargo test --no-default-features --release
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
# - name: Audit
# run: cargo install cargo-audit && cargo audit
- name: Build Wheels - cryo-python
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: 2014
args: -i ${{ matrix.python-version }} --release --out dist --manifest-path crates/python/Cargo.toml
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

# linux-cross:
# runs-on: ubuntu-latest
# strategy:
# matrix:
# python:
# - '3.7'
# - '3.8'
# - '3.9'
# - '3.10'
# - '3.11'
# - '3.12'
# target: [aarch64, armv7, s390x, ppc64le]
# include:
# - python: pypy3.7
# target: aarch64
# - python: pypy3.8
# target: aarch64
# - python: pypy3.9
# target: aarch64
# steps:
# - uses: actions/checkout@v3
# - uses: actions/cache@v3
# with:
# path: |
# ~/.cargo/bin/
# ~/.cargo/registry/index/
# ~/.cargo/registry/cache/
# ~/.cargo/git/db/
# target/
# key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
# - name: Build Wheels cryo_python
# uses: PyO3/maturin-action@v1
# with:
# target: ${{ matrix.target }}
# manylinux: auto
# args: -i ${{ matrix.python }} --release --out dist --manifest-path crates/python/Cargo.toml
# - uses: uraimo/[email protected]
# # skipped cross compiled pypy wheel tests for now
# if: ${{ !startsWith(matrix.python, 'pypy') }}
# name: Install built wheel
# with:
# arch: ${{ matrix.target }}
# distro: ubuntu20.04
# githubToken: ${{ github.token }}
# # Mount the dist directory as /artifacts in the container
# dockerRunArgs: |
# --volume "${PWD}/dist:/artifacts"
# install: |
# apt-get update
# apt-get install -y --no-install-recommends python3 python3-venv software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
# apt-get update
# apt-get install -y curl python3.7-venv python3.9-venv python3.10-venv python3.11-venv python3.12-venv
# run: |
# ls -lrth /artifacts
# PYTHON=python${{ matrix.python }}
# $PYTHON -m venv venv
# venv/bin/pip install -U pip
# venv/bin/pip install cryo_pthon --no-index --find-links /artifacts --force-reinstall
# venv/bin/python -c 'import cryo'
# - name: Upload wheels
# uses: actions/upload-artifact@v3
# with:
# name: wheels
# path: dist
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --interpreter python${{ matrix.python-version }} --manifest-path crates/python/Cargo.toml
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

pypy-linux:
sdist:
runs-on: ubuntu-latest
strategy:
matrix:
python:
- pypy-3.7
- pypy-3.8
- pypy-3.9
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-${{matrix.python}}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Build Wheels - cryo_python
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
args: -i ${{ matrix.python }} --release --out dist --manifest-path crates/python/Cargo.toml
- name: Python UnitTest - cryo_python
run: |
pip install cryo_python --no-index --find-links dist
pypy -c "import cryo"
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist
- uses: actions/checkout@v3
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist --manifest-path crates/python/Cargo.toml
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

pypy-macos:
runs-on: macos-latest
strategy:
matrix:
python-version: [ pypy-3.7, pypy-3.8, pypy-3.9 ]
release:
name: Release
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: [linux, windows, macos, sdist]
environment:
name: pypi
url: https://pypi.org/p/cryo
permissions:
id-token: write
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install maturin
run: pip install maturin
- name: Build Wheels - cryo_python
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
args: -i ${{ matrix.python }} --release --out dist --manifest-path crates/python/Cargo.toml
- name: Install wheel
run: |
pip install cryo_python --no-index --find-links dist
- name: Python Import test
run: pypy -c "import cryo"
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

pypi-publish-cryo-python:
name: Upload cryo release to PyPI
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: [ macos, windows, linux, pypy-linux, pypy-macos ]
environment:
name: pypi
url: https://pypi.org/p/cryo
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
Expand All @@ -326,4 +136,3 @@ jobs:
with:
skip-existing: true
packages-dir: ./

Loading