Skip to content

Deploy

Deploy #101

Workflow file for this run

name: Deploy
on:
release:
types: [ "published" ]
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
DO_NOT_TRACK: 1
PIP_DISABLE_PIP_VERSION_CHECK: 1
UV_SYSTEM_PYTHON: 1
# Heavily inspired by https://github.com/pydantic/pydantic-core/blob/main/.github/workflows/ci.yml
jobs:
build-sdist:
name: build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
rust-toolchain: stable
- name: List files
run: find dist/ -type f -print0 -quit | xargs -0 tar ztf
- uses: actions/upload-artifact@v4
with:
name: package_sdist
path: dist
build:
strategy:
fail-fast: false
matrix:
os: [ "linux", "macos", "windows" ]
target: [ "x86_64", "aarch64" ]
manylinux: [ "auto" ]
include:
# manylinux
- os: linux
manylinux: auto
target: i686
- os: linux
manylinux: auto
target: aarch64
- os: linux
manylinux: auto
target: x86_64
# musllinux
- os: linux
manylinux: musllinux_1_1
target: x86_64
- os: linux
manylinux: musllinux_1_1
target: aarch64
# macos
- os: macos
target: x86_64
- os: macos
target: aarch64
# windows
- os: windows
target: x86_64
interpreter: 3.8 3.9 3.10 3.11 3.12 3.13
- os: windows
target: i686
python-architecture: x86
interpreter: 3.8 3.9 3.10 3.11 3.12 3.13
exclude:
- os: windows
target: aarch64
runs-on: ${{ (matrix.os == 'linux' && 'ubuntu') || matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
architecture: ${{ matrix.python-architecture || 'x64' }}
- name: Set up uv
uses: astral-sh/setup-uv@v3
- name: Install dependencies
run: uv pip install twine
- name: Build
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: ${{ matrix.manylinux }}
args: --release --out dist --interpreter ${{ matrix.interpreter || '3.8 3.9 3.10 3.11 3.12 3.13 pypy3.9 pypy3.10' }}
rust-toolchain: stable
docker-options: -e CI
- name: List wheels
run: ${{ (matrix.os == 'windows' && 'dir') || 'ls -lh' }} dist/
- name: Check with Twine
run: twine check --strict dist/*
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: package_${{ matrix.os }}_${{ matrix.target }}_${{ matrix.interpreter || 'all' }}_${{ matrix.manylinux }}
path: dist
testpypi:
environment:
name: testpypi
url: https://test.pypi.org/p/evalica
permissions:
id-token: write
runs-on: ubuntu-latest
needs:
- build-sdist
- build
steps:
- name: Download packages
uses: actions/download-artifact@v4
with:
pattern: package_*
merge-multiple: true
path: dist
- run: ls -lh dist/
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
skip-existing: true
pypi:
if: github.event_name == 'release'
environment:
name: pypi
url: https://pypi.org/p/evalica
permissions:
id-token: write
runs-on: ubuntu-latest
needs: testpypi
steps:
- name: Download packages
uses: actions/download-artifact@v4
with:
pattern: package_*
merge-multiple: true
path: dist
- run: ls -lh dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1