Skip to content

CI

CI #189

Workflow file for this run

name: CI
on:
push:
branches:
- main
- master
tags:
- '*'
workflow_dispatch:
permissions:
contents: read
concurrency: "ci"
jobs:
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- image: quay.io/pypa/manylinux_2_28_x86_64
target: x86_64-unknown-linux-gnu
# - image: quay.io/pypa/manylinux_2_28_x86_64
# target: aarch64-unknown-linux-gnu
# - image: quay.io/pypa/manylinux_2_28_x86_64
# target: aarch64-unknown-linux-musl
container:
image: "${{ matrix.platform.image }}"
env:
PIP_CACHE_DIR: "/var/cache/pip/"
steps:
- uses: actions/checkout@v4
# Bruh. This needs to be here before any cache
- name: Install zstd
run: |
dnf update --quiet -y
dnf install --quiet -y zstd wget tar
- uses: rui314/setup-mold@v1
- name: Setup Protocol Buffers compiler
uses: Noelware/setup-protoc@1.2.0
with:
version: v26.1
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.platform.target }}
- name: Setup sccache-cache
# uses: mozilla-actions/sccache-action@v0.0.4
uses: orf/sccache-action@add-notice-output
- name: Cache Rust
uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.platform.target }}"
cache-on-failure: "true"
cache-directories: |
/var/cache/dnf/
/var/cache/pip/
- name: Install DNF dependencies
run: |
dnf update --quiet -y
dnf install --quiet -y perl-core openssl openssl-devel pkgconfig unzip libzstd-devel cmake wget tar openssl-devel
- name: Install Maturin
run: |
pipx install "maturin"
- name: List Python versions
run: maturin list-python
# Workaround for https://github.com/PyO3/maturin/pull/2083.
- name: Fetch dependencies
run:
cargo fetch
- name: Build wheels
shell: bash
env:
RUST_LOG: "maturin=debug"
RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: |
maturin build --interpreter=python3.9 --interpreter=python3.10 --interpreter=python3.11 --interpreter=python3.12 --profile=ci --out=dist --release
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.platform.target }}
path: dist
retention-days: 1
macos:
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
platform:
- runner: macos-latest
target: x86_64-apple-darwin
- runner: macos-14
target: aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.platform.target }}
- name: Install dependencies
run: |
brew install protobuf zstd
- name: Setup sccache-cache
# uses: mozilla-actions/sccache-action@v0.0.4
uses: orf/sccache-action@add-notice-output
- name: Cache Rust
uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.platform.target }}"
cache-on-failure: "true"
- uses: actions/setup-python@v5
with:
python-version: |
3.9
3.10
3.11
3.12
cache: pip
- name: Install Maturin
run: |
pipx install "maturin"
- name: List Python versions
run: maturin list-python
# Workaround for https://github.com/PyO3/maturin/pull/2083
- name: Fetch dependencies
run:
cargo fetch
- name: Build wheels
shell: bash
env:
RUST_LOG: "maturin=debug"
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: |
maturin build --interpreter=python3.9 --interpreter=python3.10 --interpreter=python3.11 --interpreter=python3.12 --profile=ci --out=dist --release
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}
path: dist
retention-days: 1
test:
runs-on: ${{ matrix.platform.runner }}
needs: [ linux, macos ]
strategy:
fail-fast: false
matrix:
platform:
- runner: ubuntu-latest
- runner: macos-latest
- runner: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: dist/
merge-multiple: true
- uses: actions/setup-python@v5
with:
python-version: |
3.9
3.10
3.11
3.12
cache: pip
- name: Test 3.9
run: |
python3.9 -mpip install --upgrade pip wheel
python3.9 -mpip install pytest pytest-asyncio
python3.9 -mpip install pyvector-rs --find-links dist --force-reinstall
python3.9 -m pytest
- name: Test 3.10
run: |
python3.10 -mpip install --upgrade pip wheel
python3.10 -mpip install pytest pytest-asyncio
python3.10 -mpip install pyvector-rs --find-links dist --force-reinstall
python3.10 -m pytest
- name: Test 3.11
run: |
python3.11 -mpip install --upgrade pip wheel
python3.11 -mpip install pytest pytest-asyncio
python3.11 -mpip install pyvector-rs --find-links dist --force-reinstall
python3.11 -m pytest
- name: Test 3.12
run: |
python3.12 -mpip install --upgrade pip wheel
python3.12 -mpip install pytest pytest-asyncio
python3.12 -mpip install pyvector-rs --find-links dist --force-reinstall
python3.12 -m pytest
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist
retention-days: 1
release:
name: Release
runs-on: ubuntu-latest
# if: "startsWith(github.ref, 'refs/tags/')"
# needs: [linux, windows, macos, sdist]
needs: [ linux, macos, sdist, test ]
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
path: dist/
merge-multiple: true
- run: ls dist/
# - name: Publish to PyPI
# uses: PyO3/maturin-action@v1
# env:
# MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
# with:
# command: upload
# args: --non-interactive --skip-existing wheels-*/*
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1