mirror of
https://github.com/abetlen/llama-cpp-python.git
synced 2026-03-26 07:21:25 +00:00
* fix(ci): harden release wheel workflow * fix(ci): document and pin release wheel baselines * fix(ci): speed up release arch builds * fix(ci): split riscv64 by python version * fix(ci): sanitize riscv64 artifact names
204 lines
5.9 KiB
YAML
204 lines
5.9 KiB
YAML
name: Build Release
|
|
|
|
on: workflow_dispatch
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build_wheels:
|
|
name: Build wheels on ${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-22.04, windows-2022, macos-14, macos-15]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
# Used to host cibuildwheel
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.9"
|
|
|
|
- name: Install dependencies (Linux/MacOS)
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install uv
|
|
RUST_LOG=trace python -m uv pip install -e .[all] --verbose
|
|
shell: bash
|
|
|
|
- name: Install dependencies (Windows)
|
|
if: runner.os == 'Windows'
|
|
env:
|
|
RUST_LOG: trace
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install uv
|
|
python -m uv pip install -e .[all] --verbose
|
|
shell: cmd
|
|
|
|
- name: Build wheels
|
|
uses: pypa/cibuildwheel@v2.22.0
|
|
env:
|
|
# disable repair
|
|
CIBW_REPAIR_WHEEL_COMMAND: ""
|
|
# Skip cibuildwheel's default i686 sidecar and keep Linux release
|
|
# wheels on a portable x86_64 CPU baseline.
|
|
CIBW_ARCHS_LINUX: "auto64"
|
|
CIBW_ENVIRONMENT_LINUX: CMAKE_ARGS="-DGGML_NATIVE=off"
|
|
# Keep macOS release wheels on a portable CPU baseline instead of
|
|
# inheriting the hosted runner's native flags.
|
|
CIBW_ENVIRONMENT_MACOS: CMAKE_ARGS="-DGGML_NATIVE=off"
|
|
with:
|
|
package-dir: .
|
|
output-dir: wheelhouse
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: wheels-${{ matrix.os }}
|
|
path: ./wheelhouse/*.whl
|
|
|
|
build_wheels_arm64:
|
|
name: Build arm64 wheels
|
|
runs-on: ubuntu-24.04-arm
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Build wheels
|
|
uses: pypa/cibuildwheel@v2.22.0
|
|
env:
|
|
CIBW_SKIP: "*musllinux* pp*"
|
|
CIBW_REPAIR_WHEEL_COMMAND: ""
|
|
CIBW_ARCHS: "aarch64"
|
|
# Keep native arm64 builds on a portable CPU baseline instead of
|
|
# tuning wheels to the hosted runner.
|
|
CIBW_ENVIRONMENT: CMAKE_ARGS="-DGGML_NATIVE=off"
|
|
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*"
|
|
with:
|
|
output-dir: wheelhouse
|
|
|
|
- name: Upload wheels as artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: wheels_arm64
|
|
path: ./wheelhouse/*.whl
|
|
|
|
build_wheels_riscv64:
|
|
name: Build riscv64 wheels (${{ matrix.shard.name }})
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
shard:
|
|
- name: cp310
|
|
build: "cp310-*"
|
|
artifact: wheels_riscv64_cp310
|
|
- name: cp311
|
|
build: "cp311-*"
|
|
artifact: wheels_riscv64_cp311
|
|
- name: cp312
|
|
build: "cp312-*"
|
|
artifact: wheels_riscv64_cp312
|
|
- name: cp313
|
|
build: "cp313-*"
|
|
artifact: wheels_riscv64_cp313
|
|
- name: cp314
|
|
build: "cp314-*"
|
|
artifact: wheels_riscv64_cp314
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v3
|
|
with:
|
|
platforms: linux/riscv64
|
|
|
|
- name: Build wheels
|
|
uses: pypa/cibuildwheel@v3.1.2
|
|
env:
|
|
CIBW_SKIP: "*musllinux* pp*"
|
|
CIBW_REPAIR_WHEEL_COMMAND: ""
|
|
CIBW_ARCHS: "riscv64"
|
|
# Build riscv64 wheels against a conservative baseline instead of
|
|
# enabling RVV-related extensions from the build container.
|
|
CIBW_ENVIRONMENT: CMAKE_ARGS="-DGGML_NATIVE=off -DGGML_RVV=off -DGGML_RV_ZFH=off -DGGML_RV_ZVFH=off -DGGML_RV_ZICBOP=off -DGGML_RV_ZIHINTPAUSE=off"
|
|
# Split the emulated riscv64 build into one Python version per job
|
|
# to minimize wall-clock time without changing the release artifacts.
|
|
CIBW_BUILD: ${{ matrix.shard.build }}
|
|
with:
|
|
output-dir: wheelhouse
|
|
|
|
- name: Upload wheels as artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.shard.artifact }}
|
|
path: ./wheelhouse/*.whl
|
|
|
|
build_sdist:
|
|
name: Build source distribution
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.9"
|
|
|
|
- name: Install dependencies (Linux/MacOS)
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install uv
|
|
RUST_LOG=trace python -m uv pip install -e .[all] --verbose
|
|
python -m uv pip install build
|
|
shell: bash
|
|
|
|
- name: Install dependencies (Windows)
|
|
if: runner.os == 'Windows'
|
|
env:
|
|
RUST_LOG: trace
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install uv
|
|
python -m uv pip install -e .[all] --verbose
|
|
python -m uv pip install build
|
|
shell: cmd
|
|
|
|
- name: Build source distribution
|
|
run: |
|
|
python -m build --sdist
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sdist
|
|
path: ./dist/*.tar.gz
|
|
|
|
release:
|
|
name: Release
|
|
needs: [build_wheels, build_wheels_arm64, build_wheels_riscv64, build_sdist]
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
merge-multiple: true
|
|
path: dist
|
|
|
|
- uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: dist/*
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|