ohbin – Instalimi deklarativ i binarëve nga GitHub për projektet Python me uv
Shumë projekte Python kanë nevojë për mjete të tilla si **ripgrep**, **oasdiff** apo ndonjë linter Rust që vjen vetëm si një binarë në një release të GitHub‑it. Python s’ka mundësi të instalojë drejtpërdrejt këto skedarë, ndaj zhvilluesit shpesh i kërkojnë kolegëve “ta instalojnë vetë”, çka sjell versionime të paqëndrueshme dhe ndërprerje në CI, ose krijojnë paketë wrapper për secilin mjet dhe e kopjojnë në çdo repo. Kjo metodë është e ngarkuar me duplikime dhe e vështirë për mirëmbajtje.
**ohbin** eliminon problemin duke lejuar deklarimin e binarit në skedarin *pyproject.toml*. Kur mjeti përdoret për herë të parë, ohbin e shkarkon automatikisht nga release‑i përkatës në GitHub, kontrollon hash‑in SHA‑256 të përcaktuar, e ruan në cache sipas host‑it dhe e ekzekuton. Kështu, projekti ka vetëm një varësi zhvillimi (ohbin) dhe mund të përfshijë sa mjete të duhen, pa nevojë për paketë wrapper për secilin prej tyre.
Ndërkohë që **uv** nuk mund të instalojë një binarë të çuar në një release GitHub – pasi uv trajton vetëm “entry point”‑e Python të përkufizuara në metadata të wheel‑it – ohbin vepron si një urë ndërmjet “binarit në faqe release” dhe “komandës në ambientin virtual”. Në vend të krijimit të paketave wrapper për çdo mjet, ohbin përdor një tabelë të vetme në `[tool.ohbin.tools.*]` ku përmendet repo‑ja, versioni, asset‑i për secilën platformë dhe checksum‑i. Një motor i thjeshtë, i ndërtuar kryesisht me bibliotekat standarde të Python, merret me shkarkimin, verifikimin, caching‑un dhe ekzekutimin për të gjitha mjetet.
Për binarë privatë, ohbin ofron një zgjidhje me **gist** të enkriptuar. Binarët ngarkohen në një gist të padukshëm, i enkriptohen me AES‑256‑CBC (PBKDF2 me 200 000 iteracione) dhe ruhet hash‑i i ciphertext‑it. Gist‑i mund të shtohet në projekt me komandën `add-gist`, duke ruajtur fjalëkalimin në një repo private ose duke e dhënë në kohë ekzekutimi. Ohbin përdor CLI‑në *gh* për autentikim dhe limitet e kërkesave, dhe *openssl* për dekriptimin, pa ekspozuar fjalëkalimin në argumentet e komandës. Gjithashtu, çdo kërkesë për release apo shkarkim përsëritet me back‑off eksponencial për të kapërcyer probleme të përkohshme të rrjetit, duke siguruar që një 404 të vërtetë të mos trajtohet si gabim të përkohshëm.
Me këtë qasje, projektet e bazuara në uv mund të ndalojnë kopjimin e paketave wrapper dhe të fillojnë të deklarojnë drejtpërdrejt binarët që u duhen, duke thjeshtuar menaxhimin e varësive, duke përmirësuar qëndrueshmërinë në CI dhe duke siguruar një metodë të sigurt për binarë privatë.
