Skip to content

Commit 453ed69

Browse files
wolfieschclaude
andcommitted
feat: consume wolfxl from GitHub/PyPI instead of local build
- Change [rust] optional dep from maturin to wolfxl (git URL for now) - Update CI rust_smoke job: pip install wolfxl instead of maturin develop - Add DEC-016: WolfXL extraction decision - Update CLAUDE.md: wolfxl install instructions + next decision ID Once wolfxl is published to PyPI, update dep from git URL to version spec. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ff62a10 commit 453ed69

4 files changed

Lines changed: 36 additions & 17 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,11 @@ jobs:
8787

8888
- uses: astral-sh/setup-uv@v3
8989

90-
- uses: dtolnay/rust-toolchain@stable
91-
9290
- name: Install deps (dev + rust)
9391
run: uv sync --extra dev --extra rust
9492

95-
- name: Build Rust extension (umya)
96-
run: >
97-
uv run maturin develop
98-
--manifest-path rust/excelbench_rust/Cargo.toml
99-
--features umya
93+
- name: Verify wolfxl install
94+
run: uv run python -c "import wolfxl; print(wolfxl.__version__)"
10095

101-
- name: Rust smoke tests
102-
run: uv run pytest -k excelbench_rust_smoke -v
96+
- name: Rust integration tests
97+
run: uv run pytest tests/test_rust_integration.py -v

CLAUDE.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
> when you introduce new top-level modules, flows, or dependency directions.
55
66
> **DECISION LOG**: When making a significant design or architecture decision, always add an entry
7-
> to `decisions.md` using the `DEC-NNN` format. Next ID: **DEC-015**.
7+
> to `decisions.md` using the `DEC-NNN` format. Next ID: **DEC-017**.
88
99
## What This Project Is
1010

@@ -48,16 +48,16 @@ uv run ruff check
4848
uv run mypy
4949
```
5050

51-
### Rust Adapters (optional)
51+
### WolfXL (optional, from PyPI)
5252

5353
```bash
54-
uv sync --extra rust
55-
uv run maturin develop --manifest-path rust/excelbench_rust/Cargo.toml \
56-
--features calamine,rust_xlsxwriter,umya
57-
uv run python -c "import wolfxl._rust as rust; print(rust.build_info())"
54+
uv sync --extra rust # installs wolfxl from PyPI (pre-built wheel)
55+
uv run python -c "import wolfxl; print(wolfxl.__version__)"
5856
```
5957

60-
**Gotcha**: `uv sync` may uninstall the locally-built extension. Rerun `maturin develop` after syncing.
58+
For local development of wolfxl itself, see https://github.com/wolfiesch/wolfxl.
59+
60+
**Note**: umya/basic calamine adapters still require local `maturin develop` from `rust/excelbench_rust/`.
6161

6262
### Fixture Generation (requires Excel installed)
6363

decisions.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,27 @@ Skip logging for routine bug fixes, refactors, or incremental test additions.
4040

4141
## Decisions
4242

43+
### DEC-016 — Extract WolfXL to standalone GitHub repo + PyPI (2026-02-15)
44+
45+
**Context**: WolfXL was embedded inside ExcelBench across `packages/wolfxl/` (Python wrapper) and
46+
`rust/excelbench_rust/` (Rust backend). This made it unusable for anyone not building ExcelBench
47+
from source. For adoption, WolfXL needs to be `pip install wolfxl`.
48+
49+
**Decision**: Extract WolfXL to `wolfiesch/wolfxl` on GitHub. Publish the calamine fork as
50+
`calamine-styles` crate on crates.io (required because cargo disallows git deps in published
51+
crates). The standalone repo includes only the 3 core backends (calamine-styled, rust_xlsxwriter,
52+
wolfxl patcher) — umya and basic calamine stay in ExcelBench. ExcelBench's `[project.optional-dependencies] rust`
53+
now points to `wolfxl>=0.1.0` from PyPI instead of `maturin`.
54+
55+
**Alternatives considered**: (1) Keep WolfXL in ExcelBench and add maturin wheel CI (rejected:
56+
couples product and benchmark releases). (2) Include all 5 backends in standalone (rejected: umya
57+
and basic calamine are ExcelBench-only benchmarking tools). (3) Publish calamine fork under
58+
original name (rejected: name collision on crates.io).
59+
60+
**Consequences**: `pip install wolfxl` provides pre-built wheels for Linux/macOS/Windows. ExcelBench
61+
CI no longer needs Rust toolchain for WolfXL (just `pip install wolfxl`). The `excelbench_rust_shim`
62+
package can be deprecated. Calamine fork must be maintained as `calamine-styles` on crates.io.
63+
4364
### DEC-015 — Publish WolfXL as standalone + `wolfxl._rust` with shim compatibility (2026-02-15)
4465

4566
**Context**: WolfXL started as an in-repo compatibility layer and used the native module name

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ dev = [
4343
"mypy>=1.0",
4444
]
4545
rust = [
46-
"maturin>=1.0",
46+
"wolfxl @ git+https://github.com/wolfiesch/wolfxl.git",
4747
]
4848
docs = [
4949
"mkdocs-material>=9.5",
@@ -58,6 +58,9 @@ excelbench = "excelbench.cli:app"
5858
requires = ["hatchling"]
5959
build-backend = "hatchling.build"
6060

61+
[tool.hatch.metadata]
62+
allow-direct-references = true
63+
6164
[tool.hatch.build.targets.wheel]
6265
packages = ["src/excelbench"]
6366

0 commit comments

Comments
 (0)