outlines-core 0.2.14

Structured Generation
Documentation
name: Build Wheels

on:
  workflow_call:
    inputs:
      auto_bump:
        description: 'Bump version automatically'
        type: boolean
        required: false
        default: false

jobs:
  linux:
    name: Build ${{ matrix.platform.runner}} ${{ matrix.platform.target }}
    runs-on: ${{ matrix.platform.runner }}
    strategy:
      matrix:
        platform:
          # Older ubuntu to avoid messing with glibc version since glibc is forward compatible,
          # but not backwards compatible (since about glibc 2.2 or 2.4)
          # All programs built against an older glibc work on a system with a newer glibc than
          # it was built with. The reverse is not true.
          - runner: ubuntu-22.04
            target: x86_64
            manylinux: auto
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"
          - runner: ubuntu-22.04
            target: aarch64
            manylinux: manylinux_2_28
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.14"

      - run: pip install -U twine

      - name: Install required packages
        run: |
          sudo apt update
          sudo apt install pkg-config gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -qy

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          target: ${{ matrix.platform.target}}-unknown-linux-gnu
      - uses: Swatinem/rust-cache@v2

      - name: Bump version in Cargo.toml
        if: ${{ inputs.auto_bump }}
        uses: ./.github/actions/bump_version

      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.platform.target }}
          args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
          manylinux: ${{ matrix.platform.manylinux }}

      - name: Validate Python package distributions
        run: twine check --strict dist/*

      - name: Install built wheel
        if: matrix.platform.target == 'x86_64'
        run: |
          pip install outlines_core --no-index --find-links dist --force-reinstall
          cd outlines_core
          python -c "import outlines_core"

      - uses: actions/upload-artifact@v4
        with:
          path: dist/*.whl
          name: wheels-linux-${{ matrix.platform.target }}

  windows:
    name: Build ${{ matrix.platform.runner}} ${{ matrix.platform.target }}
    runs-on: ${{ matrix.platform.runner }}
    strategy:
      matrix:
        platform:
          - runner: windows-latest
            target: x86
            alias-target: i686-pc-windows-msvc
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"
          - runner: windows-latest
            target: x64
            alias-target: x86_64-pc-windows-msvc
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.14"
          architecture: ${{ matrix.platform.target }}

      - run: pip install -U twine

      - name: Install required packages
        # rustls requires aws-lc-sys, which FFI bindings to AWS-LC (AWS Libcrypto)
        # aws-lc-sys requires nasm for compilation on windows
        run: |
          choco install nasm

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          target: ${{ matrix.platform.alias-target}}
      - uses: Swatinem/rust-cache@v2

      - name: Bump version in Cargo.toml
        if: ${{ inputs.auto_bump }}
        uses: ./.github/actions/bump_version

      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.platform.target }}
          args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
          manylinux: auto

      - name: Validate Python package distributions
        run: twine check --strict dist/*

      - name: Install built wheel
        run: |
          pip install outlines_core --no-index --find-links dist --force-reinstall
          cd outlines_core
          python -c "import outlines_core"

      - uses: actions/upload-artifact@v4
        with:
          path: dist/*.whl
          name: wheels-windows-${{ matrix.platform.target }}

  macos:
    name: Build ${{ matrix.platform.runner}} ${{ matrix.platform.target }}
    runs-on: ${{ matrix.platform.runner }}
    strategy:
      matrix:
        platform:
          - runner: macos-14
            target: x86_64
            macos_version: "14.0"
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"
          - runner: macos-14
            target: aarch64
            macos_version: "14.0"
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"
          - runner: macos-15
            target: x86_64
            macos_version: "15.0"
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"
          - runner: macos-15
            target: aarch64
            macos_version: "15.0"
            interpreter: "3.9 3.10 3.11 3.12 3.13 3.14"

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.14"

      - run: pip install -U twine

      - name: Set macOS version
        run: echo "MACOSX_DEPLOYMENT_TARGET=${{ matrix.platform.macos_version }}" >> $GITHUB_ENV

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          target: ${{ matrix.platform.target}}-apple-darwin
      - uses: Swatinem/rust-cache@v2

      - name: Bump version in Cargo.toml
        if: ${{ inputs.auto_bump }}
        uses: ./.github/actions/bump_version

      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.platform.target }}
          args: --release --out dist --interpreter ${{ matrix.platform.interpreter }}
          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
          manylinux: auto

      - name: Validate Python package distributions
        run: twine check --strict dist/*

      - name: Install built wheel
        if: matrix.platform.target == 'aarch64'
        run: |
          pip install outlines_core --no-index --find-links dist --force-reinstall
          cd outlines_core
          python -c "import outlines_core"

      - uses: actions/upload-artifact@v4
        with:
          path: dist/*.whl
          name: wheels-${{ matrix.platform.runner }}-${{ matrix.platform.target }}


  build_sdist:
    name: Build source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Bump Cargo version
        if: ${{ inputs.auto_bump }}
        uses: ./.github/actions/bump_version

      - name: Build sdist with Maturin
        uses: PyO3/maturin-action@v1
        with:
          command: sdist
          args: --out dist

      - uses: actions/upload-artifact@v4
        with:
          path: dist/*.tar.gz
          name: sdist