Skip to content

Build Release

Build Release #194

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@v6
with:
submodules: "recursive"
# Used to host cibuildwheel
- uses: actions/setup-python@v6
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@v3.4.1
env:
# Keep repair disabled by default for non-Linux platforms in this job.
CIBW_REPAIR_WHEEL_COMMAND: ""
# Linux needs auditwheel repair so manylinux and musllinux wheels are
# published with distinct platform tags instead of generic linux tags.
CIBW_REPAIR_WHEEL_COMMAND_LINUX: "LD_LIBRARY_PATH=/project/llama_cpp/lib auditwheel repair -w {dest_dir} {wheel}"
# cibuildwheel v3 defaults to manylinux_2_28 images whose current
# GCC toolchain emits symbols newer than the policy allows.
CIBW_MANYLINUX_X86_64_IMAGE: "manylinux2014"
# The release wheel is tagged py3-none, so one build per platform
# covers all supported Python versions and avoids duplicate names.
CIBW_BUILD_LINUX: "cp38-*"
CIBW_BUILD_MACOS: "cp39-*"
CIBW_BUILD_WINDOWS: "cp39-*"
# Skip cibuildwheel's default i686 sidecar and keep Linux release
# wheels on a portable x86_64 CPU baseline.
CIBW_ARCHS_LINUX: "auto64"
CIBW_ARCHS_WINDOWS: "AMD64"
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@v7
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@v6
with:
submodules: "recursive"
- name: Build wheels
uses: pypa/cibuildwheel@v3.4.1
env:
CIBW_SKIP: "pp*"
CIBW_REPAIR_WHEEL_COMMAND: "LD_LIBRARY_PATH=$PWD/llama_cpp/lib auditwheel repair -w {dest_dir} {wheel}"
CIBW_ARCHS: "aarch64"
# Keep this consistent with the x86_64 Linux release wheels.
CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux2014"
# Keep native arm64 builds on a portable CPU baseline instead of
# tuning wheels to the hosted runner.
CIBW_ENVIRONMENT: CMAKE_ARGS="-DGGML_NATIVE=off"
# The release wheel is tagged py3-none, so one build covers all
# supported Python versions and avoids duplicate wheel names.
CIBW_BUILD: "cp38-*"
with:
output-dir: wheelhouse
- name: Upload wheels as artifacts
uses: actions/upload-artifact@v7
with:
name: wheels_arm64
path: ./wheelhouse/*.whl
build_wheels_riscv64:
name: Build riscv64 wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: "recursive"
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
with:
platforms: linux/riscv64
- name: Build wheels
uses: pypa/cibuildwheel@v3.4.1
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"
# The release wheel is tagged py3-none, so one riscv64 build is
# enough and avoids duplicate same-name release artifacts.
CIBW_BUILD: "cp310-*"
with:
output-dir: wheelhouse
- name: Upload wheels as artifacts
uses: actions/upload-artifact@v7
with:
name: wheels_riscv64
path: ./wheelhouse/*.whl
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: "recursive"
- uses: actions/setup-python@v6
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@v7
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@v8
with:
merge-multiple: true
path: dist
- uses: softprops/action-gh-release@v3
with:
files: dist/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}