CI #189
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |