Skip to content

Commit

Permalink
ci: update CI script using maturin
Browse files Browse the repository at this point in the history
  • Loading branch information
aseyboldt committed Feb 12, 2025
1 parent e06caa9 commit f34e6f2
Showing 1 changed file with 156 additions and 83 deletions.
239 changes: 156 additions & 83 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This file is autogenerated by maturin v1.1.0
# This file is autogenerated by maturin v1.8.2
# To update, run
#
# maturin generate-ci --pytest github
# maturin generate-ci --pytest --platform all --zig github
#
name: CI

Expand All @@ -11,7 +11,7 @@ on:
- main
- master
tags:
- '*'
- "*"
pull_request:
workflow_dispatch:

Expand All @@ -20,73 +20,149 @@ permissions:

jobs:
linux:
runs-on: ubuntu-latest
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
# If you update the targets here, be sure to also update the
# download-artifact step in the release job!
target: [x86_64, aarch64]
# pytensor is currently giving me issues on the other targets...
#target: [x86_64, aarch64, s390x, ppc64le]
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
manylinux: 2_28
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter --zig
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: auto
before-script-linux: |
dnf install -y clang-libs clang || apt install llvm-dev libclang-dev clang
dnf install -y clang-libs clang || sudo apt install llvm-dev libclang-dev clang
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: linux-${{ matrix.target }}-wheels
name: wheels-linux-${{ matrix.platform.target }}
path: dist
- name: pytest
if: ${{ startsWith(matrix.target, 'x86_64') }}
if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
shell: bash
run: |
set -e
pip install --find-links dist --force-reinstall 'nutpie[all]'
pip install --find-links dist --force-reinstall --no-deps --no-index 'nutpie[all]'
pip install pytest
python3 -m venv .venv
source .venv/bin/activate
uv pip install 'nutpie[all]' --find-links dist --force-reinstall
uv pip install pytest
pytest
- name: pytest
if: ${{ !startsWith(matrix.target, 'x86') }}
uses: uraimo/run-on-arch-action@v2.8.1
if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }}
uses: uraimo/run-on-arch-action@v2
with:
arch: ${{ matrix.target }}
distro: fedora_latest
arch: ${{ matrix.platform.target }}
distro: ubuntu22.04
githubToken: ${{ github.token }}
install: |
dnf install -y python3 python3-pip hdf5-devel python3-devel pkg-config curl @development-tools
pip3 install -U pip pytest
apt-get update
apt-get install -y --no-install-recommends python3 python3-pip curl make clang
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
run: |
set -e
pip3 install --find-links dist --force-reinstall 'nutpie[all]'
pip3 install 'nutpie[all]' --find-links dist --no-deps --no-index --force-reinstall
source $HOME/.local/bin/env
uv pip install --system -U pip pytest
uv pip install --system 'nutpie[all]' --find-links dist --force-reinstall
pytest
windows:
runs-on: windows-latest
musllinux:
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
# If you update the targets here, be sure to also update the
# download-artifact step in the release job!
target: [x64]
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: musllinux_1_2
before-script-linux: |
dnf install -y clang-libs clang || apt install llvm-dev libclang-dev clang
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-musllinux-${{ matrix.platform.target }}
path: dist
- name: pytest
if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
uses: addnab/docker-run-action@v3
with:
image: alpine:latest
options: -v ${{ github.workspace }}:/io -w /io
run: |
set -e
apk add py3-pip py3-virtualenv curl make clang
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
python3 -m virtualenv .venv
source .venv/bin/activate
# No numba packages for alpine
uv pip install 'nutpie[stan]' --find-links dist --force-reinstall
uv pip install pytest
pytest
- name: pytest
if: ${{ !startsWith(matrix.platform.target, 'x86') }}
uses: uraimo/run-on-arch-action@v2
with:
arch: ${{ matrix.platform.target }}
distro: alpine_latest
githubToken: ${{ github.token }}
install: |
apk add py3-virtualenv curl make clang
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
run: |
set -e
python3 -m virtualenv .venv
source $HOME/.local/bin/env
source .venv/bin/activate
uv pip install pytest
# No numba packages for alpine
uv pip install 'nutpie[stan]' --find-links dist --force-reinstall
pytest
windows:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
architecture: ${{ matrix.target }}
python-version: "3.12"
architecture: ${{ matrix.platform.target }}
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
with:
Expand All @@ -101,59 +177,63 @@ jobs:
env:
LIBCLANG_PATH: ${{ runner.temp }}/llvm/lib
with:
target: ${{ matrix.target }}
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: windows-${{ matrix.target }}-wheels
name: wheels-windows-${{ matrix.platform.target }}
path: dist
- name: pytest
if: ${{ !startsWith(matrix.target, 'aarch64') }}
if: ${{ !startsWith(matrix.platform.target, 'aarch64') }}
shell: bash
run: |
set -e
pip install "nutpie[all]" --find-links dist --force-reinstall
pip install --find-links dist --force-reinstall --no-deps --no-index 'nutpie[all]'
pip install pytest
python3 -m venv .venv
source .venv/Scripts/activate
uv pip install "nutpie[all]" --find-links dist --force-reinstall
uv pip install pytest
pytest
macos:
runs-on: macos-latest
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
# If you update the targets here, be sure to also update the
# download-artifact step in the release job!
target: [x86_64, aarch64]
platform:
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: macos-${{ matrix.target }}-wheels
name: wheels-macos-${{ matrix.platform.target }}
path: dist
- name: pytest
if: ${{ startsWith(matrix.target, 'aarch64') }}
shell: bash
run: |
set -e
pip install 'nutpie[all]' --find-links dist --force-reinstall
pip install --find-links dist --force-reinstall --no-deps --no-index 'nutpie[all]'
pip install pytest
python3 -m venv .venv
source .venv/bin/activate
uv pip install 'nutpie[all]' --find-links dist --force-reinstall
uv pip install pytest
pytest
sdist:
Expand All @@ -168,45 +248,38 @@ jobs:
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: sdist
name: wheels-sdist
path: dist

release:
name: Release
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: [linux, windows, macos, sdist]
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
needs: [linux, musllinux, windows, macos, sdist]
permissions:
# Use to sign the release artifacts
id-token: write
# Used to upload release artifacts
contents: write
# Used to generate artifact attestation
attestations: write
steps:
# Combine all the wheels and sdists into a single directory
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: linux-x86_64-wheels
path: dist
- uses: actions/download-artifact@v4
with:
name: linux-aarch64-wheels
path: dist
- uses: actions/download-artifact@v4
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
with:
name: windows-x64-wheels
path: dist
- uses: actions/download-artifact@v4
with:
name: macos-x86_64-wheels
path: dist
- uses: actions/download-artifact@v4
with:
name: macos-aarch64-wheels
path: dist
- uses: actions/download-artifact@v4
with:
name: sdist
path: dist
subject-path: "wheels-*/*"
- name: Publish to PyPI
if: ${{ startsWith(github.ref, 'refs/tags/') }}
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --skip-existing dist/*
args: --non-interactive --skip-existing wheels-*/*
- name: Upload to GitHub Release
uses: softprops/action-gh-release@v1
with:
files: |
wasm-wheels/*.whl
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') }}

0 comments on commit f34e6f2

Please sign in to comment.