Repository navigation
137 lines (125 loc) · 5.12 KB
/
Copy pathbuild-aioquic.yml
File metadata and controls
137 lines (125 loc) · 5.12 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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on: https://github.com/aiortc/aioquic/blob/1.3.0/.github/workflows/tests.yml
name: Build aioquic wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/aioquic.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-aioquic.yml'
- 'docs/packages/aioquic.yaml'
- 'patches/aioquic/**'
push:
branches: [main]
paths:
- '.github/workflows/build-aioquic.yml'
- 'docs/packages/aioquic.yaml'
- 'patches/aioquic/**'
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: aioquic
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 aioquic ${{ matrix.version }} cp310-abi3-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 90
env:
AIOQUIC_VERSION: ${{ matrix.version }}
steps:
- name: Checkout aioquic ${{ env.AIOQUIC_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: aiortc/aioquic
ref: ${{ env.AIOQUIC_VERSION }}
persist-credentials: false
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
env:
CIBW_ARCHS: riscv64
# cp310 first: setup.py forces the cp310-abi3 tag regardless of the
# build interpreter (gotcha 96); the later entries build nothing,
# they only re-test the one wheel.
CIBW_BUILD: >-
cp310-manylinux_riscv64 cp311-manylinux_riscv64 cp312-manylinux_riscv64
cp313-manylinux_riscv64 cp314-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# _crypto links libcrypto; the riscv64 image ships only the runtime
# .so, not the headers. auditwheel then vendors libcrypto (Apache-2.0)
# into the wheel without a licence, so stage one.
CIBW_BEFORE_ALL_LINUX: >-
dnf -y install openssl-devel &&
cp /usr/share/licenses/openssl-libs/LICENSE.txt {project}/LICENSE.openssl
# cryptography has no riscv64 wheel on public PyPI; PIP_ONLY_BINARY
# stops pip from picking a newer PyPI-only sdist release (which
# fails: its Rust backend has no riscv64 rustup target) over the
# older riscv64 wheel our registry carries. pylsqpack (also no
# public riscv64 wheel) builds from sdist in seconds either way.
CIBW_TEST_ENVIRONMENT: >-
AIOQUIC_SKIP_TESTS=ipv6,loss
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
PIP_ONLY_BINARY=cryptography
# cryptography 50.0.0 dropped SHA1-for-RSA-signing support, which
# breaks test_tls.py's legacy-algorithm test regardless of arch;
# cap it at the last release the suite was written against
# (gotcha 97's shape).
CIBW_TEST_REQUIRES: cryptography<50
CIBW_TEST_COMMAND: python -m unittest discover -t {project} -s {project}/tests
- name: Check the wheel ships both extensions and both licences
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
for whl in sys.argv[1:]:
names = zipfile.ZipFile(whl).namelist()
for mod in ("_buffer", "_crypto"):
assert any(n.startswith(f"aioquic/{mod}.") and n.endswith(".so")
for n in names), (whl, mod)
licences = {n.rsplit("/", 1)[1]
for n in names if ".dist-info/licenses/" in n} - {""}
assert licences == {"LICENSE", "LICENSE.openssl"}, (whl, licences)
print(whl, "ok")
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: aioquic-${{ env.AIOQUIC_VERSION }}-cp310-abi3-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish aioquic ${{ 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: aioquic-${{ matrix.version }}-*-manylinux_riscv64