Repository navigation
131 lines (119 loc) · 5.23 KB
/
Copy pathbuild-slixmpp.yml
File metadata and controls
131 lines (119 loc) · 5.23 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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# slixmpp's GitHub mirror (github.com/poezio/slixmpp) is stale (last commit
# 2022, no tags past slix-1.8.2); the project's real, actively-tagged repo is
# codeberg.org/poezio/slixmpp, which actions/checkout can't reach.
name: Build slixmpp wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/slixmpp.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-slixmpp.yml'
- 'docs/packages/slixmpp.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-slixmpp.yml'
- 'docs/packages/slixmpp.yaml'
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: slixmpp
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build slixmpp ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
# Per-interpreter: the pyo3 extension-module feature carries no abi3.
python: ["cp312", "cp313", "cp314", "cp314t"]
env:
SLIXMPP_VERSION: ${{ matrix.version }}
steps:
# codeberg.org isn't github.com, so actions/checkout can't reach it.
- name: Checkout slixmpp ${{ env.SLIXMPP_VERSION }}
run: |
git clone --depth 1 --branch "slix-${SLIXMPP_VERSION}" \
https://codeberg.org/poezio/slixmpp.git slixmpp-src
- name: Build and test wheel
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
package-dir: slixmpp-src
output-dir: wheelhouse/
only: ${{ matrix.python }}-manylinux_riscv64
env:
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# No Rust in the image; the sole extension (slixmpp.jid, a pyo3
# accelerator for the JID parser) is `optional = true`, so a
# toolchain or crate failure here would still fall back to the
# pure-Python slixmpp/jid.py rather than failing the build.
CIBW_BEFORE_ALL_LINUX: curl -sSf https://sh.rustup.rs | sh -s -- -y
CIBW_ENVIRONMENT: >-
PATH="$PATH:$HOME/.cargo/bin"
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
# pluginsdict.py imports every XEP plugin unconditionally, so
# xep_0363 (aiohttp) and xep_0454 (cryptography) must both be
# importable just to collect tests, not only for the doctest walk;
# aiodns/pyasn1/pyasn1-modules are the project's own runtime deps
# and install with the wheel. cryptography has no riscv64 wheel on
# public PyPI, hence the registry above - and none at all on
# musllinux (registry included), which is why musllinux is dropped.
CIBW_TEST_REQUIRES: aiohttp cryptography
# test_chores.py reads doap.xml and lists slixmpp/plugins/xep_* from
# disk (not from the installed wheel) relative to tests/..; stage
# just the plugins directory listing (no __init__.py in it) so it
# doesn't shadow the installed package's `import slixmpp`. Sources
# are relative to the job workspace (gotcha 5), not package-dir, so
# they keep the slixmpp-src/ prefix; cd into it to match.
CIBW_TEST_SOURCES: slixmpp-src/tests slixmpp-src/run_tests.py slixmpp-src/doap.xml slixmpp-src/slixmpp/plugins
CIBW_TEST_COMMAND: cd slixmpp-src && python run_tests.py
- name: Check the pyo3 JID accelerator built (not just the pure-Python fallback)
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
for whl in sys.argv[1:]:
names = zipfile.ZipFile(whl).namelist()
has_ext = any(n.startswith("slixmpp/jid") and n.endswith(".so") for n in names)
print(whl, "accelerated" if has_ext else "pure-Python fallback (optional extension did not build)")
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: slixmpp-${{ env.SLIXMPP_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish slixmpp ${{ 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: slixmpp-${{ matrix.version }}-*-manylinux_riscv64