-
Notifications
You must be signed in to change notification settings - Fork 0
144 lines (130 loc) · 5.61 KB
/
Copy pathbuild-python-stretch.yml
File metadata and controls
144 lines (130 loc) · 5.61 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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on upstream's own wheel build setup:
# https://github.com/gregogiudici/python-stretch/blob/ac1fbfc9f5d6b912e2a9248d8e0f53888846588b/.github/workflows/wheels.yml
# https://github.com/gregogiudici/python-stretch/blob/ac1fbfc9f5d6b912e2a9248d8e0f53888846588b/pyproject.toml
name: Build python-stretch wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/python-stretch.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-python-stretch.yml'
- 'docs/packages/python-stretch.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-python-stretch.yml'
- 'docs/packages/python-stretch.yaml'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
env:
# Upstream releases without git tags; this is the 0.3.1 release commit, byte-identical
# to the PyPI sdist (submodule included). Update alongside the version in the docs YAML.
PYTHON_STRETCH_REF: ac1fbfc9f5d6b912e2a9248d8e0f53888846588b
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64
MUSLLINUX_RISCV64_IMAGE: quay.io/pypa/musllinux_1_2_riscv64
jobs:
setup:
uses: $/.github/workflows/_setup.yml
with:
package: python-stretch
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build python-stretch ${{ matrix.version }} cp312-abi3-${{ matrix.libc }}_riscv64
runs-on: ubuntu-24.04-riscv
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
libc: [manylinux, musllinux]
include:
- libc: manylinux
test_requires: pytest numpy
test_command: pytest {project}/tests
# No musllinux riscv64 numpy wheel exists, and every process() call takes one.
- libc: musllinux
test_requires: ''
test_command: >-
python -c "import python_stretch as ps;
s = ps.Signalsmith.Stretch();
s.preset(2, 44100.0);
s.setTimeFactor(0.5);
s.setTransposeSemitones(12);
assert (s.blockSamples(), s.intervalSamples(), s.inputLatency()) == (5292, 1323, 2646), (s.blockSamples(), s.intervalSamples(), s.inputLatency());
print('python_stretch OK')"
env:
PYTHON_STRETCH_VERSION: ${{ matrix.version }}
steps:
- name: Checkout python-stretch ${{ env.PYTHON_STRETCH_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: gregogiudici/python-stretch
ref: ${{ env.PYTHON_STRETCH_REF }}
submodules: true
persist-credentials: false
- name: Check version
run: grep -qx "version = \"${PYTHON_STRETCH_VERSION}\"" pyproject.toml
- name: Stage bundled licences
run: |
cp include/stretch/LICENSE.txt LICENSE.signalsmith-stretch.txt
cp include/stretch/dsp/LICENSE.txt LICENSE.signalsmith-dsp.txt
- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
env:
CIBW_BEFORE_BUILD: >-
python -m pip install nanobind &&
python -c "import importlib.metadata as m, shutil; shutil.copy(next(f.locate() for f in m.files('nanobind') if f.name == 'LICENSE'), '{project}/LICENSE.nanobind')"
CIBW_ARCHS: riscv64
CIBW_BUILD: >-
cp312-${{ matrix.libc }}_riscv64
cp313-${{ matrix.libc }}_riscv64
cp314-${{ matrix.libc }}_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
CIBW_MUSLLINUX_RISCV64_IMAGE: ${{ env.MUSLLINUX_RISCV64_IMAGE }}
CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
CIBW_TEST_REQUIRES: ${{ matrix.test_requires }}
CIBW_TEST_COMMAND: ${{ matrix.test_command }}
- name: Check the bundled licences made it into the wheel
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
expected = {"LICENSE", "LICENSE.signalsmith-stretch.txt", "LICENSE.signalsmith-dsp.txt", "LICENSE.nanobind"}
for whl in sys.argv[1:]:
names = zipfile.ZipFile(whl).namelist()
found = {n.rsplit("/", 1)[1] for n in names if ".dist-info/licenses/" in n}
assert expected <= found, f"{whl}: missing {expected - found}"
assert "-cp312-abi3-" in whl, whl
print(whl, sorted(found))
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: python-stretch-${{ env.PYTHON_STRETCH_VERSION }}-cp312-abi3-${{ matrix.libc }}_riscv64
path: ./wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish python-stretch ${{ 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: python-stretch-${{ matrix.version }}-*riscv64