Skip to content

feat: Add uv_tools package category across all platforms#19

Merged
ryanspletzer merged 4 commits intomainfrom
feature/uv-tool-installs
Mar 1, 2026
Merged

feat: Add uv_tools package category across all platforms#19
ryanspletzer merged 4 commits intomainfrom
feature/uv-tool-installs

Conversation

@ryanspletzer
Copy link
Owner

Summary

  • Adds uv_tools as a new package category across all 5 platforms (macOS, Windows, Ubuntu, Debian, Fedora), using uv tool install to manage Python CLI tools
  • On macOS/Windows, pipx_packages is emptied since uv is available directly via Homebrew/Chocolatey; on Linux, pipx retains only uv to bootstrap the toolchain
  • Each platform guards the uv_tools installation step on uv being present — if uv is not installed, the step is silently skipped
  • Updates all vars.yaml configs, Ansible playbooks (new tagged task block), Windows setup.ps1 (new region block), examples, tests, platform READMEs, docs, and CLAUDE.md

Files changed (32)

Category Files
Core configs {macOS,windows,ubuntu,debian,fedora}/vars.yaml
Setup scripts {macOS,ubuntu,debian,fedora}/setup.yaml, windows/setup.ps1
Examples examples/{macOS,windows,ubuntu,debian,fedora}_vars.yaml
Tests tests/{macOS,windows,ubuntu,debian,fedora}/vars.yaml, tests/macOS/verify.sh
Platform READMEs {macOS,windows,ubuntu,debian,fedora}/README.md
Docs docs/{architecture,configuration-reference,customization,design-principles,package-management}.md
Project docs CLAUDE.md

Test plan

  • Verify YAML syntax is valid on all vars.yaml files (python -c "import yaml; yaml.safe_load(open(...))")
  • Verify PowerShell syntax on windows/setup.ps1 ([System.Management.Automation.Language.Parser]::ParseFile(...))
  • Ansible dry-run on macOS: cd macOS && ansible-playbook setup.yaml --check --tags uv
  • Grep sanity check: grep -rn 'uv_tools' */vars.yaml */setup.yaml windows/setup.ps1 CLAUDE.md
  • CI workflow passes

🤖 Generated with Claude Code

ryanspletzer and others added 4 commits March 1, 2026 16:59
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>
@ryanspletzer ryanspletzer merged commit 29ce2a8 into main Mar 1, 2026
9 checks passed
@ryanspletzer ryanspletzer deleted the feature/uv-tool-installs branch March 1, 2026 22:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant