Repository navigation
fix(registry): read the REGISTRY project-robot leaf and restore the historic secrets contract - #2817
Conversation
|
Revue complète : le correctif est pertinent. La lecture sur la feuille Un seul commentaire non bloquant sur l'exactitude d'un commentaire de code. Les tests couvrent désormais le 404 Vault et chaque branche de résolution, c'est exactement ce que ce module demandait. |
StephaneTrebel
left a comment
There was a problem hiding this comment.
Le correctif lit bien la feuille REGISTRY/project-robot, mais la résolution de DEFAULT ne préserve pas le contrat historique : les secrets disparaissent alors que le défaut global les active. La branche est aussi en retard d’un commit sur main et doit être rebasée avant une nouvelle revue.
5e36413 to
ba6160c
Compare
shikanime
left a comment
There was a problem hiding this comment.
Verdict : Changements demandés — deux points bloquants sur la résolution publishProjectRobot (revue postée en commentaire, l'auteur ne pouvant pas officiellement request-changer sa propre PR).
La lecture de la feuille REGISTRY/project-robot est correcte et alignée sur le chemin écrit par ensureRobotSecret (appelant unique de readRegistrySecrets, vérifié), et les tests couvrent proprement le 404 Vault, le message de repli historique verbatim et chaque branche de résolution côté projet. En revanche, le point de StephaneTrebel tient toujours sur ba6160c — DEFAULT ne délègue pas au réglage global — et la description annonce une « résolution identique à l'écriture » alors que syncProject ne lit pas la config admin : restaurer la moitié lecture sans la moitié écriture recrée la contradiction que #2532 documente déjà côté Nexus. Détail de maison au passage : la branche a 46 commits de retard sur main, à rebaser avant nouvelle revue.
Security scan : clean sur les lignes ajoutées.
ba6160c to
11c626f
Compare
8300ef5 to
22aff14
Compare
shikanime
left a comment
There was a problem hiding this comment.
Revue adversariale contre le plugin harbor historique (plugins/harbor/src/functions.ts:getProjectSecrets), sandbox au head 22aff14b.
Verdict : changements demandés — un point bloquant, le correctif central est bon.
Le contrat historique est restauré à l'identique : chemin de base inconditionnel, identifiants conditionnés, message de repli verbatim, chemin Vault REGISTRY/project-robot identique octet pour octet à celui écrit par ensureRobotSecret. La table de vérité de la résolution projet/admin est équivalente à l'expression harbor sur ENABLED / DISABLED / DEFAULT / absent, côté lecture comme côté écriture. 58 tests unitaires verts, eslint vert, aucun Unicode bidirectionnel dans le diff.
Bloquant — test/project-secrets.e2e-spec.ts contredit la nouvelle contrat. La spec écrit la feuille REGISTRY nue (ligne 144) et attend REGISTRY_ROBOT_SECRET dans secrets.REGISTRY (ligne 170) ; la spec « no Vault secrets » attend l'absence totale de REGISTRY (ligne 122). Sous le nouveau lecteur les deux échouent : la feuille de groupe n'est plus lue, et le chemin de base n'est plus jamais vide. La gate unit CI ne la lance pas — describe.runIf(E2E) — donc le vert actuel est un angle mort ; run-tests.sh -e la cassera. Écrire REGISTRY/project-robot et activer publishProjectRobot sur le projet fixture.
Non bloquant — « les deux moitiés ne peuvent plus diverger » est sur-affirmé. L'expression de résolution est dupliquée verbatim dans registry-plugin.service.ts et registry.service.ts ; deux copies peuvent dériver. Un helper partagé (projectValue, adminValue) rendrait l'affirmation vraie.
Nit — readRegistrySecrets(slug, robotName) n'a qu'un appelant, toujours ROBOT_NAME_PROJECT. Le paramètre est de la généralité spéculative.
|
F1 corrigé dans 5b2e649 : la spec e2e écrit désormais la feuille |
StephaneTrebel
left a comment
There was a problem hiding this comment.
La correction restaure le contrat Vault/Harbor et les tests couvrent les chemins de lecture, le repli et la résolution projet/admin ; la DoD de l’issue liée est satisfaite (2/2). CI et Quality Gate sont verts sur le head courant. Deux nits non bloquants sont laissés en commentaires inline.
|
Les deux sujets traités sur le head Résolution dupliquée — Paramètre spéculatif — Tests : 70/70 locaux sur registry + vault. |
2571349 to
17993b9
Compare
StephaneTrebel
left a comment
There was a problem hiding this comment.
Aucun finding après revue du diff et du contexte déclaré.
…istoric secrets contract KV v2 cannot read a folder prefix, so VaultClientService.readRegistrySecrets queried the REGISTRY folder and always returned an empty record; the whole group then vanished from the project secrets UI. Read the REGISTRY/project-robot leaf instead, matching the leaf written by the registry module. RegistryPluginService.secrets regains the historic contract: Registry base path is returned unconditionally, robot credentials only when publishProjectRobot is enabled, and the historic fallback message when the robot is enabled but missing from Vault. The project/admin resolution follows the nexus is<X>Enabled pattern: the reader goes through a private isProjectRobotEnabled method and the writer (syncProject) applies the same legacy harbor expression inline — an explicit project value wins either way, otherwise the admin setting applies, including a project set to "default" — so the two halves cannot drift apart anymore. readRegistrySecrets takes the robot name as a parameter instead of importing registry constants into the vault module, keeping the vault client free of module-level dependencies like its sibling readXxxSecrets wrappers. Fixes #2527 Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr> Change-Id: I8547cac6a8a7f67c167ef5b68a20b2176a6a6964
…istoric secrets contract KV v2 cannot read a folder prefix, so VaultClientService.readRegistrySecrets queried the REGISTRY folder and always returned an empty record; the whole group then vanished from the project secrets UI. Read the REGISTRY/project-robot leaf instead, matching the leaf written by the registry module. RegistryPluginService.secrets regains the historic contract: Registry base path is returned unconditionally, robot credentials only when publishProjectRobot is enabled, and the historic fallback message when the robot is enabled but missing from Vault. The project/admin resolution follows the nexus is<X>Enabled pattern: the reader goes through a private isProjectRobotEnabled method and the writer (syncProject) applies the same legacy harbor expression inline — an explicit project value wins either way, otherwise the admin setting applies, including a project set to "default" — so the two halves cannot drift apart anymore. readRegistrySecrets takes the robot name as a parameter instead of importing registry constants into the vault module, keeping the vault client free of module-level dependencies like its sibling readXxxSecrets wrappers. The project-secrets e2e spec now mirrors the new contract: the fixture project enables publishProjectRobot, the robot secret is written to the REGISTRY/project-robot leaf, and the no-secrets case expects the unconditional base path with the historic fallback message. Fixes #2527 Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr> Change-Id: I8547cac6a8a7f67c167ef5b68a20b2176a6a6964
…botName param Co-authored-by: Automata <automata@shikanime.studio> Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr> Change-Id: Ia368570fb46f70f97a1c7326f4d5b75f6a6a6964
17993b9 to
c3d9a4e
Compare
|

0 New Issues
0 Fixed Issues
0 Accepted Issues
Pourquoi
Le groupe de secrets
REGISTRYdisparaît entièrement des secrets de projet :VaultClientService.readRegistrySecretslit le dossierREGISTRYau lieu de la feuilleREGISTRY/project-robot, et KV v2 répond 404 sur une lecture de préfixe. Le contrat historique du plugin harbor (Registry base pathinconditionnel, identifiants du robot conditionnés àpublishProjectRobot, message de repli) était perdu au passage.Quoi
readRegistrySecretslit désormais la feuilleREGISTRY/project-robot, la même feuille qu'écrit le module registry.publishProjectRobotsuit le patron nexusis<X>Enabled: méthode privéeisProjectRobotEnabledcôté lecteur, même expression harbor historique inlinée côté écriture (syncProject) — la valeur projet explicite gagne dans les deux sens, sinon le réglage admin s'applique, y compris quand le projet est surdefault. Les deux moitiés ne peuvent plus diverger.RegistryPluginService.secretsrestitue le contrat historique :Registry base pathinconditionnel, identifiants du robot seulement sipublishProjectRobotest activé, message de repli historique quand le robot manque dans Vault.default) côté plugin ; provisionnement du robot depuis le réglage admin côté écriture.Références
Fixes #2527
Related: #2527