Skip to content

Build: final Python release #62

Closed

Description

@blooop

Question

Build: cut the final Python release of devlaunch — the last version before the Rust cut-over.

Created by #53 (Rust rewrite: go, parallel migration). Every targeted fix on this map lands in Python first; this ticket ships them to current users as one release and marks the end of the Python line.

Blocked by the five Python builds: #56, #57, #58, #59, #60.

The slice:

  • Version bump past the current 0.0.7 (pyproject.toml), with conda.recipe/recipe.yaml in sync.
  • CHANGELOG entry naming this as the final Python release and pointing at the successor, so a user on the last Python version can find out what happened.
  • Publish through both existing channels unchanged — .github/workflows/publish.yml (PyPI, single hatchling wheel) and .github/workflows/conda-publish.yml (rattler-build → prefix.dev blooop, noarch: python). This is the last release either runs in its current form: per #52, the Rust successor keeps both channels but changes their shape — maturin bin bindings produce a per-platform wheel matrix instead of one noarch wheel, and the conda recipe goes from noarch: python to per-platform compiled builds.
  • Tag it, so the port has a named reference implementation to port from and to diff behavior against.

Acceptance: both published artifacts install and run dl --version in a clean environment.

Two things this ticket deliberately does not do — they belong to the rewrite effort's own map, not here:

  • Decide the Rust version's numbering or whether it keeps the devlaunch distribution name.
  • Change either publish workflow. They ship this release as-is and are rewritten there.

Activity

  1. blooop commented on Aug 8, 2026

    @blooop
    OwnerAuthor

    Answer

    0.0.11 is released and both artifacts verified. PR #92, tagged v0.0.11.

    Acceptance was "both published artifacts install and run dl --version in a clean environment":

    $ python -m venv /tmp/dlvenv && /tmp/dlvenv/bin/pip install devlaunch==0.0.11
    $ /tmp/dlvenv/bin/dl --version          -> dl 0.0.11
    $ /tmp/dlvenv/bin/aid --version         -> aid 0.0.11
    $ pixi exec -c conda-forge -c https://prefix.dev/blooop --spec devlaunch==0.0.11 dl --version
                                            -> dl 0.0.11
    

    The venv also confirms the dependency set is right: iterfzf, tomli, and no tomli-w.

    The changelog

    [Unreleased] became [0.0.11], carrying #65's cache migration — the last of the seven review fixes. The other six had already gone out in 0.0.10 while this work was in flight, which is also why the 0.0.10 entry gained the two user-visible fixes it shipped without documenting (#56's corrupt-metadata guard and #57's missing-devpod error). They belong under the version that contains them; listing them under 0.0.11 would tell a user they arrive now. #59 is not backfilled — it changed nothing a user of the tool can observe.

    The entry names this as intended to be the last release of the Python implementation and points at the Rust successor sharing a core crate with blooop/wayfinder, per #53.

    tomli_w

    Dropped in #91, separately, because regenerating pixi.lock also rewrites it from format v6 to v7 — ~830 of 848 lines — and that would have buried the release diff. Its only caller was the save_config that #59 deleted. Both pyproject.toml and the conda run dep are now consistent with the code.

    One thing this ticket assumed and should not have

    The ticket said to "publish through both existing channels unchanged". PyPI is genuinely automatic. Conda was not, and never had been: conda-publish.yml's release: published trigger has never once fired, because Auto-publish creates the release with the default GITHUB_TOKEN and GitHub does not start workflow runs from events raised that way. The run history is workflow_dispatch all the way back. 0.0.11's conda package needed the same hand-dispatch as 0.0.9 and 0.0.10.

    Fixed in #102 by chaining off Auto-publish with workflow_run. That ordering is required rather than cosmetic: the recipe builds from tag: v${{ version }}, so the tag has to exist before rattler-build can fetch the source — which is presumably why the release trigger was chosen. A version-compare gate keeps it from firing on every push, since Auto-publish succeeds whether or not it published anything, and force_build — declared as an input and read nowhere — now does something. It can only be proven by the next release, by construction.

    Migration verified end to end against the real package

    Not just unit tests: a scratch cache with two old-scheme clones, each holding uncommitted work, migrated with the installed 0.0.11.

    main, feature-x  ->  testrepo-main-gahazofe, testrepo-feature-x-pazekoka
    

    dl --ls left it at version 1; the first command touching a workspace migrated it and printed both notices; uncommitted files, HEADs and branches all survived; .bare was never renamed; metadata agreed with disk at version 2; and the second run was a silent no-op.

    Worth recording: the first attempt at this test was invalid. Run from the repo directory, python -c imported the stale working tree instead of the installed package, so the migration appeared not to fire at all. Anything testing a released artifact has to run from outside the checkout.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions