Skip to content

Deploy C++

Deploy C++ #50

Workflow file for this run

name: Deploy C++
on:
workflow_dispatch:
inputs:
publish-pypi:
type: boolean
description: Publish to PyPI
jobs:
determine-source-date-epoch:
name: "Determine SOURCE_DATE_EPOCH"
runs-on: ubuntu-latest
outputs:
source-date-epoch: ${{ steps.log.outputs.source-date-epoch }}
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: Make 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-sdist
path: awkward-cpp/dist/*.tar.gz
build_wheels:
needs: [determine-source-date-epoch]
name: "Wheel: ${{ 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-latest]
arch: [auto64]
build: ["cp*", "pp*"]
include:
- os: macos-latest
type: "Universal"
arch: universal2
build: "cp*"
- os: windows-latest
arch: auto64
build: "cp*"
- os: windows-latest
arch: auto32
build: "cp{38,39}-*"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Prepare build files
run: pipx run nox -s prepare
- uses: pypa/cibuildwheel@v2.16.2
env:
CIBW_BUILD: ${{ matrix.build }}
CIBW_ARCHS: ${{ matrix.arch }}
with:
config-file: cibuildwheel.toml
package-dir: awkward-cpp
- name: Check metadata
shell: python
run: |
import subprocess, glob
subprocess.run(
["pipx", "run", "twine", "check", *glob.glob("wheelhouse/*.whl")],
check=True
)
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: awkward-wheels-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.build }}
path: wheelhouse/*.whl
build_alt_wheels:
needs: [determine-source-date-epoch]
name: "Wheel: ${{ 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: [38, 39, 310, 311, 312]
arch: [aarch64]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Prepare build files
run: pipx run nox -s prepare
- uses: docker/setup-qemu-action@v3.0.0
- uses: pypa/cibuildwheel@v2.16.2
env:
CIBW_BUILD: cp${{ matrix.python }}-*
CIBW_ARCHS: ${{ matrix.arch }}
with:
config-file: cibuildwheel.toml
package-dir: awkward-cpp
- name: Check metadata
shell: python
run: |
import subprocess, glob
subprocess.run(
["pipx", "run", "twine", "check", *glob.glob("wheelhouse/*.whl")],
check=True
)
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: awkward-wheels-${{ matrix.arch }}-py${{ matrix.python }}
path: wheelhouse/*.whl
upload_all:
needs: [build_wheels, build_alt_wheels, make_sdist]
runs-on: ubuntu-latest
if: inputs.publish-pypi
permissions:
id-token: write
environment:
name: "pypi"
url: "https://pypi.org/project/awkward-cpp/"
steps:
- uses: actions/download-artifact@v4
with:
pattern: "awkward*"
path: dist
- uses: pypa/gh-action-pypi-publish@v1.8.11