GH GambleHub

Versioning sémantique

Versioning sémantique

1) Qu'est-ce que BouVer et pourquoi il est nécessaire

SamVer définit des règles prévisibles pour l'attribution de versions aux artefacts (bibliothèques, API, services, schémas) afin que les consommateurs comprennent à quoi s'attendre d'une mise à jour :
  • MAJOR - Modifications incompatibles.
  • MINOR est une nouvelle fonctionnalité compatible avec l'API.
  • PATCH - corrections de défauts réversibles.

Objectif : négocier la stabilité des contrats et réduire le coût des mises à jour.

2) Format de version

Format de base :
  • `MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD]`

`1. 4. 7 '- sortie stable.
`1. 5. 0-rc. 2 '- pré-sortie (version candidate n ° 2).
`2. 0. 0+linux. arm64 '- métadonnées de build (n'affectent pas la comparaison des versions).

Règles de comparaison :

1. On compare d'abord 'MAJOR', puis 'MINEUR', puis 'PATCH'.

2. Les versions pré sont inférieures à la version stable correspondante : '1. 2. 0-rc. 1 < 1. 2. 0`.

3. Les métadonnées de construction ('+...') n'affectent pas l'ordre : '1. 2. 0+001 == 1. 2. 0`.

3) Ce qui compte breaking change

Breaking change - toute modification nécessitant l'action du consommateur :
  • Supprimer/renommer/changer la signature des méthodes/endpoints publics.
  • Modifier le format d'entrée/sortie (schéma JSON, types).
  • Modification des contrats d'erreurs (codes/structures).
  • Modifier les side-effects/SLA (par exemple, limites strictes ou nouveaux champs obligatoires).

Non breaking (lorsqu'il est correctement implémenté) : ajout de champs facultatifs, extension enum avec de nouvelles valeurs (si le client les ignore), de nouveaux endpoints, de nouveaux drapeaux avec des défauts qui n'affectent pas les appels en cours.

4) Pré-sorties et stratégies de canal

Les pres-releases vous permettent de tester sans perturber vos promesses BouVer :
  • Étiquettes : 'alpha', 'beta', 'rc'. Exemple : '2. 3. 0-beta. 3`.
  • Chaînes : nightly → alpha → beta → rc → stable.
  • Stratégie : Les pré-versions ne doivent pas être considérées comme des dépendances transitives pour les assemblages prod par défaut.

5) Gammes de versions et précision des dépendances

Les écosystèmes réels utilisent des expressions de fourchettes :

5. 1 Node/npm (BouVer par défaut)

`^1. 4. 2` ≈ `>=1. 4. 2 <2. 0. 0 '(autorise MINOR/PATCH, fixe MAJOR).
`~1. 4. 2` ≈ `>=1. 4. 2 <1. 5. 0 '(autorise PATCH au sein de MINOR).
`1. 4. x 'est tout paiement en 1. 4.
Pin exact : '1. 4. 2`.

5. 2 Python (PEP 440, pip)

`~=1. 4. 2` ≈ `>=1. 4. 2,==1. 4.`.
`>=1. 4,<2. 0 'sont des limites explicites.

5. 3 Maven/Gradle (Java)

`[1. 4,2. 0) - inclusivement/exclusivement.
Des coups de pied stricts sont recommandés pour les artefacts critiques.

5. 4 Go modules

Toujours des tags'vMAJOR. MINOR. PATCH ';' v2 + 'nécessite le suffixe du module '/v2'.

Recommandation : pour les applications - pins exacts (constructions réparables). Pour les bibliothèques, des gammes caret (faciliter les mises à jour sans cassure).

6) CHANGELOG и Conventional Commits

Un journal des changements structuré améliore la transparence.

Conventional Commits:

feat(payments): add PIX refund endpoint fix(api): correct 400 → 422 on invalid payload perf(cache): reduce p99 by 20%
refactor(core): extract rule engine docs: update API usage examples chore(deps): bump lodash to 4. 17. 21 feat!: remove legacy webhook v1 (BREAKING CHANGE:...)

Типы: `feat`, `fix`, `perf`, `docs`, `refactor`, `chore` и т. д.
Un point d'exclamation ou un bloc 'BREAKING CHANGE' annonce une augmentation MAJOR.
CHANGELOG est généré à partir de l'histoire des commits (release-notes bots).

7) Politique de versioning pour l'API

APIs publiques : BouVer strict ; breaking → MAJOR.
HTTP/REST : versioning par URL/en-tête : '/v1/... ', '/v2/...' ou 'Accept : application/vnd. org. service. v2+json`.
Schémas JSON : extensions mineures - nouveaux champs facultatifs ; major - supprimer/modifier les obligatoires.
gRPC/Protobuf : ajouter de nouveaux champs avec de nouveaux numéros ; n'utilisez pas les numéros de champ ; supprimer → deprecate plutôt que de « casser » les deprecate existants.

8) Schémas de données et de migration

Les migrations OBD sont synchronisées avec les versions de l'application : 'app @ 1. 8. 0 'nécessite' schema @ 1. 8. x`.
Pour le breaking des changements de schéma - phases : expand (ajouter), migrate, contract (supprimer). N'augmentez la version MAJOR que lorsque vous supprimez l'ancien contrat.
Maintenez la double écriture/lecture pendant la migration.

9) Monorépo et microservices

Multi-package : chaque paquet est son propre 'MAJOR. MINOR. PATCH`; un cycle racine générique de libération uniquement pour les méta-artefacts.

Variez les stratégies :
  • Versions indépendantes (Lerna/Changesets) - renforce l'isolation.
  • Lock-step est plus facile à communiquer, mais plus faux MAJOR.
  • Pour les microservices, fixez les contrats (OpenAPI/Protobuf) avec une version distincte : 'contract @ 2. 1. 0 ', le service la suit.

10) Automatisation des sorties en CI/CD

Automatisation de la version basée sur les Comités Conventionnels :
  • `fix` → `PATCH`, `feat` → `MINOR`, `!`/`BREAKING` → `MAJOR`.
Étiquettes automatiques et signature des artefacts :
yaml
Pseudo-workflow steps:
- run: npx semantic-release
- run: git tag v$NEW_VERSION && git push --tags
- run: cosign sign ghcr. io/org/app:v$NEW_VERSION

La génération CHANGELOG, la publication de la sortie, la mise à jour des dépendances dans GitOps-repo, la vérification que 'main' indique toujours la dernière balise stable.

11) Politique de privation (politique de déprection)

Annonce : marquez la fonctionnalité comme deprecated dans la version MINOR, laissez un délai EOL (par exemple 90 jours).
Observabilité : Loger l'utilisation d'endpoints obsolètes avec un contexte user/tenant.
Suppression : dans le MAJOR suivant. Documentez le chemin de migration.

12) Exemples et modèles

12. 1 Expression régulière de validation BouVer

regex
^(0    [1-9]\d)\.(0    [1-9]\d)\.(0    [1-9]\d)(?--([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))? (?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))?$

12. 2 Exemples de comparaisons

`1. 2. 3` < `1. 10. 0 '(comparaison MINOR).
`2. 0. 0-rc. 1` < `2. 0. 0`.
`1. 2. 3+build. 5` == `1. 2. 3`.

12. 3 Politique de dépendance (exemple YAML)

yaml policy:
libraries:
default_range: "^MAJOR. MINOR. PATCH"
pin_security_critical: true services:
pin_exact: true allow_prerelease_in_nonprod: true api_contract:
require_same_minor: true forbid_major_mismatch: true

13) Anti-modèles

Utilisation de « latest »/balises flottantes dans la vente.
Augmentation de MAJOR sans véritable rupture (« versions marketing »).
Modifications cachées sous l'apparence « PATCH ».
Pré-versions dans les dépendances transitives des applications pro.
Modifier l'artefact sans nouvelle étiquette (versions mutables).
Versions incohérentes du code et du schéma OBD.

14) Chèque de mise en œuvre (0-45 jours)

0-10 jours

Acceptez BouVer comme norme obligatoire, approuvez les critères de rupture.
Activez les comités conventionnels et le modèle PR avec le champ 'BREAKING CHANGE'.

11-25 jours

Connectez semantic-release/changesets, auto-génération CHANGELOG.
Configurez la signature et la publication des artefacts avec la balise 'vX. Y.Z`.

26-45 jours

Entrez la politique de deprection et la télémétrie d'utilisation des API obsolètes.
Synchronisez les versions des contrats (OpenAPI/Proto) et des services.
Interdire « latest » et les balises mutables au niveau de la politique (ORA/règlement CI).

15) Métriques de maturité

% d'artefacts publiés uniquement sur la balise BouVer.
Temps de migration moyen entre les versions MINOR.
Nombre d'incidents dus à des modifications cachées.
Couverture des comités conventionnels dans les référentiels (> 95 %).
Proportion de dépendances sans fourchettes flottantes dans la vente (> 90 %).

16) Quand SamVer n'est pas nécessaire

Prototypes rapides internes sans consommateurs externes (le versioning daté convient).
Données/modèles avec dattes expérimentales (meilleure version Model/Schema avec compatibilité au niveau des convertisseurs).
Paquets de contenu sans API publique stable.

17) Conclusion

BouVer est un contrat de confiance entre le fabricant et le consommateur. Définissez clairement ce qui brise la compatibilité, automatisez la reconnaissance des types de libération et la publication des artefacts, gérez un CHANGELOG transparent et respectez la politique de privation. Les mises à jour deviendront alors routinières, prévisibles et sécurisées - et l'infrastructure et l'API se développeront sans choc pour les entreprises.

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Telegram
@Gamble_GC
Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.