-
Notifications
You must be signed in to change notification settings - Fork 5
Revoir les pipelines pour permettre des hotfixes #1860
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
82b0530
eaaca76
f80b3b1
ffe1a5f
783831b
5b846be
4d8c6cf
8b58f7f
416b0d1
454fc6f
baa7196
550a265
1624142
84a4739
11d01bc
b157e94
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| # Gestion des versions | ||
|
|
||
| Ce document décrit comment est géré le versionnement de `console`, c'est-à-dire les différents aspects qui nous permettent de : | ||
|
|
||
| - Préparer la création d'une nouvelle version de `console` au fur et à mesure des ajouts | ||
| - Créer effectivement la nouvelle version | ||
| - Mettre à jour le chart Helm concerné | ||
| - Publier les nouvelles versions de modules NPM concernés | ||
|
|
||
| ## Schéma récapitulatif | ||
|
|
||
| Les sections suivantes vont expliciter ce schéma: | ||
|
|
||
| ```mermaid | ||
| gitGraph | ||
| commit id: "…previous commits" | ||
| commit id: "Add basic features" | ||
|
|
||
| branch release-please-main | ||
| checkout release-please-main | ||
| commit id:"bump to v1.2.0" tag: "v1.2.0" | ||
|
|
||
| checkout main | ||
| merge release-please-main | ||
| checkout release-please-main | ||
| branch "hotfix/v1.2.0" | ||
| commit id: "Fix stuff" | ||
| branch release-please-hotfix_v1.2.3 | ||
| commit id:"bump to v1.2.1" tag: "v1.2.1" | ||
| checkout "hotfix/v1.2.0" | ||
| merge release-please-hotfix_v1.2.3 | ||
|
|
||
| checkout main | ||
| commit id: "Add features" | ||
| checkout release-please-main | ||
| commit id:"bump to v1.3.0" tag: "v1.3.0" | ||
| merge main | ||
| commit id:"bump to v1.3.0" tag: "v1.3.0" | ||
| checkout main | ||
| commit id: "More features" | ||
| checkout release-please-main | ||
| merge main | ||
| commit id:"bump to v1.3.0 (recreated)" tag: "v1.3.0 (recreated)" | ||
| checkout main | ||
| merge release-please-main | ||
|
|
||
| checkout main | ||
| merge "hotfix/v1.2.0" | ||
| checkout release-please-main | ||
| commit id:"bump to v1.4.0" tag: "v1.4.0" | ||
| merge main | ||
| commit id:"bump to v1.4.0" tag: "v1.4.0" | ||
| checkout main | ||
| merge release-please-main | ||
| ``` | ||
|
|
||
| ## Versionnement de Console | ||
|
|
||
| Le flux de travail qui créé les nouvelles versions s'intitule `create-or-update-release` et est déclenché à chaque nouveau commit sur `main` (soit lorsqu'on fusionne une requête de fusion, soit un commit poussé en outrepassant l'interdiction de pousser sur `main`). | ||
|
|
||
| Le flux de travail utilise [release-please-action](https://github.com/googleapis/release-please-action) pour automatiquement générer les tags Git ainsi que les nouvelles versions sur GitHub. À chaque fois que du code est poussé dans la branche `main`, une requête de fusion de version est créée en analysant les messages de commits pour déterminer le numéro de version à créer (patch/mineur/majeur). Si une requête de fusion de nouvelle version existe déjà, elle est mise à jour afin de refléter les nouveaux changements ajoutés à la future nouvelle version. | ||
|
|
||
| Les types de commits qui déclenchent une nouvelle version (ou mettent à jour la MR de la prochaine version) sont décrit dans la configuration de release-please, [`./release-please-config.json`](./release-please-config.json) | ||
|
|
||
| À chaque fois qu'une requête de fusion de version est fusionnée, les images de conteneur des applications (`client`, `server`, etc.) sont alors créées et hébergées dans la [registry Github associée au dépôt](https://github.com/orgs/cloud-pi-native/packages?repo_name=console). | ||
|
|
||
| ## Versionnement du chart Helm `dso-console` | ||
|
|
||
| Le déploiement de `console` se fait préférablement à l'aide de son chart Helm, nommé [`dso-console`](https://github.com/cloud-pi-native/helm-charts/tree/main/charts/dso-console). | ||
|
|
||
| La dernière étape du flux de travail de création de nouvelles versions (cf. section ci-dessus) est la création automatique d'une requête de fusion dans le dépôt `helm-charts` pour la mise à jour du chart Helm `dso-console`. Une fusion manuelle sur ce dépôt est alors nécessaire pour déclencher la publication de la nouvelle version du chart Helm (embarquant donc la nouvelle version de `console`). Exemple d'une telle requête de fusion de nouvelle version du chart Helm : https://github.com/cloud-pi-native/helm-charts/pull/204. | ||
|
|
||
| ## Versionnement des modules NPM | ||
|
|
||
| La publication des nouvelles versions de modules npm du dépôt est automatique et est inclus dans le flux de travail de création d'une nouvelle version. Il analyse les numéros de version présents dans les différents fichiers `package.json` pour déterminer si une nouvelle version du module doit être créée et publiée. | ||
|
|
||
| > Il est possible de créer une version de pré-release d'un module npm en modifiant la clé `publishConfig.tag` dans le `package.json` avec par exemple `beta` pour générer une version beta. | ||
|
|
||
| ## Hotfixes | ||
|
|
||
| Autant que faire se peut il vaut mieux privilégier le "Fix Forward" avec de nouvelles releases. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. J'ai pas compris ce que tu veux dire :)
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Faire des hotfix doit être la dernière solution envisagée. C'est trop prescriptif, selon toi ?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Principalement la tournure de phrase que j'ai pas compris. Apres, les hotfixes devraient etre une partie integrante d'un release. D'ou le branching systematique des releases LTS defini dans l'ADR. Dans le cas actuellement on aura juste une branche release n-1 pour maintenir la prod. Avec de l'outillage pour backport automatiquement de LTS vers main ou inversement.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Typiquement les etapes sont:
|
||
|
|
||
| Ceci étant dit, il arrivera, hélas, qu'un hotfix soit nécessaire sur une version livrée. | ||
|
|
||
| Voici donc le processus compatible avec l'utilisation de `release-please`: | ||
|
|
||
| - Se placer localement sur le tag de la version concernée: `$ git checkout v1.2.3` (`v1.2.3` est ici la version à hotfixer) | ||
| - En tirer une branche dédiée au hotfix: `$ git checkout -b hotfix/my-urgent-hotfix-for-v1.2.3` (Note: Il n'est pas nécessaire de spécifier la version dans le nom de la branche, mais ça peut aider à la lecture et ainsi confirmer la version concernée) | ||
| - Faire les modifications nécessaires, committer, etc. | ||
| - Pousser la nouvelle branche sur le dépôt Github | ||
| - Une fois la nouvelle branche poussée, `release-please` va être déclenché par le flux de travail Github `create-or-update-release` afin de créer une requête de fusion pour la nouvelle version hotfixée (avec comme cible la branche de hotfix). Il est d'ailleurs à noter que dans le cas d'un hotfix **on ne fait qu'une montée du "patch"** quelque soit les commits (donc même un `feat!` ne fera pas de montée majeure) | ||
shikanime marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| - Valider la MR de version hotfixée (créée donc par `release-please`) à l'aide du flux de travail Github `Continuous Integration` | ||
| - Une fois la MR de version hotfixée validée et fusionnée, la nouvelle version est créée et, comme pour les versions traditionnelles, une requête de fusion est crée dans le dépôt `helm-charts` pour avoir là aussi une version hotfixée (mais, pour le chart Helm, c'est considéré comme une version classique) | ||
| - Il faudra ensuite faire des picorages (`git cherry-pick`) ou une MR de la branche de hotfix vers `main` afin d'intégrer le ou les commits de hotfix dans la prochaine version officielle | ||
Uh oh!
There was an error while loading. Please reload this page.