Chi automatizza workflow su GitHub Actions conosce il pattern: serve eseguire al volo un tool Python con uvx nome-del-tool, senza portarsi dietro un’installazione manuale. Il problema è che ogni run del workflow finisce per fare una richiesta di rete a PyPI per scaricare tool e dipendenze. Simon Willison ha condiviso una ricetta cache-friendly che risolve esattamente questo: far scaricare il tool la prima volta e riusarlo dalla cache di GitHub Actions nelle esecuzioni successive.
Il trucco
Il cuore della soluzione è impostare una variabile d’ambiente UV_EXCLUDE_NEWER: "2026-07-12" all’inizio del workflow e usarla come parte della chiave della cache di GitHub Actions. In questo modo qualsiasi comando uvx nome-tool risolve alla versione più recente disponibile a quella data. Il vantaggio pratico è doppio: da un lato le risoluzioni diventano deterministiche e riproducibili, dall’altro si può forzare l’aggiornamento dei tool semplicemente spostando la data in avanti, cosa che invalida (bust) la cache e fa ripartire il download aggiornato.
Per chi lavora con pipeline di dati e CI/CD, il beneficio è concreto: meno traffico verso PyPI, run più rapidi e comportamento stabile nel tempo, perché la stessa data produce sempre lo stesso set di versioni. È un modo per evitare la classica situazione in cui un workflow che “funzionava ieri” si rompe oggi perché una dipendenza è stata aggiornata a monte.
Perché conta
La combinazione tra uv e uvx ha reso molto comodo lanciare strumenti Python usa-e-getta, ma la comodità nasconde un costo nascosto quando la si porta in un contesto di automazione ripetuta. Legare UV_EXCLUDE_NEWER alla chiave di cache trasforma un comando pensato per l’uso interattivo in qualcosa di adatto anche a un ambiente CI, dove prevedibilità e velocità contano più dell’avere sempre l’ultimissima versione.
Willison segnala anche una discussione aperta sul repository astral-sh/setup-uv, in cui si chiede di rendere il comportamento predefinito quello di mettere in cache i wheel di PyPI invece di eliminarli. Nel frattempo, la ricetta con la variabile d’ambiente è un’accortezza semplice da adottare subito nei propri workflow.
- Impostare
UV_EXCLUDE_NEWERcon una data e usarla nella cache key rende le esecuzioni diuvxriproducibili e cache-friendly. - Per aggiornare i tool basta spostare la data in avanti, invalidando la cache in modo controllato.
- Il risultato è meno dipendenza da PyPI a ogni run e workflow più stabili e veloci.
Fonte: TIL: Using uvx in GitHub Actions in a cache-friendly way — https://simonwillison.net/2026/Jul/14/uvx-github-actions-cache/
Hai qualcosa da aggiungere? Unisciti alla discussione.