## Description Deux trous d'idempotence rĂ©sident dans `gitlab-client.service.ts`, partagĂ©s par les modules Observability et ArgoCD. **1. `createGroupRepo` sans tolĂ©rance au conflit** (`gitlab-client.service.ts:297-307`) â appelĂ© par `getOrCreateValuesRepo` (`observability-client.service.ts:38`) sur chaque upsert projet (`observability.service.ts:129`) et chaque suppression (`:147`). C'est un `Projects.create` brut sans traitement du `has already been taken`. Deux synchronisations concurrentes qui voient toutes deux le dĂ©pĂŽt absent appellent toutes deux `createGroupRepo` ; la seconde lĂšve le 409 GitLab. Pattern identique Ă celui dĂ©jĂ corrigĂ© pour les sous-groupes keycloak (`keycloak-client.service.ts:212-220`) et les dĂ©pĂŽts systĂšme (`gitlab-client.service.ts:274-279`, qui relit sur `has already been taken`). **2. Course lecture-Ă©criture sur le commit** (`maybeCreateCommit`, `gitlab-client.service.ts:321` + `generateCreateOrUpdateAction` :336-348) â l'action lit le fichier puis un `Commits.create` sĂ©parĂ© Ă©crit (:332). Deux syncs qui se chevauchent peuvent voir le fichier absent, Ă©mettre toutes deux `action: 'create'`, et la seconde frappe le « already exists » GitLab avec 400 sans tolĂ©rance â la sync Ă©choue. MĂȘme schĂ©ma pour les `delete` concurrents. ## Etapes de reproduction 1. DĂ©clencher une synchronisation concurrente du mĂȘme projet. 2. Pour le cas 1 : deux runs voient le dĂ©pĂŽt de valeurs absent et l'un des `createGroupRepo` lĂšve `has already been taken`. 3. Pour le cas 2 : deux runs voient le fichier absent, les deux Ă©mettent `action: 'create'`, le second `Commits.create` lĂšve un 400. ## Version de la console impactĂ©e server-nestjs (gitlab-client â modules Observability et ArgoCD) ## DĂ©finition du fini - [x] `createGroupRepo` tolĂšre `has already been taken` et relit le dĂ©pĂŽt existant (idiome `gitlab-client.service.ts:274-279`) - [x] Le commit concurrent tolĂšre le conflit de crĂ©ation et rĂ©concilie (relit le fichier / no-op si dĂ©jĂ prĂ©sent) - [x] Les tests liĂ©s Ă ce correctif ont Ă©tĂ© ajoutĂ©s ## Issues liees Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.
Activity
fix(server-nestjs): make GitLab repo create and commit idempotent
fix(server-nestjs): make GitLab repo create and commit idempotent
fix(server-nestjs): make GitLab repo create and commit idempotent