• v0.2.1 9ed7aebfbb

    v0.2.1
    All checks were successful
    CI / stable (pull_request) Successful in 1m36s
    CI / python bindings (3.11) (pull_request) Successful in 38s
    CI / msrv (1.90) (pull_request) Successful in 42s
    CI / audit (pull_request) Successful in 23s
    CI / msrv (1.90) (push) Successful in 43s
    CI / audit (push) Successful in 24s
    CI / stable (push) Successful in 1m37s
    CI / python bindings (3.11) (push) Successful in 39s
    Release / wheel + c bundle (manylinux x86_64) (push) Successful in 1m44s
    Release / build (cli + windows wheel + c bundle) (push) Successful in 2m14s
    Release / publish (push) Successful in 23s
    Stable

    jqueuniet released this 2026-09-05 08:29:21 +02:00 | 4 commits to main since this release

    Signed by jqueuniet
    SSH key fingerprint: SHA256:hjUxou9yR5AKBQ8zK2FkTEp12iDlEomvb63VBpXVwN4

    Added

    • C bundles — tagged releases now attach dm2-ffi-<ver>-x86_64-linux-gnu
      and -x86_64-windows-gnu archives, each with the cbindgen header, the shared
      library, the crate README carrying the Dm2Buffer ownership contract, and
      both licenses. The Linux one is built in the manylinux image, so it needs
      only glibc 2.28. The 30-40 MB static archive is left out: it would grow the
      compressed bundle elevenfold to duplicate what the shared library provides.

    Changed

    • dm2-wasm — prepared for npm. build-npm.sh builds the package for the
      bundler target and publishes it under the name dm2-tools, matching the
      PyPI distribution; the crate ships copies of the two licenses, which
      wasm-pack bundles, build-npm.sh lists in files so npm actually packs
      them, and CI diffs against the originals; and wasm-opt now optimises for
      size (-Oz). CI gained a wasm32-unknown-unknown check,
      since a host build compiles the #[wasm_bindgen] layer inertly and cannot
      catch a break in it.
    • dm2-wasm — no longer published to crates.io (publish = false, and
      0.2.0 deleted there). The bindings target JavaScript, which reaches them
      through wasm-pack output rather than cargo, and the crates.io copy
      documented nothing: docs.rs builds for x86-64, where every #[wasm_bindgen]
      export is compiled out, so the page listed only WasmError. The crate stays
      in the workspace and is built and tested exactly as before. Its unused
      [workspace.dependencies] entry, which carried a version requirement no
      crate consumed, is dropped.
    • Python bindingsrequires-python raised to >=3.11. 3.9 went EOL in
      October 2025 and 3.10 follows in October 2026, so the old >=3.9 floor
      advertised runtimes that no longer get security fixes and that the suite
      could not import anyway. Installing already requires a Rust toolchain to
      build the cdylib, so a distro system Python was never the constraint. The
      test helper now parses the manifests with the stdlib tomllib instead of a
      regex. Adds a classifiers list so a PyPI upload carries version, platform
      and Typing :: Typed trove tags.
    • CI — new python job installs the bindings on a standalone CPython 3.11
      (fetched by a pinned, hash-checked uv) and runs their pytest suite, so the
      declared floor and the hatchling cdylib-bundling hook are both exercised.
      Previously nothing in CI touched bindings/python at all.
    • Python bindings — the wheel is now tagged py3-none-<platform> instead
      of cp3XX-cp3XX-<platform>. Nothing links against the CPython C API, so the
      old tag demanded a separate wheel per interpreter minor for no reason; one
      wheel per platform now installs on every supported Python. The build hook
      also clears its _lib staging directory, which previously let a cross-built
      wheel ship a second, wrong-platform library.
    • Python bindings — packaging metadata filled in: [project.urls],
      keywords, and the two LICENSE-* files, which the wheel previously omitted
      despite declaring License-Expression.
    • Release — tagged builds now attach Python wheels:
      py3-none-manylinux_2_28_x86_64 from a new wheel-linux job in the
      manylinux image (auditwheel relabels the linux_x86_64 tag PyPI rejects),
      and py3-none-win_amd64 cross-built with mingw alongside the CLI. Wheels
      only, no sdist — an sdist of bindings/python cannot build, since the
      cdylib it compiles lives in the cargo workspace above it. macOS and aarch64
      Linux wheels are not built; see docs/development.md.
    • Release — the workflow is now two build jobs feeding a publish job
      through Forgejo's upload-artifact action, instead of one job that built
      and published in sequence. Assets are attached only once every build has
      succeeded, so a failure can no longer leave a published tag missing one;
      SHA256SUMS.txt covers the wheels as well as the CLI archives; and a
      workflow_dispatch run leaves every asset downloadable from the run page.

    Fixed

    • Python bindingsbindings/python/pyproject.toml still declared
      0.1.1, so the 0.2.0 wheel carried pip metadata a version behind the
      cdylib it bundles, and the suite's version assertion (hardcoded to the old
      string) failed against it. The package version now tracks the workspace, and
      the test derives both sides from the manifests instead of pinning a literal.
    • Python bindingstests/test_roundtrip.py annotated a helper with a
      PEP 604 union but omitted from __future__ import annotations, so importing
      the module raised TypeError on the 3.9 and 3.10 that requires-python
      claims to support. The suite only ever ran on 3.11+.
    Downloads