Skip to content

update: add before-script for aarch64 target in Docker options #7

update: add before-script for aarch64 target in Docker options

update: add before-script for aarch64 target in Docker options #7

Workflow file for this run

name: Release
on:
push:
tags:
- "v*.*.*"
workflow_dispatch:
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
linux:
name: Linux ${{ matrix.target }} py3.10-3.14
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-22.04
target: x86_64
container: quay.io/pypa/manylinux_2_28_x86_64:latest
docker_options: -e V8_FROM_SOURCE=1 -e EXTRA_GN_ARGS=v8_enable_temporal_support=false
- runner: ubuntu-24.04-arm
target: aarch64
container: quay.io/pypa/manylinux_2_28_aarch64:latest
docker_options: -e V8_FROM_SOURCE=1 -e EXTRA_GN_ARGS=v8_enable_temporal_support=false -e DISABLE_CLANG=1
steps:
- uses: actions/checkout@v4
- name: Build wheel
uses: PyO3/maturin-action@v1
env:
# rusty_v8's prebuilt Linux archive uses a TLS model that cannot be
# linked into a Python extension module. Source builds inject
# V8_TLS_USED_IN_LIBRARY through the v8 crate build script.
V8_FROM_SOURCE: "1"
# The crates.io v8 archive does not include Chromium's
# third_party/rust/chromium_crates_io/vendor tree needed by the
# Temporal Rust dependency, so avoid generating those GN targets.
EXTRA_GN_ARGS: v8_enable_temporal_support=false
with:
target: ${{ matrix.target }}
# Source-building V8 needs Chromium's `gn` binary, which requires
# GLIBC_2.18+. manylinux2014 only has glibc 2.17, so use 2_28 here.
manylinux: "2_28"
container: ${{ matrix.container }}
# Chromium's downloaded clang is Linux x64 only in this crate. The
# aarch64 job passes DISABLE_CLANG=1 through this matrix value.
docker-options: ${{ matrix.docker_options }}
before-script-linux: |
if [ "${{ matrix.target }}" = "aarch64" ]; then
ln -sf "$(command -v gcc)" /usr/local/bin/aarch64-linux-gnu-gcc
ln -sf "$(command -v g++)" /usr/local/bin/aarch64-linux-gnu-g++
ln -sf "$(command -v ar)" /usr/local/bin/aarch64-linux-gnu-ar
ln -sf "$(command -v nm)" /usr/local/bin/aarch64-linux-gnu-nm
ln -sf "$(command -v ranlib)" /usr/local/bin/aarch64-linux-gnu-ranlib
fi
args: >-
--release
--out dist
--interpreter python3.10 python3.11 python3.12 python3.13 python3.14
sccache: true
- name: Upload wheel
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: dist
if-no-files-found: error
windows:
name: Windows ${{ matrix.target }} py${{ matrix.python.version }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: windows-latest
target: x64
python:
architecture: x64
version: "3.10"
tag: cp310
- runner: windows-latest
target: x64
python:
architecture: x64
version: "3.11"
tag: cp311
- runner: windows-latest
target: x64
python:
architecture: x64
version: "3.12"
tag: cp312
- runner: windows-latest
target: x64
python:
architecture: x64
version: "3.13"
tag: cp313
- runner: windows-latest
target: x64
python:
architecture: x64
version: "3.14"
tag: cp314
- runner: windows-11-arm
target: aarch64
python:
architecture: arm64
version: "3.11"
tag: cp311
- runner: windows-11-arm
target: aarch64
python:
architecture: arm64
version: "3.12"
tag: cp312
- runner: windows-11-arm
target: aarch64
python:
architecture: arm64
version: "3.13"
tag: cp313
- runner: windows-11-arm
target: aarch64
python:
architecture: arm64
version: "3.14"
tag: cp314
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python.version }}
architecture: ${{ matrix.python.architecture }}
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --interpreter python
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheel
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}-${{ matrix.python.tag }}
path: dist
if-no-files-found: error
macos:
name: macOS ${{ matrix.platform.target }} py${{ matrix.python.version }}
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
python:
- version: "3.10"
tag: cp310
- version: "3.11"
tag: cp311
- version: "3.12"
tag: cp312
- version: "3.13"
tag: cp313
- version: "3.14"
tag: cp314
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: ${{ matrix.python.version }}
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --interpreter python
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheel
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}-${{ matrix.python.tag }}
path: dist
if-no-files-found: error
sdist:
name: Source distribution
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: sdist
path: dist
if-no-files-found: error
publish:
name: Publish to PyPI
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
needs: [linux, windows, macos, sdist]
permissions:
contents: read
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- uses: astral-sh/setup-uv@v4
- name: Publish distributions
run: uv publish dist/*