feat: Add uv_tools package category across all platforms#19
Merged
ryanspletzer merged 4 commits intomainfrom Mar 1, 2026
Merged
feat: Add uv_tools package category across all platforms#19ryanspletzer merged 4 commits intomainfrom
ryanspletzer merged 4 commits intomainfrom
Conversation
Replace pipx as the primary Python CLI tool manager with uv tool install. On macOS/Windows, pipx_packages is emptied (uv available via Homebrew/ Chocolatey). On Linux, pipx retains only uv itself to bootstrap, then uv manages the rest via uv_tools. Each platform guards the uv_tools step on uv being installed -- Ansible playbooks use a `which uv` check, Windows uses Get-Command. If uv is not present the step is silently skipped. Updates vars.yaml, setup scripts, examples, tests, READMEs, and all docs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two CI failures: 1. Ansible pipx_packages loops crash with "NoneType" when the bare YAML key resolves to None (no value). Add `| default([])` to the existing loop expressions in all 4 Ansible playbooks, matching the pattern already used for uv_tools. 2. macOS test verify.sh fails because uv is not in the test homebrew_formulae, so `which uv` returns non-zero and ruff is never installed via uv tool. Add uv to the test formula list. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bare YAML keys like `pipx_packages:` resolve to None (defined but null). Jinja2 `default([])` only replaces undefined variables, not null ones. The second argument `true` makes default() also replace falsy values including None. Applied to both pipx_packages and uv_tools loops. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Harden all loop directives and `when: ... | length` conditions across all 4 Ansible playbooks against YAML bare keys resolving to None. Previously only pipx_packages and uv_tools had this protection. This extends it to: homebrew_taps, homebrew_casks, homebrew_formulae, powershell_modules, vscode_extensions, npm_global_packages, dotnet_tools, custom_commands_user, custom_commands_elevated, external_apt_repositories, external_dnf_repositories, snap_packages, flatpak_packages, and appimage_packages. Also upgrades existing default([]) calls to default([], true) so they handle both undefined and null/falsy values consistently. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
uv_toolsas a new package category across all 5 platforms (macOS, Windows, Ubuntu, Debian, Fedora), usinguv tool installto manage Python CLI toolspipx_packagesis emptied since uv is available directly via Homebrew/Chocolatey; on Linux, pipx retains onlyuvto bootstrap the toolchainuv_toolsinstallation step on uv being present — if uv is not installed, the step is silently skippedFiles changed (32)
{macOS,windows,ubuntu,debian,fedora}/vars.yaml{macOS,ubuntu,debian,fedora}/setup.yaml,windows/setup.ps1examples/{macOS,windows,ubuntu,debian,fedora}_vars.yamltests/{macOS,windows,ubuntu,debian,fedora}/vars.yaml,tests/macOS/verify.sh{macOS,windows,ubuntu,debian,fedora}/README.mddocs/{architecture,configuration-reference,customization,design-principles,package-management}.mdCLAUDE.mdTest plan
python -c "import yaml; yaml.safe_load(open(...))")windows/setup.ps1([System.Management.Automation.Language.Parser]::ParseFile(...))cd macOS && ansible-playbook setup.yaml --check --tags uvgrep -rn 'uv_tools' */vars.yaml */setup.yaml windows/setup.ps1 CLAUDE.md🤖 Generated with Claude Code