Release 0.9.5#75
Conversation
|
@jf--- after this finishes, could you approve and try to run "invoke release minor" ? to publish on pypi |
…creenshot Regenerate the image with compas_viewer 2.0.2 in the current clean style (no grid/window chrome), and update the example's viewer setup to match: grid off + camera via Config, translucent elephant (opacity 0.6) with a visible wireframe so the skeleton and the red/blue vertex-mapping points read clearly.
|
@jf--- ping |
|
Hi @petrasvestartas sure; shall we update releasing that tagging equals a push to pypi? Kind of became used to that mechanism. Would that work for you too? |
|
How would it work? I notice from these pull requests, that every time we merge a new feature. We want to make a new release. But then there is this dance with "invoke release minor", with ruff needed to be successfully applied. It would be great, that on every merged pull-request, the new release would be made automatically. @copilot Is it possible to do? |
|
hi @petrasvestartas this is the workflow we have in tesseract_python_nanobind. |
PyPI release recipe — tag-triggered wheels for a nanobind/C++ bindingPattern proven on tesseract_nanobind; transferable to any scikit-build-core + nanobind project with conda-forge C++ deps (e.g. compas_cgal). Core shape: one workflow per platform, each Why per-platform workflows instead of one big matrix:
1. Triggeron:
push:
branches: [main]
tags:
- '[0-9]+.[0-9]+.[0-9]+'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueBare-version tags, no 2. Version — setuptools-scm, three defense layers
[project]
dynamic = ["version"]
[tool.scikit-build.metadata.version]
provider = "scikit_build_core.metadata.setuptools_scm"
[tool.setuptools_scm]
local_scheme = "no-local-version"Build job env: env:
SETUPTOOLS_SCM_PRETEND_VERSION_FOR_<DIST_NAME>: ${{ github.ref_type == 'tag' && github.ref_name || '' }}( The three layers, each motivated by a real shipped failure:
for whl in dist/*.whl; do
v=$(basename "$whl" | cut -d- -f2)
[ "$v" = "$GITHUB_REF_NAME" ] || { echo "::error::$whl is $v, expected $GITHUB_REF_NAME"; exit 1; }
doneCheckout needs 3. BuildPer python-version matrix job:
C++ deps come from conda-forge via pixi (for compas_cgal: Platform notes:
ABI canary (cheap, high value): immediately after building, 4. Test — virgin environmentSeparate
If shipping abi3 wheels: add matrix rows where python > wheel-python (e.g. 3.13/3.14 installing the cp312 wheel) — that's the only real verification of the stable-ABI claim. Mark prerelease pythons Use 5. Publish — tag-gated, OIDC trusted publishingpublish:
needs: [build, test-wheel]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest # pypa action is Linux-only; wheels are just files here
environment: linux # one GitHub environment per platform workflow
permissions:
id-token: write # OIDC — no PyPI token stored anywhere
steps:
- uses: actions/download-artifact@v4
with: { pattern: 'python-*-linux-*', merge-multiple: true, path: dist/ }
- name: assert wheel version == tag
run: ... # see §2
- uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true # idempotent re-runs — skip uploaded wheels, don't 400-abortOne-time setup checklist for a new repo
TLDRpush tag → per-platform workflows in parallel → locked-env build (version pinned to tag) → ABI canary → virgin-venv test → tag-gated publish (assert version==tag, OIDC, |
|
(wait let me not lecture but create an issue with the above) |
Release 0.9.5.
0.9.3→0.9.5CHANGELOG.mdfor 0.9.5ruff formatontests/test_meshing.py