Skip to content

Versionering

Greenbow-widgets findes i to varianter:

  • Embeddable widgets (fx SmartCharge, Driftstatus) — shipper både en uversioneret loader.js og en versioneret vN/-bundle.
  • Standalone widgets (fx Checkout Return) — shipper kun en versioneret vN/-bundle. Ingen loader.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

FilCacheVersioneringHvad
loader.js5 minutteruversioneretPublic embed-kontrakt. Loader iframen.
vN/1 år, immutableversioneretDen 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

  1. Byg ny dist/v2/ ved siden af eksisterende dist/v1/
  2. Bump VERSION = 'v2' i loader/loader.ts
  3. Deploy
  4. Partnere får automatisk v2 efter 5 minutter (loader-cache udløber)
  5. 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:

  1. Byg ny dist/v2/ ved siden af eksisterende dist/v1/
  2. Deploy
  3. 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.

Bygget af Greenbow