-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (119 loc) · 5.15 KB
/
Copy pathbuild-numcodecs.yml
File metadata and controls
132 lines (119 loc) · 5.15 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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on upstream's wheel builder:
# https://github.com/zarr-developers/numcodecs/blob/main/.github/workflows/wheel.yaml
name: Build numcodecs wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/numcodecs.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-numcodecs.yml'
- 'docs/packages/numcodecs.yaml'
- 'patches/numcodecs/**'
push:
branches: [main]
paths:
- '.github/workflows/build-numcodecs.yml'
- 'docs/packages/numcodecs.yaml'
- 'patches/numcodecs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
env:
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64
jobs:
setup:
uses: $/.github/workflows/_setup.yml
with:
package: numcodecs
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build numcodecs ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 300
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
# Per-interpreter (not abi3): PyPI ships a cpXY-cpXY wheel for each.
# Upstream builds cp311-cp314 and publishes no free-threaded wheel.
python:
- "cp312"
- "cp313"
- "cp314"
env:
NUMCODECS_VERSION: ${{ matrix.version }}
steps:
- name: Checkout numcodecs v${{ env.NUMCODECS_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: zarr-developers/numcodecs
ref: v${{ env.NUMCODECS_VERSION }}
submodules: true
persist-credentials: false
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false
- name: Patch numcodecs source
run: git apply python-wheels/patches/numcodecs/${{ env.NUMCODECS_VERSION }}/*.patch
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
only: ${{ matrix.python }}-manylinux_riscv64
env:
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# Repeats upstream's [tool.cibuildwheel] environment, which this replaces.
# numpy resolves from our registry; the patch dirties the tree, so pin the
# version setuptools_scm would otherwise derive from git. numcodecs' own
# meson.build calls setuptools_scm.get_version() without dist_name (see
# src/numcodecs/_build_utils/gitversion.py), so only the unsuffixed
# SETUPTOOLS_SCM_PRETEND_VERSION is honored, not the _FOR_NUMCODECS form.
CIBW_ENVIRONMENT: >-
DISABLE_NUMCODECS_AVX2=1
SETUPTOOLS_SCM_PRETEND_VERSION=${{ env.NUMCODECS_VERSION }}
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
PIP_ONLY_BINARY=numpy
# test_zstd shells out to the zstd CLI, which the manylinux image lacks;
# its availability check raises instead of skipping when it is missing.
CIBW_BEFORE_TEST_LINUX: dnf -y install zstd
CIBW_TEST_EXTRAS: test,test_extras,msgpack
# Upstream's wheel job only imports numcodecs; run the bundled suite instead.
# Since 0.17.0 the suite lives in a top-level tests/ dir, not inside the
# package, so it must be staged and run directly rather than via --pyargs.
CIBW_TEST_SOURCES: tests pyproject.toml
CIBW_TEST_COMMAND: python -c "import importlib.metadata as md, numcodecs.blosc, numcodecs.zstd, numcodecs.lz4, numcodecs.vlen, numcodecs.compat_ext, numcodecs._shuffle, numcodecs.fletcher32, numcodecs.jenkins as j; assert j.__file__.endswith('.so'), j.__file__; assert any(str(p).endswith('.dist-info/licenses/LICENSE.zstd') for p in md.files('numcodecs'))" && python -m pytest tests -q
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: numcodecs-${{ env.NUMCODECS_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish numcodecs ${{ 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: numcodecs-${{ matrix.version }}-*-manylinux_riscv64