-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (121 loc) · 5 KB
/
Copy pathbuild-debugpy.yml
File metadata and controls
132 lines (121 loc) · 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
131
132
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on: https://github.com/microsoft/debugpy/blob/v1.8.21/azure-pipelines/pipelines.yaml
# (wheels come from a separate internal pipeline; the public one runs the tox
# suite this workflow drives through cibuildwheel).
name: Build debugpy wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/debugpy.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-debugpy.yml'
- 'docs/packages/debugpy.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-debugpy.yml'
- 'docs/packages/debugpy.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: debugpy
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build debugpy ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 300
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
# pydevd's Cython speedups are plain per-interpreter extensions, and
# upstream ships no free-threaded wheel (tox envlist stops at py314).
include:
# attach-by-PID injects pydevd's shim, which upstream compiles for
# x86/arm64 only; 3.14 attaches through sys.remote_exec instead.
- {python: cp312, pytest_k: 'not attach_pid'}
- {python: cp313, pytest_k: 'not attach_pid'}
- {python: cp314, pytest_k: ''}
env:
DEBUGPY_VERSION: ${{ matrix.version }}
steps:
- name: Checkout debugpy ${{ env.DEBUGPY_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: microsoft/debugpy
ref: v${{ env.DEBUGPY_VERSION }}
persist-credentials: false
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
only: ${{ matrix.python }}-manylinux_riscv64
env:
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# setup.py swallows the pydevd Cython build failure and ships a wheel
# with no .so unless this is set (CLAUDE.md gotcha 20).
CIBW_ENVIRONMENT: >-
REQUIRE_CYTHON_BUILD=1
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
# tests/ is a package whose conftest registers tests.* plugins, so it has
# to sit in the (empty) test cwd; pytest.ini carries testpaths and -n8.
CIBW_TEST_SOURCES: tests pytest.ini
# tests/requirements.txt minus gevent (no riscv64 wheel; its one test is
# deselected below) and the Windows/build-only vswhere and Cython.
CIBW_TEST_REQUIRES: >-
pytest pytest-xdist pytest-timeout pytest-retry
importlib_metadata psutil untangle
django flask numpy requests typing_extensions
# PYDEVD_USE_CYTHON=yes makes pydevd raise instead of silently falling
# back to the pure-Python tracer, so the whole suite exercises the .so.
CIBW_TEST_ENVIRONMENT: >-
DEBUGPY_TEST=1
PYDEVD_USE_CYTHON=yes
DEBUGPY_PROCESS_SPAWN_TIMEOUT=180
CIBW_TEST_COMMAND: >-
python -c "import debugpy._vendored.force_pydevd;
import _pydevd_bundle.pydevd_cython_wrapper as w;
import _pydevd_sys_monitoring._pydevd_sys_monitoring_cython as m;
assert w.mod.__file__.endswith('.so'), w.mod.__file__;
assert m.__file__.endswith('.so'), m.__file__" &&
python -Xfrozen_modules=off -m pytest --timeout=600
-k "${{ matrix.pytest_k }}"
--ignore=tests/debugpy/test_gevent.py
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: debugpy-${{ env.DEBUGPY_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish debugpy ${{ 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: debugpy-${{ matrix.version }}-*-manylinux_riscv64