Skip to content

uv-manager 0.3.0

Choose a tag to compare

@glentner glentner released this 07 Aug 17:57
· 143 commits to main since this release
0.3.0
9aae9e4

First tagged release. Versions 0.1.0 and 0.2.0 existed in the script but were never tagged, so this
tag also establishes the convention: a bare X.Y.Z matching the string uv-manager --version prints.

Breaking

The wrapper's six configuration variables are renamed from UV_MANAGER_* to UVM_* (#2).

was now
UV_MANAGER_ROOT UVM_ROOT
UV_MANAGER_PIN UVM_PIN
UV_MANAGER_PLATFORM UVM_PLATFORM
UV_MANAGER_INSTALL_URL UVM_INSTALL_URL
UV_MANAGER_LOCK_TIMEOUT UVM_LOCK_TIMEOUT
UV_MANAGER_LOCK_STALE UVM_LOCK_STALE

Same meanings, same defaults, same precedence. UV_MANAGER_* sat inside uv's own namespace, where a
site operator could not tell an Astral variable from one this wrapper invented — and uv already
ships a UV_LOCK_TIMEOUT of its own, so the collision was not hypothetical.

There is no compatibility shim. A legacy name is now simply unset. If you have UV_MANAGER_ROOT
in a modulefile, a job script, or a Globus Compute endpoint configuration, rename it. The failure mode
if you do not is loud rather than silent: the wrapper exits non-zero with cannot determine where to keep per-user uv state and lists every candidate it tried.

The five variables the wrapper exports for uv — UV_CACHE_DIR, UV_TOOL_DIR, UV_TOOL_BIN_DIR,
UV_PYTHON_INSTALL_DIR, UV_PYTHON_BIN_DIR — and the PATH prepends are unchanged. Those are uv's
namespace by right. The split now makes the project's central boundary visible in the names:
storage is ours, resolution is uv's.

Upgrading from 0.2.0

  1. Rename the six variables wherever your site sets them. The modulefile is the usual place; see
    share/modulefiles/uv/main.lua, which now sets UVM_ROOT.
  2. Nothing in the state tree changes. Existing $UVM_ROOT/<arch>/ trees, caches, tool venvs and
    managed interpreters are picked up as-is — this is a rename of the inputs, not of the layout.
  3. The Lmod modulefile derives its prefix from myModuleVersion() and is version-agnostic. A site
    deploying per-version module files still needs to add one for 0.3.0 to pin to this version.

Also in this release

Everything below predates this tag and is included because nothing before it was ever tagged.

  • [fix] Six correctness defects, and removal of the dead surface around them (5bb652c)
  • [fix] Broken-pipe noise silenced in status; symlink note corrected (f902ebf) — status
    output no longer reports write error: Broken pipe when piped into head
  • [refactor] uv-manager is the canonical script, with a uvm alias (88c683b) — the four
    entry points uv, uvx, uvm and uv-manager are one script, dispatched on argv[0]
  • [docs] Documentation follows the removals; two false claims corrected (f564cb2)
  • [harness] A spec-driven software factory under .agents/ (33a91fb) — development tooling
    only; nothing a site deploys depends on it

Verification

No test suite exists yet. This release was gated by executed commands, not review alone: shellcheck
and bash -n under bash 3.2.57 (the portability floor), offline end-to-end provisioning on two
architectures with the current symlink asserted relative, uvm --version matching the tag exactly,
and uvm help rendering on a node with no state root configured — the property that makes an
unconfigured node recoverable.

Deploying

Sites install by cloning into /apps/external/uv/<version>. Use git clone or rsync -a; a cp -r
without -a will flatten bin/{uv,uvx,uvm} from symlinks into copies, which still works but stops
being one script.

git clone --depth 1 --branch 0.3.0 https://github.com/PurdueRCAC/uv-manager.git

A site tracking main picks this up on its next pull. A site pinned to a tag must be told to move.