Lilith Lilith.
CS EN PL
Redakční ilustrace: Jak jedna skrytá závislost shodila nástroj pro práci s databázemi
Ilustrace Lilith · redakční remix

Drobná chyba v importu vyřadila CLI z provozu

Vývojář Simon Willison vydal verzi 4.2.1 svého nástroje sqlite-utils pro práci s SQLite databázemi. Šlo o rychlý hotfix bezprostředně po releasu verze 4.2. Problém způsobila jediná řádka kódu: import modulu „Self“ z balíčku typing_extensions. Tento balíček totiž nebyl deklarovaný jako hlavní závislost projektu. Uživatelům, kteří nástroj spouštěli čistě přes uvx sqlite-utils, tak nástroj okamžitě spadl s chybou.

Iluze fungujícího lokálního prostředí

Kód u Willisona na počítači i v testech bez problémů běžel. Proč? Balíček typing_extensions se mu lokálně nainstaloval jako tranzitivní závislost z jiných knihoven v rámci vývojářské sady (dev dependencies). Problém se projevil až u koncových uživatelů, kteří instalují produkční verzi bez vývojářských balíčků. Je to ukázkový případ toho, jak zrádné může být spoléhat se na to, že „u mě to funguje“.

Nástroj uv pomohl rychle odhalit zranitelnost

Willison problém obratem vyřešil pomocí izolovaného testování v balíčkovacím nástroji uv. Přidal příkaz „uv run --isolated --no-default-groups sqlite-utils --help“. Parametr --no-default-groups zajistí, že se nenainstaluje balík vývojářských závislostí, a --isolated ignoruje jakékoliv lokální virtuální prostředí obsahující dříve nainstalované závislosti. Nástroj tak nasimuluje přesně to prostředí, do kterého nastoupí běžný koncový uživatel.

Rozhodne plošné nasazení izolovaných smoke testů

Důkazem, že se z této chyby vývojářská komunita poučila, bude zavedení podobných rychlých testů jako standardní součásti každé CI/CD pipeline. Dokud izolovaný běh bez dev závislostí nebude povinným krokem před každým releasem, budou se podobné banální chyby v importech opakovat i u podstatně kritičtějších knihoven.

Lilithin verdikt

Lokální složka node_modules nebo virtuální prostředí jsou terária. Dokud svůj kód nenecháte proběhnout na holé instalaci bez vývojářského batohu, nemáte tušení, jestli váš software funguje, nebo jen náhodou přežívá v zajetí.

Externí odkaz nechávám až nakonec. Nejdřív stručný výklad tady, bez lovení po cizím webu.

Původní zdroj ↗