Skip to content

Build wheels

Build wheels #344

Workflow file for this run

name: Build wheels
on:
# Run daily at 1:23 UTC
schedule:
- cron: '23 1 * * *'
# Run on demand with workflow dispatch
workflow_dispatch:
# Use from other workflows
workflow_call:
pull_request:
paths:
- .github/workflows/build-wheels.yml
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
determine-source-date-epoch:
name: "Determine SOURCE_DATE_EPOCH"
runs-on: ubuntu-latest
outputs:
source-date-epoch: ${{ steps.log.outputs.source-date-epoch }}
if: github.repository_owner == 'scikit-hep'
steps:
- uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- id: log
name: Compute SOURCE_DATE_EPOCH
run: |
# Find latest unix timestamp in awkward-cpp, and the kernel generation files
epoch=$( git log -1 --format=%at -- awkward-cpp kernel-specification.yml kernel-test-data.json )
echo "source-date-epoch=$epoch" >> $GITHUB_OUTPUT
make_sdist:
name: "Build awkward-cpp sdist"
runs-on: ubuntu-latest
needs: [determine-source-date-epoch]
env:
SOURCE_DATE_EPOCH: ${{ needs.determine-source-date-epoch.outputs.source-date-epoch }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Prepare build files
run: pipx run nox -s prepare
- name: Build awkward-cpp sdist
run: pipx run build --sdist awkward-cpp
- name: Check metadata
run: pipx run twine check awkward-cpp/dist/*
- uses: actions/upload-artifact@v4
with:
name: awkward-cpp-sdist
path: awkward-cpp/dist/*.tar.gz
build_wheels:
needs: [determine-source-date-epoch]
name: "Wheel awkward-cpp: ${{ matrix.type }} ${{ matrix.arch }} on ${{ matrix.os }} with ${{ matrix.build }}"
runs-on: ${{ matrix.os }}
env:
SOURCE_DATE_EPOCH: ${{ needs.determine-source-date-epoch.outputs.source-date-epoch }}
strategy:
matrix:
os: [ubuntu-latest, macos-13]
arch: [auto64]
build: ["cp", "pp"]
include:
- os: macos-13
type: "Universal"
arch: universal2
build: "cp"
- os: windows-latest
arch: auto64
build: "cp"
- os: windows-latest
arch: auto32
build: "cp"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Python 3.12
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Setup uv
uses: astral-sh/setup-uv@v4
- name: Prepare build files
run: pipx run nox -s prepare
- uses: pypa/cibuildwheel@v2.22
env:
CIBW_BUILD: "${{ matrix.build }}*"
CIBW_ARCHS: ${{ matrix.arch }}
with:
config-file: cibuildwheel.toml
package-dir: awkward-cpp
- name: Check metadata
run: pipx run twine check wheelhouse/*.whl
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: awkward-cpp-wheels-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.build }}
path: wheelhouse/*.whl
build_alt_wheels:
needs: [determine-source-date-epoch]
name: "Wheel awkward-cpp: ${{ matrix.python }} on ${{ matrix.arch }}"
runs-on: ubuntu-latest
env:
SOURCE_DATE_EPOCH: ${{ needs.determine-source-date-epoch.outputs.source-date-epoch }}
strategy:
matrix:
python: [39, 310, 311, 312, 313]
arch: [aarch64]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Python 3.12
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Setup uv
uses: astral-sh/setup-uv@v4
- name: Prepare build files
run: pipx run nox -s prepare
- uses: docker/setup-qemu-action@v3.2.0
- uses: pypa/cibuildwheel@v2.22
env:
CIBW_BUILD: cp${{ matrix.python }}-*
CIBW_ARCHS: ${{ matrix.arch }}
with:
config-file: cibuildwheel.toml
package-dir: awkward-cpp
- name: Check metadata
run: pipx run twine check wheelhouse/*.whl
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: awkward-cpp-wheels-${{ matrix.arch }}-py${{ matrix.python }}
path: wheelhouse/*.whl
build_awkward_wheel:
name: "Build awkward sdist and wheel"
runs-on: ubuntu-latest
needs: [determine-source-date-epoch]
env:
SOURCE_DATE_EPOCH: ${{ needs.determine-source-date-epoch.outputs.source-date-epoch }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup uv
uses: astral-sh/setup-uv@v4
- name: Prepare build files
run: pipx run nox -s prepare
- name: Build distributions
run: pipx run build --installer uv
- name: Check metadata
run: pipx run twine check dist/*
- uses: actions/upload-artifact@v4
with:
name: awkward-wheel
path: dist/*