Tovarna
19 paketov, ena različica
· Toolkit · 2 min branja
Pred izdajo 1.0.0 je imel vsak od naših petih produktov svojo kopijo skupnih modulov SaaS za najemnike, uvajanje, organizacije, pravice do funkcij, merjenje porabe, obračunavanje in skrbniški API. Kopije so bile prenesene v repozitorij vsakega produkta, najstarejša pa je za najnovejšo zaostajala približno osem mesecev. Ko smo pisali navodila za nadgradnjo na prvo izdajo, je Gostly potreboval en seznam sprememb, MojRazpis in SnapMind pa daljši. Popravek v eni kopiji je prišel do drugih le, če ga je kdo prenesel ročno.
Ena različica za vse pakete
Skupno kodo smo 10. oktobra 2026 označili z v1.0.0 in jo objavili kot 19 paketov NuGet MicroSaas.Toolkit.* z eno samo različico. Nastavitve gradnje so v eni datoteki Directory.Build.props, cevovod ob oznaki pa vsem projektom poda -p:Version=X.Y.Z, zato se tudi paketi med seboj sklicujejo na isto različico. Opravilo za objavo se ustavi, če CHANGELOG.md za to različico nima razdelka ali jo še označuje kot neizdano, in prešteje zapakirane pakete:
[ "$count" -eq 19 ] || { echo "expected 19 packages, packed $count"; exit 1; }
Register paketov je nastavljen tako, da iste različice ne sprejme dvakrat, zato 1.0.0 pomeni enako kodo v vsakem produktu.
V produktu je različica ena sama lastnost v njegovi datoteki Directory.Build.props:
<MicroSaasToolkitVersion>1.0.0</MicroSaasToolkitVersion>
Vsak PackageReference na pakete toolkita prebere to lastnost. Produkti uporabljajo različne podmnožice paketov: Leadgener 6 od 19; Reputo 16; Gostly, MojRazpis in SnapMind po 17.
Kaj to stane in česa ne pomeni
Cena je zapisana v naši zasnovi: produkt ne more prevzeti popravka v modulu Organizations brez sprememb v modulu Billing iz iste izdaje. Pri enem vzdrževalcu je eno zaporedje različic cenejše od devetnajstih, dnevnik sprememb pa to ceno pokaže vnaprej. Dnevnik vsako spremembo, ki zahteva poseg, označi z [migration], [contract] ali [behaviour] in za vsako izhodišče navede, kaj mora produkt spremeniti pred nadgradnjo.
Ena različica ne pomeni skupnih nadgradenj. Nobena izdaja ne zahteva, da se dva produkta nadgradita hkrati. Vsak produkt je na 1.0.0 prešel s svojo zahtevo za združitev (merge request) v svojem repozitoriju. Vseh pet smo združili isti dan, ker so vsi produkti opuščali svoje kopije, ne zato, ker bi to zahtevala izdaja. Produkt, ki bo želel naslednjo izdajo, jo bo prevzel s spremembo ene vrstice, ko se bo za to odločil sam.
Za ekipo, ki gradi na toolkitu, to pomeni: pripnete eno številko, pred nadgradnjo preberete razdelke dnevnika sprememb med svojo in novo različico ter se nadgradite, ko vam ustreza, ne ko ustreza nam. Če dva produkta uporabljata različni izdaji toolkita, je to povsem sprejemljivo, ker si delita kodo, nikoli pa delujoče instance.