Skip to content

thriftpy2: add build-thriftpy2.yml for riscv64 wheels - #1063

Merged
luhenry merged 5 commits into
mainfrom
thriftpy2
Sep 6, 2026
Merged

thriftpy2: add build-thriftpy2.yml for riscv64 wheels#1063
luhenry merged 5 commits into
mainfrom
thriftpy2

Conversation

@luhenry

@luhenry luhenry commented Sep 6, 2026

Copy link
Copy Markdown
Member

Pure-Python Apache Thrift implementation with a handful of small Cython-accelerated transport/protocol extensions. Upstream publishes no riscv64 wheel.

Mirrors upstream's own build.yaml: checkout the tag and run cibuildwheel directly, no in-container build steps needed.

Differs from upstream

  • Drops CIBW_ENABLE: cpython-freethreading - cibuildwheel 4 builds free-threaded wheels without it and no longer recognizes the group.

Testing

  • Ignores test_aio_http.py - aiohttp has no riscv64 wheel for cp314/cp314t or for musllinux on the registry.

License: OK

Closely mirrors upstream's own build.yaml (checkout + cibuildwheel
directly, no native deps to preinstall), narrowed to the riscv64
manylinux/musllinux targets and testing against the wheel with
upstream's own `cd tests; pytest -v` invocation.
Free-threaded CPython warns "use of fork() may lead to deadlocks" when a
multi-threaded process calls multiprocessing.Process/os.fork(), and the
extra runtime threads race the fixed post-fork sleep(0.1) these tests use
to wait for their forked server to be ready, causing intermittent
ConnectionRefusedError. Confirmed reproducing identically on both
manylinux and musllinux for cp314t only, with cp312/cp313/cp314 green on
both. Skip the affected files on cp314t; the GIL builds run the full
suite unmodified.
…fault)

Skipping test_all_protocols_binary_field.py on cp314t (the fork-race fix)
also skips its module-level multiprocessing.set_start_method('fork') call,
which was implicitly forcing 'fork' for the whole pytest session on the
other interpreters. Without it, cp314t falls back to CPython 3.14's new
default start method, 'forkserver', which pickles the Process target
instead of inheriting it via COW - and test_apache_json.py::test_client's
locally-defined run_server()/Handler can't be pickled.
…oot)

pytest's rootdir here is {project} (a setup.py sits there), not
{project}/tests, so the real nodeid is
tests/test_apache_json.py::test_client[server_func0] - the bare form
the -v/FAILED output displays is only cwd-relative and silently no-ops
as a --deselect argument.
luhenry added a commit that referenced this pull request Sep 6, 2026
The first fix used the bare nodeid pytest's -v/FAILED output showed,
which turned out to be cwd-relative display only; --deselect needs the
rootdir-relative nodeid (tests/test_apache_json.py::...), confirmed by
the deselect silently no-oping on PR #1063's next CI run. Use
--collect-only -q to get the real nodeid instead.
@luhenry
luhenry merged commit 7c97fe8 into main Sep 6, 2026
13 checks passed
@luhenry
luhenry deleted the thriftpy2 branch September 6, 2026 17:36
@luhenry luhenry linked an issue Sep 6, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

thriftpy2 riscv64 support

1 participant