Udgivelser og pre-release-kanal¶
Hvordan Turbo EA versionerer, tagger og publicerer containerimages. Denne side er referencen for operatører, der har brug for at fastlåse versioner i produktion, og for bidragydere, der udgiver releases.
Versionering¶
Turbo EA følger Semantic Versioning. Den eneste kilde til sandhed for den aktuelle version er /VERSION-filen i repository-roden.
- Patch (f.eks.
1.0.0→1.0.1): kun fejlrettelser. Altid sikker at opgradere. - Minor (f.eks.
1.0.0→1.1.0): nye funktioner. Bagudkompatibel ifølge kompatibilitetspolitikken. - Major (f.eks.
1.x→2.0.0): brydende ændringer. Migrationsnoter leveres med udgivelsen.
Versionen bumpes én gang pr. PR, ikke pr. commit. PR'ens CHANGELOG-post bruger den nye version som overskrift; CI'ens version-check.yml fejler enhver PR, der bumper VERSION uden en matchende ## [<version>]-overskrift i CHANGELOG.md.
Containerimage-tags¶
Hvert push til main og hvert v*.*.*-tag udløser .github/workflows/docker-publish.yml, som bygger og pusher multi-arch (amd64 + arm64) images til GHCR.
For et release-tag som v1.2.3 er de publicerede tags på hvert image:
| Tag | Peger på | Stabilt? |
|---|---|---|
1.2.3 |
præcis den udgivelse | ja — fastlås dette i produktion |
1.2 |
seneste patch på 1.2.x |
ruller fremad ved patches |
1 |
seneste minor på 1.x |
ruller fremad ved minors |
latest |
seneste ikke-prerelease | ruller fremad ved hver udgivelse |
sha-<short> |
præcis commit | ja — debugging / pre-release |
For push til main (intet tag) produceres kun main- og sha-<short>-tags — aldrig latest, aldrig noget semver-tag.
Alle publicerede image-manifester er signeret med cosign keyless OIDC. Verifikations- og SBOM-detaljer findes i Supply Chain.
Pre-release-kanal¶
For minors, der ændrer containerlayout, base-images, standard-UID'er, volumenavne, standardporte eller skema på en måde, der kræver operatørhandling, udgives en release candidate før det endelige tag.
Konventioner:
- RC-tags er
vX.Y.0-rc.N— aldrig på en patch-udgivelse, kun på minors med operatør-synlige ændringer. - Publiceringsarbejdsprocessens
docker/metadata-actioner konfigureret medflavor: latest=auto. Dette ekskluderer automatisk prerelease-semver-tags fra:latest,:X.Yog:X— RC'er publiceres kun som:X.Y.0-rc.N. Operatører, der fastlåser til:latest, vil ikke ved en fejl trække en RC. - GitHub Release for et RC-tag bør flages som en prerelease på Releases-siden. Den nuværende
github-release.yml-arbejdsproces opretter altid en ikke-prerelease-udgivelse; vedligeholderen vipper prerelease-knappen manuelt, efter at arbejdsprocessen kører (eller redigerer udgivelsen viagh release edit vX.Y.0-rc.N --prerelease).
Bagetid:
- En RC forbliver ude i mindst 48–72 timer før forfremmelse, eller indtil mindst én operatør uden for vedligeholderen rapporterer vellykket opgradering tilbage — hvad der end er længst.
- Fejlrapporter mod en RC sendes som
vX.Y.0-rc.N+1, hvis problemet er rettelses-værdigt. Den forrige RC efterlades i GHCR for reproducerbarhed.
Forfremmelse til final:
- Det endelige
vX.Y.0-tag oprettes på den samme commit som den sidste RC. Publiceringsarbejdsprocessen genopbygger og re-tagger multi-arch-images; digestet vil afvige fra RC'en, selvom kilden er identisk (build-input inkluderer tidsstempler). :X.Y-,:X- og:latest-tags flyttes for at pege på den endelige udgivelse på dette tidspunkt.
Udgivelse af en release (vedligeholder-tjekliste)¶
For en normal patch eller minor — ingen RC-kanal nødvendig:
- På en feature-branch bumpes
VERSION, og den matchende## [<version>] - YYYY-MM-DD-overskrift tilføjes tilCHANGELOG.md. - Kør
python scripts/dump_openapi.py, hvis nogen backend-rute eller -skema er ændret; commit resultatet, hvis det er ændret. - Åbn PR'en. CI kører lint, tests, OpenAPI drift-tjek og
version-check.yml. - Squash-merge til
main. - Fra
main:git tag -s v<version> -m "v<version>"(ellergit tag v<version>, hvis ingen signeringsnøgle er konfigureret),git push origin v<version>. - Arbejdsprocessen
Publish GitHub Releaseudtrækker## [<version>]-sektionen fraCHANGELOG.mdog opretter en GitHub Release. - Arbejdsprocessen
Publish Docker images to GHCRbygger, signerer og publicerer multi-arch-billederne. - Verificér med cosign:
cosign verify \ --certificate-identity-regexp 'https://github.com/vincentmakes/turbo-ea/.+' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ ghcr.io/vincentmakes/turbo-ea/backend:<version>
For en minor, der berettiger en RC:
- Samme PR-og-merge-flow som ovenfor, men bump til
1.Y.0-rc.1. - Efter merge tagges
v1.Y.0-rc.1og pushes. Publiceringsarbejdsprocessen bygger og pusher RC-billederne (kun:1.Y.0-rc.1, aldrig:latesteller korte tags —flavor: latest=autohåndterer det). Release-arbejdsprocessen opretter en GitHub Release; vip den manuelt til prerelease bagefter viagh release edit v1.Y.0-rc.1 --prereleaseeller i GitHub UI'en. - Vent på bagevinduet. Adressér eventuelle rapporterede problemer med
-rc.2,-rc.3efter behov. - For at forfremme: bump
VERSIONtil1.Y.0i en endelig PR (CHANGELOG-post konsoliderer alle RC-rettelser), merge, tagv1.Y.0, push.:latest- og korte tags peger nu på den forfremmede udgivelse.
End-of-life¶
Kun den seneste minor-linje modtager sikkerhedsrettelser. Se SECURITY.md for den fulde politik. Ældre minor-linjer er end-of-life og vil ikke modtage backports — operatører på ældre versioner bør planlægge opgraderinger gennem kompatibilitetspolitikken.