Repository navigation
Conversation
Manushpm8
force-pushed
the
engine-wheels-all-platforms
branch
5 times, most recently
from
October 18, 2026 05:59
528c7ba to
a290711
Compare
`structured-data-models-client[relational]` installed on Linux and nowhere else. The engine is a native build that ships no source distribution, so a platform with no wheel has nothing to fall back on: pip reports "No matching distribution found for structured-data-models-relational-engine" and stops. A developer on a Mac could install the client but not the model it fronts. Nothing about the engine required that. The sampler is 564 lines of standard library C++ with no POSIX headers, and `CMakeLists.txt` has carried a macOS deployment target all along. What was Linux-only was the wheel matrix: `[tool.cibuildwheel.linux]` was the only platform table, and both the CI job and the release step ran cibuildwheel on Ubuntu runners, which can only produce manylinux wheels. So the engine now builds for macOS on both architectures, for 64-bit Windows, and for CPython 3.14 everywhere, alongside the manylinux wheels it already built. 25 wheels where there were 8. `requires-python` moves to `<3.15` with the classifiers, as the comment above it requires. Two things this needed: `-O3` was set unconditionally, which MSVC rejects; its release default is already `/O2`. That made the file buildable by Clang and GCC alone, a limit of the flag rather than of the code. The release workflow built the engine inside the job that builds everything else, on one Linux machine. A wheel is native to the machine that builds it, so that job becomes three: `build` for the pure-Python distributions, `engine-wheels` across five runners, and `assemble`, which joins them and runs the checks `build` used to run, unchanged. One runner per platform and architecture, native rather than emulated, so each wheel's smoke test runs on the machine it targets. That retires the QEMU step, and with it a privileged container image in the release path. The matrix is the one CI runs, so a tag uploads the set a pull request proved. It uses `macos-15-intel` rather than `macos-13`, which GitHub retired in December 2025. Verified by building and smoke-testing cp312 and cp314 macOS arm64 wheels from this tree, and by reading back the matrix cibuildwheel now selects. Windows is the one platform not proven locally; CI is the first machine to compile it. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Manush Murali <manushm@nvidia.com>
Manushpm8
force-pushed
the
engine-wheels-all-platforms
branch
from
October 18, 2026 06:08
a290711 to
53cf671
Compare
This branch has not been deployed
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.
structured-data-models-client[relational]installs on Linux and nowhere else. The engine is a native build that ships no source distribution, so a platform with no wheel has nothing to fall back on:A developer on a Mac can install the client but not the model it fronts. Found by installing 1.0.0 from PyPI across platforms after the release.
It was never the code
The sampler is 564 lines of standard-library C++ with no POSIX headers, and
CMakeLists.txthas carried a macOS deployment target all along. What was Linux-only was the wheel matrix:[tool.cibuildwheel.linux]was the only platform table, and both the CI job and the release step ran cibuildwheel on Ubuntu runners, which can only produce manylinux wheels.What changes
25 wheels where there were 8.
requires-pythonmoves to<3.15together with the classifiers, as the comment above it requires.-O3is now guarded byif(NOT MSVC).The release workflow built the engine inside the job that builds everything else, on one Linux machine. A wheel is native to the machine that builds it, so that job becomes three:
buildfor the pure-Python distributions,engine-wheelsacross five runners, andassemble, which joins them and runs the checksbuildused to run. One runner per platform and architecture, native rather than emulated, so each wheel's smoke test runs on the machine it targets. That retires the QEMU step and with it a privileged container image in the release path.releaseis still the only job behind the protectedpypienvironment.macos-15-intelreplacesmacos-13, which GitHub retired in December 2025.Two things CI caught that review would not
The Windows wheels were built by the wrong compiler. An earlier revision set
CMAKE_GENERATOR=Ninjato get past an MSBuildMAX_PATHfailure. Ninja then picked up the runner's MinGW:The CXX compiler identification is GNU 14.2.0,C:/mingw64/bin/c++.exe, withlibgcc_s_seh-1.dll,libstdc++-6.dllandlibwinpthread-1.dllrepaired into every Windows wheel — and the job passed. Green CI was not evidence the artifact was right.Ninja is gone. The default Visual Studio generator selects MSVC on its own, and the actual problem — MSBuild's
.tlogpaths exceedingMAX_PATHunder this repository's long directory names — is fixed insetup.pywith a shortbuild_baseon win32, keyed by a digest of the package path so two checkouts never share a build tree. Windows now reportsMSVC 19.44.35229.0and shipsmsvcp140.dll.A guard now checks the artifact, not the build. Because the failure mode was a passing build, every Windows wheel is inspected for MinGW runtimes, and an empty wheelhouse fails rather than reporting nothing found.
Also corrected
publish.ymlaccepted a release whose engine matrix was incomplete: it reduced filenames to distribution names, so four pure wheels plus a single engine wheel satisfied it. It now derives interpreters from the engine's own[tool.cibuildwheel] buildand requires all five platform families..gitlab-ci.ymlpinned cp310–cp313 in both matrix rows and inwheels-check.rfm/backend/local/__init__.py, the engine README,RELEASING.md, the root README and the architecture/installation/prerequisites docs all named the old matrix. Corrected, and they now say CPython where onlycpwheels exist — there is no sdist, so PyPy cannot install the engine.test_an_extra_narrower_than_its_parent_says_soasserted'3.14' in source; once 3.14 became supported that string appears for an unrelated reason and the test proved nothing. It now reads the engine's upper bound and requires the client's prose to name it.Verification
engine-wheelsrows.['cp310 win_amd64', ...]) and on a single dropped wheel (['cp314 macosx_.*_arm64']).publish.ymlonly runs on a tag, so its wiring was checked statically: every artifact download resolves to an upload, and the job graph isbuild → engine-wheels → assemble → release.Not a release
No version bump and no tag. This ships with whatever the next release is; the changelog entry sits under
Unreleased. 1.0.0 is already published and its files are immutable, so the platforms it offers do not change.🤖 Generated with Claude Code