v1.9.30
abx-pkg v1.9.30
✨ Highlights
- Added
abx-pkg run --script, which reads inline/// scriptmetadata blocks so scripts can declare binary dependencies andtool.abx-pkgsettings right at the top of the file. - Unified managed providers around shared
install_root/bin_dirbehavior, and madeABX_PKG_LIB_DIRresolve from the live environment so CLI--liboverrides behave consistently. - Added first-class
--no-cacheand--debugCLI controls, and tightened the shared binary lifecycle soload()/install()/update()/uninstall()all speak the same cache semantics. - Fixed several installer-resolution and recursion edge cases, while making the real Playwright and Puppeteer test paths much faster instead of faking them.
🧭 Quick Examples
abx-pkg --lib=/tmp/abx --no-cache install yt-dlp
abx-pkg --debug --binproviders=env,npm,playwright run --script node ./capture.js#!/usr/bin/env -S abx-pkg run --script node
// /// script
// dependencies = [
// {name = "playwright", binproviders = ["npm", "pnpm"]},
// {name = "chromium", binproviders = ["playwright", "puppeteer", "apt"], min_version = "131.0.0"},
// ]
// [tool.abx-pkg]
// ABX_PKG_POSTINSTALL_SCRIPTS = true
// ///🛠 What Changed
parse_script_metadata()andrun --scriptnow parse comment-prefix-agnostic/// scriptblocks, resolve declared dependencies before execution, merge[tool.abx-pkg]settings, and preserve child exit codes/stdout/stderr cleanly.- The provider constructor surface now consistently prefers
install_rootandbin_dir, while legacy provider-specific root aliases are still accepted through validation aliases. abx_pkg_install_root_default()now readsABX_PKG_LIB_DIRfrom the live environment instead of a module-import snapshot, so CLI--liband runtime env overrides propagate correctly across providers.- Removed
load_or_installfrom the public API / CLI in favor ofinstall(), and promotedno_cacheinto the shared lifecycle surface forBinaryandBinProvider. - Hardened installer resolution across providers: fixed
detect_euid()recursion, fixed dry-run version probing, corrected GoPATH/ env handling, restored Yarn Berry--forcebehavior forno_cache, and normalized installer-binary abspath handling. - Playwright and Puppeteer now share the cleaned
install_root/bin_dirmodel, bootstrap their installer binaries more predictably, and reuse seeded real browser installs in tests to cut redundant downloads. - CI now provisions both Yarn classic and Yarn Berry explicitly, pins pnpm to
10.19.0, and uses workflow concurrency cancellation plus job timeouts to prevent stale runs from piling up. - README and generated docs were refreshed to match the new CLI, lifecycle, and managed-root behavior.
⚠️ Behavioral Changes
- Use
Binary.install()/abx-pkg installinstead ofload_or_install. - CLI logging now defaults to
INFO; enable debug output explicitly with--debugorABX_PKG_DEBUG=1. --no-cache/ABX_PKG_NO_CACHE=1now apply consistently acrossload(),install(),update(),uninstall(), andrun.
🧪 Verification
uv run prek run --all-filespassed on the release commit.- Focused real-provider coverage was exercised for Playwright, Puppeteer, Bun, pnpm, Yarn classic, Yarn Berry, and GoGet lifecycle paths.
Thanks to everyone pushing on the install-root cleanup, browser provider edge cases, and CLI ergonomics. 🛠️