Repository navigation
118 lines (102 loc) · 3.72 KB
/
Copy pathpython.yml
File metadata and controls
118 lines (102 loc) · 3.72 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
name: Python
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
strategy:
fail-fast: false
matrix:
# NOTE: windows is pinned to windows-2022 (not windows-latest).
# ggsql 0.5.2 pins duckdb ~1.10502, whose bundled build uses
# stdext::checked_array_iterator (via vendored fmt). That symbol is
# deprecated but present in windows-2022's VS2022/v143 STL, and fully
# removed in the VS2026/v145 STL that windows-latest now provides, so
# the duckdb build hard-fails there (duckdb/duckdb-rs#783, fixed in
# libduckdb-sys 1.10506). Upstream ggsql pins windows-2022 for the
# same reason. Revert to windows-latest once we depend on a ggsql
# release with duckdb ~1.10506.
os: [ubuntu-latest, macos-latest, windows-2022]
python: ["3.10", "3.11", "3.12", "3.13"]
include:
- os: ubuntu-latest
delay: 140
- os: macos-latest
delay: 210
- os: windows-2022
delay: 70
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Stagger start by OS
run: sleep ${{ matrix.delay }}s
shell: bash
- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ matrix.os }}-python
cache-on-failure: true
save-if: ${{ github.ref == 'refs/heads/main' && matrix.python == '3.13' }}
- name: Set up MSVC (Windows)
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Check Rust formatting
run: cargo fmt -- --check
- name: Clippy
run: cargo clippy -- -D warnings
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
command: build
args: --release
sccache: false
- name: Install wheel and test dependencies
shell: bash
run: |
WHEEL=$(ls target/wheels/ggsql-*.whl)
pip install "${WHEEL}[test]"
- name: Run tests
shell: bash
run: pytest tests/ -v
# The abi3 wheel is identical across Python legs; keep just one for
# the wheel smoke test below.
- name: Upload Linux wheel
if: runner.os == 'Linux' && matrix.python == '3.13'
uses: actions/upload-artifact@v4
with:
name: ggsql-wheel
path: target/wheels/ggsql-*.whl
retention-days: 5
# Native SVG/PDF/HEP writers dlopen libfontconfig.so.1 at runtime and
# need installed fonts — neither is expressible in wheel metadata, and
# slim Linux images lack both. Render in a minimal container provisioned
# per the README to catch packaging/runtime regressions.
wheel-smoke-test:
runs-on: ubuntu-latest
needs: test
steps:
# NOTE: checkout must precede the download — it cleans the workspace.
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: ggsql-wheel
path: wheelhouse
- name: Smoke test wheel in a minimal container
run: |
WHEEL=$(basename wheelhouse/*.whl)
docker run --rm \
-v "$GITHUB_WORKSPACE/wheelhouse:/wheels:ro" \
-v "$GITHUB_WORKSPACE/scripts/smoke_test_wheel.py:/smoke_test.py:ro" \
python:3.12-slim bash -euxo pipefail -c "
apt-get update &&
apt-get install -y --no-install-recommends libfontconfig1 fonts-dejavu-core &&
pip install --no-cache-dir '/wheels/$WHEEL' &&
python /smoke_test.py
"