-
Notifications
You must be signed in to change notification settings - Fork 0
165 lines (149 loc) · 5.92 KB
/
Copy pathbuild-awkward-cpp.yml
File metadata and controls
165 lines (149 loc) · 5.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on the `make_sdist`/`build_wheels` jobs of
# https://github.com/scikit-hep/awkward/blob/cef1a524fb52896b86ef505526f2fe4689f5e217/.github/workflows/reusable-build-wheels.yml
name: Build awkward-cpp wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/awkward-cpp.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-awkward-cpp.yml'
- 'docs/packages/awkward-cpp.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-awkward-cpp.yml'
- 'docs/packages/awkward-cpp.yaml'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
env:
# awkward-cpp is released from the scikit-hep/awkward monorepo by a
# workflow_dispatch-only job (deploy-cpp.yml) that never pushes a git tag
# (gotcha 103). This is the version-bump commit ("awkward 2.13.0 and
# awkward-cpp 56"), verified byte-identical to the PyPI sdist. Update
# alongside AWKWARD_CPP_VERSION.
AWKWARD_CPP_REF: cef1a524fb52896b86ef505526f2fe4689f5e217
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64
jobs:
setup:
uses: $/.github/workflows/_setup.yml
with:
package: awkward-cpp
version: ${{ inputs.version }}
build_sdist:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
# The sdist is architecture-independent; build it once on x86 instead of
# burning a scarce riscv runner (CLAUDE.md gotcha 4).
name: Build awkward-cpp ${{ matrix.version }} sdist
runs-on: ubuntu-latest
permissions:
contents: read
env:
AWKWARD_CPP_VERSION: ${{ matrix.version }}
steps:
- name: Checkout scikit-hep/awkward ${{ env.AWKWARD_CPP_REF }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: scikit-hep/awkward
ref: ${{ env.AWKWARD_CPP_REF }}
# rapidjson is a submodule of awkward-cpp/, and its LICENSE is one of
# the project's declared license-files.
submodules: true
persist-credentials: false
- name: Prepare build files
run: pipx run nox -s prepare
- name: Build awkward-cpp sdist
id: sdist
run: |
pipx run build --sdist awkward-cpp
pipx run twine check awkward-cpp/dist/*
- name: Upload sdist artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: awkward-cpp-${{ env.AWKWARD_CPP_VERSION }}-sdist
path: awkward-cpp/dist/*.tar.gz
if-no-files-found: error
build_wheels:
needs: [setup, build_sdist]
if: needs.setup.outputs.versions != '[]'
name: Build awkward-cpp ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 180
permissions:
contents: read
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
python: [cp312, cp313, cp314, cp314t]
env:
AWKWARD_CPP_VERSION: ${{ matrix.version }}
steps:
- name: Download sdist
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: awkward-cpp-${{ env.AWKWARD_CPP_VERSION }}-sdist
path: dist/
- id: sdist_path
run: echo "path=$(echo dist/*.tar.gz)" >> "$GITHUB_OUTPUT"
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
package-dir: ${{ steps.sdist_path.outputs.path }}
env:
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# Override upstream's build-frontend = "build[uv]": cibuildwheel's
# audit step makes a venv on the host and asserts a host `uv`
# exists, which this self-hosted runner has none of (gotcha 13).
CIBW_BUILD_FRONTEND: build
CIBW_ENVIRONMENT: >-
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
PIP_ONLY_BINARY=cmake,numpy
CIBW_TEST_REQUIRES: pytest>=6
CIBW_TEST_SOURCES: >-
tests-cpu-kernels tests-cpu-kernels-explicit
tests-spec tests-spec-explicit
# Upstream's own test-command also runs {project}/tests, which is
# the parent `awkward` package's suite (imports `awkward`, not
# awkward_cpp) - out of scope here since we only build awkward-cpp
# and `awkward` has no riscv64 wheel of its own.
CIBW_TEST_COMMAND: >-
pytest {package}/tests-cpu-kernels {package}/tests-cpu-kernels-explicit
{package}/tests-spec {package}/tests-spec-explicit
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: awkward-cpp-${{ env.AWKWARD_CPP_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: ./wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish awkward-cpp ${{ matrix.version }}
needs: [setup, build_wheels]
if: needs.setup.outputs.versions != '[]'
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
permissions:
contents: write
pull-requests: write
uses: $/.github/workflows/_publish-wheel.yml
secrets:
app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }}
with:
artifact-pattern: awkward-cpp-${{ matrix.version }}-*-manylinux_riscv64