From 8a77b94194d104a761e7c8cff0ce198874ce7be2 Mon Sep 17 00:00:00 2001 From: Martin Storath Date: Fri, 8 May 2026 05:29:24 +0000 Subject: [PATCH] Add post-publish verify step (real install + import) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors CMF v0.1.7's post-publish smoke check (devcontainer reports/11-cmf-v0.1.7-release.md). PyPI accepting the upload is not the same as `pip install` working — the new step does a real `pip install dcebe` from PyPI, imports the module, and asserts `estimate_bat` is exposed. DCEBE's first release will exercise this. The import alone proves the wheel installs and the C++ binding loads; a representative `estimate_bat(...)` smoke call can be added once the public API is finalised in the port. --- .github/workflows/release.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f5c3830..cb49412 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,3 +87,23 @@ jobs: body_path: release-notes.md generate_release_notes: true files: dist/* + + - name: Verify uploaded package (real install + import) + # Defends against silent failures where PyPI accepts the upload + # but the package isn't actually usable (renamed module, missing + # __init__, broken native binding, ABI mismatch, etc.). + # Mirrors CMF v0.1.7's step — see devcontainer reports/11. + # DCEBE's first release will exercise this; the import alone + # proves the wheel installs and the C++ binding loads. A + # representative `estimate_bat(...)` call can be added once the + # public API is finalised in the port. + run: | + # Brief delay so PyPI's CDN settles the new version. + sleep 30 + pip install --no-cache-dir --index-url https://pypi.org/simple/ dcebe + python -c " + import dcebe + from importlib.metadata import version + assert hasattr(dcebe, 'estimate_bat'), 'estimate_bat missing from public API' + print(f'dcebe {version(\"dcebe\")} verify OK') + "