Conversation
dulwich publishes per-interpreter compiled wheels built from three setuptools-rust/PyO3 crates; PyPI ships no riscv64 ones. Upstream already carries a [tool.cibuildwheel] table (rustup + libatomic before-build, musl skipped), so the workflow is a plain build-from-checkout with the riscv64 image as the only build override. Upstream's cibuildwheel run does not test the wheels, so the test phase mirrors pythontest.yml / `make check` instead: upstream's extras (minus paramiko/colordiff, which tests/ never imports, and patiencediff, which has no riscv64 wheel) and the full `tests.test_suite`, 4619 tests including the compat suite against git and the tutorial doctests. Two riscv-independent wrinkles come from running that suite against an installed wheel rather than an in-place build: the suite locates testdata/ and the source tree relative to the dulwich package directory, and test_local_modifications_ioerror asserts a mode-0 file is unreadable, which never holds for root inside the build container.
tests/test_signature.py's GetSignatureVendor* cases call get_signature_vendor(format='ssh'/'x509'), which raises ValueError unless shutil.which() finds ssh-keygen / gpgsm. Upstream's ubuntu-latest runners have both; the manylinux_2_39_riscv64 image does not, so six tests errored on every interpreter. Install them rather than deselecting - the CLIs are what the vendors under test actually shell out to.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a riscv64 wheel build for dulwich 1.2.13.
dulwich publishes per-interpreter compiled wheels (
cp3XX-cp3XX-manylinux_2_28_*) builtfrom three setuptools-rust/PyO3 crates (
dulwich._objects,._pack,._diff_tree)alongside a
py3-none-anypure fallback — but no riscv64 ones. Matrix is thereforeper-interpreter
[cp312, cp313, cp314, cp314t], not abi3.Upstream already ships a
[tool.cibuildwheel]table (rustup +libatomicbefore-build,*-musllinux_*skipped,PATH=$HOME/.cargo/bin:$PATH), so this is a plainbuild-from-checkout with
CIBW_MANYLINUX_RISCV64_IMAGEas the only build override.Verified in the image that
yum -y install libatomicresolves on Rocky 10 riscv64.Testing
Upstream's
python-distributions.ymlnever tests the wheels it builds, so the test phasemirrors
pythontest.yml/make checkinstead:tests.test_suite, which is theself-tests plus the tutorial doctests plus the compat suite run against the real
gitbinary (2.54.0 in the image).
CIBW_TEST_EXTRASis upstream's set minusparamikoandcolordiff(nothing undertests/imports either) andpatiencediff(no riscv64 wheel;test_patchskips withoutit). Everything left is pure Python, so no extra index is needed.
Two wrinkles come from running that suite against an installed wheel rather than
upstream's in-place
build_ext -i, both arch-independent:dulwich/tests/utils.pyresolvestestdata/as<dulwich package>/../../testdata, andtests/test_source.pywalks<cwd>/dulwich— so the installed package is staged wherethe checkout's would be. Without it 95 tests error out.
test_local_modifications_ioerrorchmods a file to0and asserts reading raises;root inside the build container reads it anyway. It is the only test dropped.
Validated locally on aarch64 against upstream's own manylinux wheel (same shape, no
compilation involved): 4619 passed, 172 skipped, 1 expected failure.
The wheel carries
dulwich-1.2.13.dist-info/licenses/COPYING(Apache-2.0 ORGPL-2.0-or-later), confirmed in the published upstream wheel.