Skip to content

Publish to PyPI using trusted publishing #305

Publish to PyPI using trusted publishing

Publish to PyPI using trusted publishing #305

Workflow file for this run

name: Release
# This should almost always run, but upload binaries only on tag.
on:
pull_request:
branches: [ master ]
workflow_dispatch:
push:
branches: [ master ]
tags:
- '*.*.*'
# Cancel previous runs on the same PR.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUST_TOOLCHAIN: nightly-2024-04-18
jobs:
build-linux-x86_64:
name: Build Linux x86_64 wheel
runs-on: ubuntu-latest
strategy:
matrix:
python-path: ['cp38-cp38', 'cp39-cp39', 'cp310-cp310', 'cp311-cp311', 'cp312-cp312']
container: quay.io/pypa/manylinux2014_x86_64:latest
env:
CC: "gcc"
CFLAGS: "-O2 -fno-plt"
LDFLAGS: "-O2 -flto -Wl,--as-needed"
CARGO_UNSTABLE_SPARSE_REGISTRY: "true"
steps:
- uses: actions/checkout@v3
- run: curl --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain "$RUST_TOOLCHAIN"
- run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- run: /opt/python/${{ matrix.python-path }}/bin/python -m venv .venv
- run: .venv/bin/pip install -U pip wheel maturin
- run: .venv/bin/pip install -r requirements.txt
- run: .venv/bin/maturin build --features=unstable-simd --release --strip --manylinux 2014 -i /opt/python/${{ matrix.python-path }}/bin/python --target x86_64-unknown-linux-gnu
- run: .venv/bin/pip install ormsgpack --no-index -f target/wheels
- run: .venv/bin/pytest
- uses: actions/upload-artifact@v3
with:
name: wheels
path: target/wheels
retention-days: 1
build-linux-cross:
name: Build Linux wheel
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
target: [
{
platform: 'linux/arm64',
target: 'aarch64-unknown-linux-gnu',
maturin_args: '',
},
{
platform: 'linux/arm/v7',
target: 'armv7-unknown-linux-gnueabihf',
maturin_args: '--no-default-features',
},
]
env:
CC: "gcc"
CFLAGS: "-O2"
LDFLAGS: "-O2 -flto -Wl,--as-needed"
CARGO_UNSTABLE_SPARSE_REGISTRY: "true"
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target.target }}
rust-toolchain: ${{ env.RUST_TOOLCHAIN }}
manylinux: auto
args: --release --strip -i python${{ matrix.python-version }} ${{ matrix.target.maturin_args }}
- uses: docker/setup-qemu-action@v3
- run: |
docker run \
--rm \
-v "$GITHUB_WORKSPACE":/work \
-w /work \
--platform ${{ matrix.target.platform }} \
python:${{ matrix.python-version }}-bookworm \
bash -e -c '
python3 -m venv .venv
.venv/bin/pip install -U pip wheel
.venv/bin/pip install -r tests/requirements.txt
.venv/bin/pip install ormsgpack --no-index -f target/wheels
.venv/bin/pytest
'
- uses: actions/upload-artifact@v3
with:
name: wheels
path: target/wheels
retention-days: 1
build-windows:
name: Build Windows wheel
runs-on: windows-latest
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- run: rustup install --profile minimal ${{ env.RUST_TOOLCHAIN }}
- run: rustup default ${{ env.RUST_TOOLCHAIN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --user -U pip wheel maturin
- run: pip install -r requirements.txt
- run: maturin build --release --strip -i $pythonLocation"python.exe"
- run: pip install ormsgpack --no-index -f target/wheels
- run: pytest
- uses: actions/upload-artifact@v3
with:
name: wheels
path: target/wheels
retention-days: 1
build-macos-universal:
name: Build macOS universal wheel
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- run: rustup install --profile minimal "$RUST_TOOLCHAIN"
- run: rustup default "$RUST_TOOLCHAIN"
- run: rustup target add aarch64-apple-darwin
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install -U pip wheel maturin
- run: pip install -r requirements.txt
- env:
CC: "clang"
CFLAGS: "-O2 -fno-plt -flto=thin"
LDFLAGS: "-O2 -flto=thin -fuse-ld=lld -Wl,--as-needed"
RUSTFLAGS: "-C linker=clang"
CARGO_UNSTABLE_SPARSE_REGISTRY: "true"
run: maturin build --release --strip -i python${{ matrix.python-version }} --features=unstable-simd --target universal2-apple-darwin
- run: pip install ormsgpack --no-index -f target/wheels
- run: pytest
- uses: actions/upload-artifact@v3
with:
name: wheels
path: target/wheels
retention-days: 1
build-sdist:
name: Build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup install --profile minimal "$RUST_TOOLCHAIN"
- run: rustup default "$RUST_TOOLCHAIN"
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.8
- run: python -m pip install -U pip wheel maturin
- run: pip install -r requirements.txt
- run: maturin sdist
- uses: actions/upload-artifact@v3
with:
name: wheels
path: target/wheels
retention-days: 1
release:
if: startsWith(github.ref, 'refs/tags/')
name: Release
runs-on: ubuntu-latest
needs: [
build-linux-x86_64,
build-linux-cross,
build-windows,
build-macos-universal,
build-sdist,
]
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
path: wheels
- uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: wheels/