Novi Odoo modul: bringout_module_version_check — automatska detekcija zaboravljenih nadogradnji
Problem koji rješavamo
U Odoo svijetu postoji jedna tiha klasa grešaka koju vidimo iznova i iznova: programer commituje izmjene u modul, podigne version u __manifest__.py, ali zaboravi pokrenuti -u <modul> na nekoj od produkcijskih instalacija. Kod na disku je nova verzija, baza misli da je stara verzija — sve “radi” dok jednog dana neki view, neka migracija, ili neka cron metoda ne počne padati na način koji niko ne može odmah objasniti.
Ista priča važi i obrnuto: napraviš -u ali zaboraviš commitati version bump. Sljedeći deploy uspješno overpisuje promjene jer Odoo ne vidi razliku u verziji.
Mi smo se sa ovim igrali predugo. Riješili smo ga novim malim modulom.
Šta je bringout_module_version_check
Modul proširuje standardnu ir.module.module tabelu sa dva runtime-computed polja:
manifest_version— verzija pročitana uživo iz__manifest__.pyna disku, svaki put kad se polje pozoveversion_mismatch—Truekad selatest_version(verzija instalirana u bazi) razlikuje odmanifest_version
Pošto su polja compute (a ne store), nema migracija, nema invalidacije keša, nema “stale data” problema. Pitaš — modul ti uvijek odgovori iz trenutnog stanja diska.
Uz to, modul donosi:
- Filtrirani tree view + meni “Modules Needing Upgrade” unutar Settings → Technical → Modules — odmah vidiš listu modula kojima fali
-u - JSON-RPC metoda
get_version_mismatches(parametaronly_bringoutfiltrira na naše interne module) — programatski callable iz CI/deploy skripti
Integracija u deployment pipeline
Najvažnija stvar — modul nije samo “vidi ga u Odoo UI” alat. Ugrađen je u našu deployment skriptu (odoo_upgrade_lib.py) kao Step 8: Global version self-check.
Tok izgleda ovako:
- Razvojni inženjer mijenja kod modula, podiže verziju, commit-uje
- Pokreće
upgrade_production_nix_<node>.py --modules <imenovaniModul> - Skripta podigne novu zip, deploy-uje preko Colmene, restartuje servis
- Step 6 verifikuje da je izričito traženi modul stigao do baze sa tačnom novom verzijom
- Step 8 poziva
get_version_mismatchespreko XML-RPC i pita Odoo: “ima li bilo koji drugi naš modul gdje je verzija u kodu drugačija od verzije u bazi?”
Ako Step 8 pronađe mismatcheve, ispiše tabelu i baci warning. Razlog je jednostavan: deploy je “uspio” za modul koji si tražio, ali si zaboravio pet drugih modula koje si commitao prošle sedmice. Sa Step 8 to nikad ne ostane neprimijećeno.
Module DB On Disk
--------------------------------------------------------------------------------
⚠️ l10n_ba_some_module 16.0.1.2.0 16.0.1.3.0
⚠️ l10n_ba_other_module 16.0.1.0.0 16.0.1.1.0
--------------------------------------------------------------------------------
Nakon ovog warninga, sljedeća akcija je trivijalna: re-run sa proširenom listom --modules. Cijeli ciklus je samostalan, nema “kako sam ja znao da treba nadograditi i taj modul” izgovora.
Zašto se ovo isplati
Imamo više od stotinu lokalnih i OCA modula raspoređenih po više produkcijskih Odoo instalacija. Bez ovog modula svaki deploy je bio “vjeruj da si sve commitao i sve nadogradio”. Sa ovim modulom — Odoo sam kaže “ova lista ti je ostala”. Tri reda Python koda, nula DB izmjena, jedan novi meni, jedna nova XML-RPC metoda — i čitav razred sumnji nestaje.
Ovo je vrsta sitne infrastrukturalne robe koja se isplati u prvoj nedjelji rada. Ne donosi prihod, ne dodaje feature za krajnjeg korisnika — ali svaki put kad bi deploy padao zbog “zaboravljene” nadogradnje, sad ne pada. To je sav novac koji se ne troši na debugging u 23:00.
Tehničke informacije
- Repozitorij: github.com/bringout/odoo-bringout-bringout_module_version_check
- Licenca: AGPL-3
- Odoo verzija: 16.0
- Zavisi od:
base - Verzija: 16.0.1.0.0
Napomena
Generisano od strane Claude 🤖
Ernad Husremović, hernad@bring.out.ba