Versionering
Greenbow-widgets findes i to varianter:
- Embeddable widgets (fx SmartCharge, Driftstatus) — shipper både en uversioneret
loader.jsog en versioneretvN/-bundle. - Standalone widgets (fx Checkout Return) — shipper kun en versioneret
vN/-bundle. Ingenloader.js, fordi de rammes direkte på deres subdomæne i stedet for at blive embedet.
Resten af denne side handler om embeddable widgets, medmindre andet er nævnt.
To artefakter pr. embeddable widget
| Fil | Cache | Versionering | Hvad |
|---|---|---|---|
loader.js | 5 minutter | uversioneret | Public embed-kontrakt. Loader iframen. |
vN/ | 1 år, immutable | versioneret | Den faktiske app — Vue, SCSS, assets |
Den uskrevne kontrakt
loader.js-URL'en og dens data-*-API er forever. Vi må aldrig:
- Ændre URL'en til loaderen
- Fjerne en
data-*-attribut - Ændre semantikken af en eksisterende attribut
- Bryde
postMessage-kontrakten med iframen
Hvis vi vil ændre noget af det, shipper vi en ny widget under et nyt slug.
Hvad vi MÅ ændre
- Tilføje nye
data-*-attributter (med fornuftige defaults) - Bygge nye versioner af appen (
v2/,v3/) - Bumpe
VERSION-konstanten i loaderen så den peger på den nyeste
Når vi bumper version
- Byg ny
dist/v2/ved siden af eksisterendedist/v1/ - Bump
VERSION = 'v2'iloader/loader.ts - Deploy
- Partnere får automatisk v2 efter 5 minutter (loader-cache udløber)
- Hvis en partner skal blive på v1, kan de pinne URL'en manuelt
Hvorfor ikke semver-pinning i loader-URL?
Vi har overvejet loader-v1.js, loader-v2.js osv. Vi valgte det fra fordi:
- Partnere ville aldrig opgradere — de er ikke abonnenter på vores changelog
- Bug-fixes ville ikke nå brugere
- Vi vil hellere være tvunget til at holde loader-API stabil end at have N versioner i flight på samme tid
Standalone widgets
Standalone widgets (uden loader.js) bruger samme vN/-mønster, men der er ingen embed-kontrakt at holde stabil — kun selve URL'en. Når Checkout Return bumper til v2:
- Byg ny
dist/v2/ved siden af eksisterendedist/v1/ - Deploy
- Opdater den part der peger på widgetten (fx Bambora return-URL i selvbetjenings-konfigen) til at bruge
/v2/i stedet for/v1/
v1/ bliver liggende, så ældre app-versioner i marken stadig kan ramme den.