-
Notifications
You must be signed in to change notification settings - Fork 26
191 lines (160 loc) · 5.91 KB
/
Copy pathpynumaflow-lite.yml
File metadata and controls
191 lines (160 loc) · 5.91 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
name: pynumaflow-lite
on:
push:
branches: ["main", "release/*"]
paths:
- "packages/pynumaflow-lite/**"
- ".github/workflows/pynumaflow-lite.yml"
pull_request:
branches: ["main", "release/*"]
paths:
- "packages/pynumaflow-lite/**"
- ".github/workflows/pynumaflow-lite.yml"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
RUSTFLAGS: -C debuginfo=0
RUST_BACKTRACE: 1
PYTHONUTF8: 1
jobs:
lint:
name: Format and lint
runs-on: ubuntu-24.04
defaults:
run:
working-directory: packages/pynumaflow-lite
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install uv
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: "3.10"
working-directory: packages/pynumaflow-lite
- name: Set up Rust
run: |
rustup toolchain install stable --profile minimal --component clippy --component rustfmt
rustup default stable
- name: Install dependencies
run: uv sync --group dev
- name: Check Rust formatting
run: cargo fmt --all --check
- name: Check Python formatting
run: uv run ruff format --check pynumaflow_lite/ tests/ manifests/
- name: Ruff lint
run: uv run ruff check .
- name: Clippy
run: cargo clippy --locked --workspace --all-targets --all-features -- -D warnings -A clippy::module_inception
test:
name: Test ${{ matrix.platform.artifact }}
needs: lint
runs-on: ${{ matrix.platform.os }}
defaults:
run:
working-directory: packages/pynumaflow-lite
strategy:
fail-fast: false
matrix:
platform:
- os: ubuntu-24.04
artifact: linux-x86_64
- os: macos-15
artifact: macos-aarch64
steps:
- uses: actions/checkout@v7
- name: Install uv
uses: astral-sh/setup-uv@v8.1.0
with:
working-directory: packages/pynumaflow-lite
- name: Set up Rust
run: |
rustup toolchain install stable --profile minimal
rustup default stable
- name: Run tests for Python versions
shell: bash
run: |
set -euo pipefail
for python_version in 3.10 3.11 3.12 3.13 3.14; do
echo "::group::Python ${python_version}"
uv python install "${python_version}"
export UV_PYTHON="${python_version}"
uv sync --group dev --python "${python_version}"
uv run --python "${python_version}" maturin develop --locked
uv run --python "${python_version}" pytest -v
# cargo test embeds a Python interpreter via pyo3 (Python::initialize),
# which requires pinning the uv-managed interpreter at three layers:
# - PYO3_PYTHON: the interpreter pyo3's build script links against.
# - PYTHONHOME: where the embedded interpreter finds its stdlib at
# runtime; mismatch surfaces as "No module named 'encodings'".
# - LD_LIBRARY_PATH: where the dynamic loader finds libpython at load
# time. On Linux the test binary links libpython3.x.so, which lives
# under the interpreter's lib dir and is not on the default search
# path; missing it surfaces as "error while loading shared libraries:
# libpython3.x.so". (Harmless on macOS, which resolves differently.)
python_bin="$(uv run --python "${python_version}" python -c 'import sys; print(sys.executable)')"
export PYO3_PYTHON="${python_bin}"
export PYTHONHOME="$("${python_bin}" -c 'import sys; print(sys.base_prefix)')"
python_libdir="$("${python_bin}" -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))')"
export LD_LIBRARY_PATH="${python_libdir}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
cargo test --locked
unset PYO3_PYTHON PYTHONHOME LD_LIBRARY_PATH
unset UV_PYTHON
echo "::endgroup::"
done
build-wheels:
name: Build wheel ${{ matrix.platform.artifact }} py${{ matrix.python-version }}
needs: test
runs-on: ${{ matrix.platform.os }}
defaults:
run:
working-directory: packages/pynumaflow-lite
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
platform:
- os: ubuntu-24.04
target: x86_64-unknown-linux-gnu
artifact: linux-x86_64
manylinux: "2014"
linux: true
- os: macos-15
target: aarch64-apple-darwin
artifact: macos-aarch64
manylinux: "off"
linux: false
steps:
- uses: actions/checkout@v7
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Set up Rust
run: |
rustup toolchain install stable --profile minimal
rustup default stable
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
command: build
working-directory: packages/pynumaflow-lite
target: ${{ matrix.platform.target }}
manylinux: ${{ matrix.platform.manylinux }}
args: >-
--release
--locked
--out dist
-i ${{ matrix.platform.linux && format('python{0}', matrix.python-version) || 'python' }}
- name: Upload wheel artifact
uses: actions/upload-artifact@v7
with:
name: pynumaflow-lite-${{ matrix.platform.artifact }}-py${{ matrix.python-version }}
path: packages/pynumaflow-lite/dist/*.whl
if-no-files-found: error
compression-level: 0