ci(python/sedonadb-geopandas): run tests, build wheels, and verify in releases - #1095
Conversation
|
For anyone looking at the failing checks here: the This PR shows them for the first time only because it touches The job that exercises this PR's change — |
7aa58c5 to
a813c43
Compare
|
Status note on the checks here, since the remaining red one is not from this PR. All four Linux/macOS wheel jobs now pass after rebasing onto #1096 (
Every test passes and then the process exits with Worth flagging because the impact is wider than this PR: One consequence for reviewing this PR: I have not filed an issue for the Windows crash, since the native/Windows side is better judged by whoever owns it — glad to open one with this evidence if that is useful. |
a813c43 to
0592355
Compare
|
Taking this out of draft. Status update, since the situation changed with the recent wheel-build work and my earlier comment above is now out of date. Rebased onto current On the gating: the Two notes for review:
|
|
@james-willis @paleolimbot can you take a look and approve if LG? This will unblock me to add more geopandas functions |
paleolimbot
left a comment
There was a problem hiding this comment.
Thank you! We'll keep an eye on the build for this...I'm hoping to sort out all of the wheel failures next week (James has a PR that may fix the Windows one).
While it's strictly correct to always test sedonadb-geopandas after sedonadb and sedonadb-expr like you've done it here, for the most part you can use any sedonadb >= 0.4. As long as you're a tiny bit careful with your implementation (e.g., if hasattr(df, "unnest"), you could have a separate workflow for sedonadb-geopandas installing from nightly, which will probably run in less than a minute (with your current set up you'll have to wait a while to get feedback from CI specifically for sedonadb-geopandas). You can keep the duplicate coupled check to make sure we don't break sedonadb-geopandas with changes to sedonadb. Your call!
| # The `.geo` accessor and `DataFrame.unnest` this package builds on landed in | ||
| # 0.4.0. The floor is an explicit prerelease (`0.4.0a0`) so dev/nightly | ||
| # builds — which version as `0.4.0aN` and are PEP 440-*less* than `0.4.0` — | ||
| # satisfy it; a plain `>=0.4.0` would reject the matching nightly wheels | ||
| # (and break `pip install` of the nightly for users, not just CI). | ||
| "sedonadb>=0.4.0a0", | ||
| "sedonadb-expr>=0.4.0a0", |
There was a problem hiding this comment.
Probably >=0.4.0 is sufficient here since both are now on PyPI
There was a problem hiding this comment.
Changed to >=0.4.0, thanks — that is simpler and it does hold now.
Recording the reasoning, since the two facts look contradictory at first: the prerelease floor was doing real work when it was written, because the workspace was on 0.4.0 at the time, so nightlies versioned as 0.4.0aN, and PEP 440 orders 0.4.0a62 below 0.4.0 — a plain >=0.4.0 rejected exactly the nightly wheel it was paired with (the same trap sedonadb-zarr documents). The workspace has since moved to 0.5.0, so nightlies are 0.5.0aN, which satisfies >=0.4.0 fine, and that stays true for later cycles.
The condition is therefore "the floor must be a released version, not the version currently being developed", so I kept a short comment to that effect rather than the prerelease pin — otherwise someone raising the floor to match the dev line would silently reintroduce it.
0592355 to
713adaa
Compare
|
Correction to my comment above: I claimed the What happened: The part of my reasoning that was sound is that this job cannot simply copy if: ${{ !cancelled() && needs.expr.result == 'success' }}Do not skip merely because something upstream was cancelled, but do require Worth noting this is the one class of bug that could not be caught by reading the workflow — it needed the job to actually be reached in a run with a cancelled platform, which is why it was worth waiting for an execution rather than merging on the strength of the wiring alone. It still has not run end to end; that remains pending on the wheel builds being stable enough for the chain to complete. |
|
This seems to have broken the CI of main. The failure shows in the latest commit here. @jiayuasu can you please take a look? https://github.com/apache/sedona-db/actions/runs/31204113817/job/92977392654 |
|
Thanks for catching this, and sorry for the breakage. Fix is up in #1134. Cause: the It was missing in two places: the package's It stayed hidden because both the dev environment and the |
sedonadb-geopandas(added in #1052) is not referenced by any workflow, so its tests never run upstream and it has no path to release: the mainpytestinvocation runs insidepython/sedonadband does not collect them, and there is no wheel build. This wires the package in the same way the other Python packages are wired, and fixes two packaging problems found along the way.Python CI
Installs the package (after
sedonadbandsedonadb-expr, so pip resolves both from source rather than PyPI) and runs its 23 tests, mirroring the existingsedonadb-exprsteps.Wheels
wheels-geopandas.yml, modelled onwheels-expr.yml: build a universal wheel and sdist, test the built wheel, then publish nightly to Gemfury. It downloads both thesedonadband thesedonadb-exprwheel artifacts, because the.geoaccessor this package delegates to comes fromsedonadb-expr. Invoked frompython-wheels.ymlwithneeds: ["expr"](which transitively waits on the core wheel jobs), plus the corresponding paths trigger.Release verification
verify-release-candidate.shnow installs and tests this package alongsidesedonadb-exprandsedonadb-zarr. Without this it would ship in the release tarball unverified.Fix: version was hard-coded
The package declared
version = "0.4.0"literally, while the sibling Python packages derive their version from the workspaceCargo.toml. Two consequences: every nightly wheel would publish as the same0.4.0, and the value would silently drift from the workspace at each release bump. It now uses the same_version.py+[tool.hatch.version]mechanism assedonadb-expr.Verified end to end:
ci/scripts/set_dev_version.pyrewrites the workspace version to0.4.0-alpha62, and the resulting wheel issedonadb_geopandas-0.4.0a62-py3-none-any.whl.Fix: dependency floors did not admit nightlies
Dependencies were unpinned (
sedonadb,sedonadb-expr). Nightly builds version as0.4.0aN, which is PEP 440-less than0.4.0, so a plain>=0.4.0floor would reject the matching nightly wheel and breakpip installof the nightly for users, not just CI — the same trap documented insedonadb-zarr. The floors are now explicit prereleases:sedonadb>=0.4.0a0andsedonadb-expr>=0.4.0a0.Confirmed:
0.4.0a62satisfies>=0.4.0a0and is rejected by>=0.4.0.Not included
packaging.yml, which installs packages so mkdocstrings can build generated API-reference pages. This package has no such page, so adding it there would have no effect.Verification
Wheel and sdist build; wheel metadata carries the intended
Requires-Distand extras; both workflow files parse and the job graph resolves as expected;bash -npasses on the release script;ruff format/ruff checkclean; the package's 23 tests pass via the exact commands CI runs.