-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (126 loc) · 5.88 KB
/
Copy pathbuild-ruff-format.yml
File metadata and controls
137 lines (126 loc) · 5.88 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 the `linux` job of
# https://github.com/reflex-dev/ruff-format/blob/v0.5.4/.github/workflows/CI.yml
name: Build ruff-format wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/ruff-format.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-ruff-format.yml'
- 'docs/packages/ruff-format.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-ruff-format.yml'
- 'docs/packages/ruff-format.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: ruff-format
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build ruff-format ${{ matrix.version }} ${{ matrix.tag }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
# tag is a real matrix dimension (not just an include-only key) so
# the two legs below update their own combination instead of
# collapsing into one (gotcha 402).
tag: [cp38-abi3, cp314t]
include:
# pyo3's abi3-py38 feature is on unconditionally (Cargo.toml), so one
# abi3 wheel serves every GIL-ful interpreter; pyo3 disables abi3
# under Py_GIL_DISABLED, giving the free-threaded build its own
# wheel (matches the cp38-abi3 + cp314-cp314t split upstream
# publishes). cp38 isn't in the manylinux_2_39_riscv64 image (it
# ships cp39-cp315), so the abi3 wheel is built on cp39 instead.
- tag: cp38-abi3
build: >-
cp39-manylinux_riscv64 cp310-manylinux_riscv64
cp311-manylinux_riscv64 cp312-manylinux_riscv64
cp313-manylinux_riscv64 cp314-manylinux_riscv64
- tag: cp314t
build: cp314t-manylinux_riscv64
env:
RUFF_FORMAT_VERSION: ${{ matrix.version }}
steps:
- name: Checkout ruff-format v${{ env.RUFF_FORMAT_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: reflex-dev/ruff-format
ref: v${{ env.RUFF_FORMAT_VERSION }}
persist-credentials: false
- name: Build wheels
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
env:
# musllinux is dropped: rustup.rs ships no riscv64 musl toolchain.
CIBW_BUILD: ${{ matrix.build }}
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# ruff-format ships no [tool.cibuildwheel], so the Rust toolchain
# its maturin backend needs is installed in-container here.
CIBW_BEFORE_ALL_LINUX: >-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
CIBW_ENVIRONMENT_LINUX: PATH="$PATH:$HOME/.cargo/bin"
# Upstream ships no test suite at all; exercise the three bound
# functions against known-good outputs (verified against the
# upstream ruff CLI) instead of an import-only smoke test.
# ruff-format is a pure-Rust maturin project (no python-source in
# pyproject.toml), so maturin wraps the extension in a generated
# ruff_format/__init__.py ("from .ruff_format import *") rather than
# shipping it as a flat top-level .so (gotcha 308) - probe the
# compiled submodule via sys.modules, not the package's own
# __file__, which is the shim.
CIBW_TEST_COMMAND: >-
python -c "import ruff_format as m, importlib.metadata as md, sys;
assert sys.modules['ruff_format.ruff_format'].__file__.endswith('.so'), sys.modules['ruff_format.ruff_format'].__file__;
assert any(str(p).endswith('licenses/LICENSE') for p in md.files('ruff-format'));
assert m.is_valid_syntax('x = 1');
assert not m.is_valid_syntax('def f(:');
m.parse_code('x = 1');
assert m.format_string('def hello( x,y, z ):\n print( x+y+z )\n') == 'def hello(x, y, z):\n print(x + y + z)\n';
assert m.format_string('result = some_function_name(argument_one, argument_two, argument_three, argument_four)\n') == 'result = some_function_name(\n argument_one, argument_two, argument_three, argument_four\n)\n';
assert m.format_string('result = some_function_name(argument_one, argument_two, argument_three, argument_four)\n', line_width=120) == 'result = some_function_name(argument_one, argument_two, argument_three, argument_four)\n'"
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ruff-format-${{ env.RUFF_FORMAT_VERSION }}-${{ matrix.tag }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish ruff-format ${{ 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: ruff-format-${{ matrix.version }}-*-manylinux_riscv64