-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (115 loc) · 4.5 KB
/
Copy pathbuild-caio.yml
File metadata and controls
130 lines (115 loc) · 4.5 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
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on the `wheels-linux-*` jobs of
# https://github.com/mosquito/caio/blob/0.12.2/.github/workflows/publish.yml
name: Build caio wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/caio.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-caio.yml'
- 'docs/packages/caio.yaml'
- 'patches/caio/**'
push:
branches: [main]
paths:
- '.github/workflows/build-caio.yml'
- 'docs/packages/caio.yaml'
- 'patches/caio/**'
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: caio
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build caio ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
python: ["cp312", "cp313", "cp314", "cp314t"]
env:
CAIO_VERSION: ${{ matrix.version }}
steps:
- name: Checkout caio ${{ env.CAIO_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: mosquito/caio
ref: ${{ env.CAIO_VERSION }}
persist-credentials: false
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false
# The free-threading stress cases size their waits for upstream's CI: the
# heaviest ones queue thousands of completions against a 20-30s budget
# that four riscv64 cores cannot meet, and one waits on a different event
# from the one it asserts.
- name: Patch caio source
run: git apply python-wheels/patches/caio/${{ env.CAIO_VERSION }}/*.patch
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
with:
enable-cache: false
# pyproject.toml carries a stale placeholder version; upstream's release
# job stamps the real one from the tag before building.
- name: Set version from tag
run: |
uv version --frozen "${CAIO_VERSION}"
grep -qx "version = \"${CAIO_VERSION}\"" pyproject.toml
- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
env:
CIBW_ARCHS: riscv64
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# The default seccomp profile blocks io_uring, which would make the
# linux_uring backend unimportable and skip a third of the suite.
CIBW_CONTAINER_ENGINE: "docker; create_args: --security-opt=seccomp=unconfined"
CIBW_TEST_SOURCES: tests pyproject.toml
CIBW_TEST_REQUIRES: pytest aiomisc-pytest pytest-rerunfailures
CIBW_TEST_COMMAND: >-
python -c "import caio.thread_aio as t, caio.linux_aio as l, caio.linux_uring as u;
assert t.__file__.endswith('.so'), t.__file__;
assert l.__file__.endswith('.so'), l.__file__;
assert u.__file__.endswith('.so'), u.__file__" &&
python -m pytest -v tests
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: caio-${{ env.CAIO_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: ./wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish caio ${{ 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: caio-${{ matrix.version }}-*-manylinux_riscv64