Vse novice

Tovarna

Pravilo žetve: kdaj koda postane gradnik

· Toolkit · 2 min branja

Diagram: Reputo in Leadgener predata svoji kopiji skupnemu gradniku Keycloak; prenos je zvest, enakost pa dokazujejo izvozi realma.

Produkt najprej v svojem repozitoriju zgradi, kar potrebuje. Vprašanje je, kdaj del te kode postane gradnik. Če kodo v gradnik prenesemo prezgodaj, načrtujemo za produkte, ki jih še ni. Če prepozno, se kopije razhajajo: isti popravek priprave Keycloaka je 10. oktobra prišel v Reputo in Leadgener z dvema zahtevama za združitev, po eno za vsako kopijo.

Dva pogoja, oba nujna

Kodo prenesemo v gradnik samo, kadar isto delovanje potrebuje tudi drugi produkt in se to delovanje ne sme razlikovati, ker gre za varnost, pravne zahteve, obratovanje ali pogodbo vmesnika API. Če drži le prvi pogoj, drugi produkt kodo prekopira in odtlej sam skrbi za svojo kopijo. Zato ogrodje aplikacije, tema za prijavo in predstavitvena stran ostajajo kopije. V šestih mesecih morata gradnik uporabljati vsaj dva produkta, sicer ga vrnemo v produkt, iz katerega izhaja.

Za produkt velja druga polovica pravila: kode gradnika ne spreminja. Pripne različico, spremembo gradnika pa naredimo v gradniku in jo izdamo kot novo različico. Za pakete NuGet ima vseh pet produktov v datoteki CI isto preverbo:

test ! -e libs/microsaas-toolkit || { echo "libs/microsaas-toolkit is back; change the toolkit in its own repository"; exit 1; }

Kako je nastal gradnik Keycloak

Reputo in Leadgener sta imela vsak svojo kopijo skripta za pripravo realma, dolgo 347 oziroma 348 vrstic. Skript nastavi, kar mora biti enako v vsakem realmu, na primer izklopljeno samoregistracijo in PKCE z metodo S256 za odjemalce v brskalniku. Kopija v Leadgenerju je nastala 8. oktobra; tri dni pozneje sta se kopiji poleg privzetih vrednosti posameznega produkta razlikovali še v komentarjih in opisu ene vloge.

Pripravo realma smo v gradnik Keycloak prenesli 11. oktobra 2026, in to zvesto: iz enakih vrednosti nastane enak realm, čiščenja kode pa v istem koraku ni bilo. Na novi namestitvi Keycloaka smo zagnali najprej skripte vsakega produkta, nato gradnik, in za vsak produkt primerjali normalizirana izvoza realma. Bila sta enaka do zadnjega bajta, razen opisa tiste vloge. To odstopanje je skupaj z razlogom zapisano v datoteki odstopanj.

Nato je vsak produkt kopijo zamenjal s svojo zahtevo za združitev. Skript se je skrčil na ovojni skript, ki vsebuje le privzete vrednosti produkta: v Reputu ima 46 vrstic, v Leadgenerju 47. Sliko gradnika ima vsak produkt pripeto na različico in povzetek (digest).

Gradnik Keycloak je torej koda, ki je že tekla v dveh produktih in je prenesena tako, da deluje enako kot tam. To dokazujejo testi, katerih rezultat pregledovalec vidi kot razliko v datotekah. Kadar gradnik ne naredi, kar potrebujete, ga ne popravljate v svojem produktu. Zaprosite za novo nastavitev, ki pride v manjši izdaji (minor) in privzeto ohrani dosedanje delovanje, to izdajo pa pripnete, ko se odločite sami. Kar potrebuje samo vaš produkt, ostane vaše.