feat(client): switch repositories to API v2 - #2441
Merged
Merged
Conversation
4 tasks
Base automatically changed from
feat/repository-v2-await-reconciliation
to
main
August 7, 2026 14:41
KepoParis
force-pushed
the
feat/client-repositories-v2
branch
from
August 7, 2026 14:43
01dc717 to
e9cc05b
Compare
StephaneTrebel
previously approved these changes
Aug 7, 2026
KepoParis
force-pushed
the
feat/client-repositories-v2
branch
from
August 7, 2026 15:10
e9cc05b to
f98373f
Compare
KepoParis
changed the base branch from
main
to
fix/repository-v2-private-credentials
August 7, 2026 15:10
Contributor
Author
KepoParis
force-pushed
the
feat/client-repositories-v2
branch
from
August 7, 2026 15:50
f98373f to
abc8587
Compare
|
iliesmrf
approved these changes
Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

0 New Issues
0 Fixed Issues
0 Accepted Issues
Issues liées
Issues numéro: #2423, #2422
Quel est le comportement actuel ?
Le client consomme les routes v1 des dépôts via
apiClient.Repositories:listRepositories({ query: { projectId } })createRepository({ body: { ...repoData, projectId } })updateRepository({ params: { repositoryId }, body: { ...repoData, projectId } })deleteRepository({ params: { repositoryId } })syncRepository({ params: { repositoryId }, body: { branchName, syncAllBranches } })Le
projectIdtransite donc dans la query string ou dans le body. Le formulaire envoie par ailleurs son résultat brut au gestionnaire : sur une mise à jour, les champs non modifiables (id,projectId,internalRepoName, horodatages) et la clé de formulaireisStandalonepartent dans le body, et le placeholderfakeToken— affiché à la place du token existant, jamais renvoyé par l'API — est réémis tel quel.Quel est le nouveau comportement ?
Le client passe sur
apiClient.RepositoriesV2, aligné sur les routes/api/v2/projects/:projectId/repositories:listRepositoriesV2({ params: { projectId } })createRepositoryV2({ params: { projectId }, body })updateRepositoryV2({ params: { projectId, repositoryId }, body })deleteRepositoryV2({ params: { projectId, repositoryId } })syncRepositoryV2({ params: { projectId, repositoryId }, body })projectIdest un paramètre de chemin, plus un champ de query/body.Deux adaptateurs isolent la conversion « résultat de formulaire → corps v2 » dans
apps/client/src/utils/repository-utils.ts:toCreateRepositoryBodyconstruit la branche attendue par l'union discriminée du contrat v2 :isPrivate: trueporteexternalUserName/externalToken,isPrivate: falsene les envoie pas.toUpdateRepositoryBodyretire les champs que la route v2 refuse (id,projectId,createdAt,updatedAt,internalRepoName,isStandalone) et n'envoieexternalTokenque s'il a réellement été saisi : un token vide ou resté àfakeTokenest omis, ce qui signale « inchangé » au back-end (💡 [REQUEST] - Expliciter l'intention de mise à jour des credentials de dépôt (API v2) #2422) au lieu d'écraser le secret en Vault par un placeholder.La synchronisation construit désormais un body conforme à l'union du contrat :
{ syncAllBranches: true }ou{ syncAllBranches: false, branchName }, au lieu d'unbranchNamepotentiellementundefined.Fichiers touchés :
apps/client/src/utils/project-utils.ts— appels et types du gestionnaireRepositoriesapps/client/src/utils/repository-utils.ts— nouveau, les deux adaptateursapps/client/src/components/ProjectResources.vue—saveRepo/syncRepositorypassent par les adaptateursapps/client/src/stores/project.spec.ts— le spy cibleRepositoriesV2.listRepositoriesV2packages/shared/src/contracts/v2/repository.ts— export des types de body (ClientInferRequest, donc les entrées des schémas avant transformation)Vérifications :
vue-tsc --noEmitpasse ;repository-utils.spec.ts(8 tests, nouveaux) etproject.spec.ts(4 tests) passent.Cette PR introduit-elle un breaking change ?
Non côté utilisateur : mêmes écrans, mêmes formulaires, mêmes actions. Le changement est interne au transport HTTP.
Correction de comportement au passage : modifier un dépôt privé sans toucher au champ token ne réécrit plus le secret avec
fakeToken.Prérequis de déploiement : les routes
/api/v2/projects/:projectId/repositoriesdoivent être servies (bloc nginx générique/api/v2+ back-end v2). Sans cela, les écrans dépôts retournent 404.Autres informations
feat/repository-v2-await-reconciliation) : à merger après.