-
Notifications
You must be signed in to change notification settings - Fork 0
166 lines (148 loc) · 5.84 KB
/
Copy pathbuild-hdf5plugin.yml
File metadata and controls
166 lines (148 loc) · 5.84 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
166
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on the `build_wheels` job of
# https://github.com/silx-kit/hdf5plugin/blob/7.0.0/.github/workflows/release.yml
name: Build hdf5plugin wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/hdf5plugin.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-hdf5plugin.yml'
- 'docs/packages/hdf5plugin.yaml'
- 'patches/hdf5plugin/**'
push:
branches: [main]
paths:
- '.github/workflows/build-hdf5plugin.yml'
- 'docs/packages/hdf5plugin.yaml'
- 'patches/hdf5plugin/**'
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: hdf5plugin
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
name: Build hdf5plugin ${{ matrix.version }} py3-none-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 90
env:
HDF5PLUGIN_VERSION: ${{ matrix.version }}
steps:
# lib/bitshuffle/zstd and two lib/snappy/third_party/ paths are gitlinks with
# no corresponding .gitmodules entry upstream, which makes actions/checkout's
# own persist-credentials cleanup (`git submodule foreach`) fail with "No url
# found for submodule path"; plain git sidesteps that internal routine.
- name: Checkout hdf5plugin v${{ env.HDF5PLUGIN_VERSION }}
run: |
set -euo pipefail
shopt -s dotglob
rm -rf ./*
git init -q .
git remote add origin https://github.com/silx-kit/hdf5plugin
git fetch -q --depth=1 origin "v${{ env.HDF5PLUGIN_VERSION }}"
git checkout -q FETCH_HEAD
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false
- name: Patch hdf5plugin source
run: git apply python-wheels/patches/hdf5plugin/${{ env.HDF5PLUGIN_VERSION }}/*.patch
- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
# setup.py's BDistWheel.get_tag() forces py3-none, so one build serves every interpreter.
only: cp312-manylinux_riscv64
env:
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# Mirrors release.yml's non-x86 matrix entries (with_sse2: false): a portable
# build with no host-native SIMD/OpenMP baked in. HDF5PLUGIN_BMI2 is left at
# its default (True on Linux) -- zstd's BMI2 asm self-gates on __x86_64__, a
# no-op here, same as upstream leaves it for ppc64le/aarch64.
CIBW_ENVIRONMENT: >-
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
PIP_ONLY_BINARY=numpy,h5py,blosc2
HDF5PLUGIN_OPENMP=False
HDF5PLUGIN_NATIVE=False
HDF5PLUGIN_SSE2=False
HDF5PLUGIN_SSSE3=False
HDF5PLUGIN_AVX2=False
HDF5PLUGIN_AVX512=False
HDF5PLUGIN_CPP11=True
HDF5PLUGIN_CPP14=True
HDF5PLUGIN_CPP20=True
CIBW_BEFORE_TEST: pip install packaging h5py blosc2 --only-binary ":all:"
CIBW_TEST_COMMAND: python {project}/test/test.py
- name: Check wheel contents
run: |
python3 - wheelhouse/*.whl <<'EOF'
import os, sys, zipfile
names = zipfile.ZipFile(sys.argv[1]).namelist()
plugins = {n.rsplit("/", 1)[1] for n in names
if n.startswith("hdf5plugin/plugins/") and n.endswith(".so")}
expected = {
"libh5blosc.so",
"libh5blosc2.so",
"libh5bshuf.so",
"libh5bzip2.so",
"libh5fcidecomp.so",
"libh5lz4.so",
"libh5sperr.so",
"libh5sz.so",
"libh5sz3.so",
"libh5zfp.so",
"libh5zstd.so",
}
licence_count = 35
# 7.1.0 adds the HTJ2K filter, which brings h5z-htj2k and the OpenJPH
# it vendors, hence two more licences.
if tuple(int(p) for p in os.environ["HDF5PLUGIN_VERSION"].split(".")) >= (7, 1):
expected.add("libh5htj2k.so")
licence_count += 2
assert plugins == expected, plugins
licences = {n.split(".dist-info/licenses/", 1)[1] for n in names
if ".dist-info/licenses/" in n and not n.endswith("/")}
assert len(licences) == licence_count, licences
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: hdf5plugin-${{ env.HDF5PLUGIN_VERSION }}-py3-none-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish hdf5plugin ${{ 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: hdf5plugin-${{ matrix.version }}-*-manylinux_riscv64