Skip to content

feat(server-nestjs): migrate repository sync route to API v2 - #2434

Merged
KepoParis merged 1 commit into
mainfrom
feat/repository-v2-sync
Aug 7, 2026
Merged

feat(server-nestjs): migrate repository sync route to API v2#2434
KepoParis merged 1 commit into
mainfrom
feat/repository-v2-sync

Conversation

@KepoParis

Copy link
Copy Markdown
Contributor

Issues liées

Issues numéro: #2423


Suite de la pile « repository API v2 » (#2408) : dernière route restée sur le serveur legacy.

Quel est le comportement actuel ?

La synchronisation d'un dépôt (déclenchement du miroir GitLab) est uniquement servie par
l'API v1 (legacy). L'API v2 des repositories expose le CRUD mais pas le sync, et
server-nestjs ne sait pas déclencher de pipeline de mirroring.

Quel est le nouveau comportement ?

Ajout de POST /api/v2/projects/:projectId/repositories/:repositoryId/sync (204),
permission ManageRepositories, mêmes contraintes que les autres mutations
(@RequireProjectStatus, @RequireProjectLocked(false), @RequireUserType('human')).

Contrat / schémas (shared)

  • SyncRepositorySchema : union discriminée sur syncAllBranches. Une synchro complète
    ne peut pas porter de branchName (la clé est retirée au parsing), une synchro
    partielle ne peut pas l'omettre (400).
  • Route syncRepositoryV2 dans le contrat ts-rest v2.

Événement (events)

  • Événement repository.sync avec RepositorySyncEventPayload et l'action de log admin
    Sync Repository.
  • emitRepositoryEvent renvoie les PluginResults fusionnés : contrairement à
    project.upsert (non bloquant), l'appelant attend le résultat, car la synchro est
    l'intention même de la requête et son échec doit être visible dans la réponse.

GitLab

  • GitlabClientService.triggerMirror : le pipeline de mirroring est porté par le dépôt
    mirror du projet et cible le dépôt via la variable PROJECT_NAME (+ SYNC_ALL et
    GIT_BRANCH_DEPLOY). Les dépôts de plomberie de la console (SPECIAL_REPO_NAMES :
    infra-apps, mirror) sont refusés comme cible.
  • GitlabService.handleRepositorySync écoute repository.sync et remonte un
    RequiredPluginResult<'gitlab'>.

Service repository

  • syncRepository vérifie que le dépôt appartient bien au projet du chemin (404
    sinon), attend les résultats des plugins et transforme un plugin en échec en 422.
  • Parité legacy : la création d'un dépôt avec externalRepoUrl déclenche un premier
    miroir en fire-and-forget (l'échec est tracé dans le log admin, la création reste
    201).

Tests : couverture du schéma, du client GitLab, du service GitLab, du service et du
controller repository.

Cette PR introduit-elle un breaking change ?

Non. La route v1 reste inchangée et continue d'être servie par le serveur legacy ; la v2
est ajoutée en parallèle. Aucun changement côté client.

Autres informations

Avec cette PR, l'API v2 des repositories couvre l'intégralité des routes v1. Reste à
faire hors de cette PR : la bascule du client sur les routes v2.

@KepoParis KepoParis added this to the 9.24.0 milestone Aug 7, 2026
@KepoParis KepoParis linked an issue Aug 7, 2026 that may be closed by this pull request
4 tasks
@KepoParis
KepoParis requested a review from a team August 7, 2026 10:39
@KepoParis KepoParis self-assigned this Aug 7, 2026
@KepoParis KepoParis added the enhancement New feature or request label Aug 7, 2026
@github-actions github-actions Bot added the built label Aug 7, 2026
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@StephaneTrebel StephaneTrebel left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm ok oui le plan c'est de migrer la logique un peu telle quelle et on reverra après un fois débarassés de server.

@KepoParis
KepoParis added this pull request to the merge queue Aug 7, 2026
Merged via the queue into main with commit 41744dd Aug 7, 2026
35 checks passed
@KepoParis
KepoParis deleted the feat/repository-v2-sync branch August 7, 2026 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

built enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💡 [REQUEST] - Exposer la gestion des repositories via l’API v2

2 participants