Skip to content

feat(nginx-strangler): route /api/v1/admin/roles to server-nestjs - #2782

Merged
shikanime merged 1 commit into
mainfrom
feat/admin-roles-routing
Oct 8, 2026
Merged

shikanime merged 1 commit into
mainfrom
feat/admin-roles-routing

Conversation

@shikanime

@shikanime shikanime commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

Issues liées

Refs #2781

Empilée via GitHub stacks : pile #2751 (#2749 → #2738 → #2739 → cette PR), base = pr/user-strangler. L'ordre de fusion est porté par la pile (retarget automatique au fil des fusions) ; prérequis de contenu : #2749 (cf. #2723).


Quel est le comportement actuel ?

/api/v1/admin/roles est encore servie par apps/server (aucune location dédiée dans le nginx-strangler). Le handler legacy countRolesMembers produit des NaN dès qu'un utilisateur porte un rôle admin adossé à OIDC : la validation de réponse échoue et GET /api/v1/admin/roles/member-counts renvoie une 500 (détail et reproduction dans #2781).

Quel est le nouveau comportement ?

Ajout de la location /api/v1/admin/roles dans apps/nginx-strangler/conf.d/routing.conf vers server-nestjs, dont getAdminRoleMemberCounts exclut déjà les ids OIDC (aucune valeur NaN). Les tests verrouillant le décompte sont portés par #2783 (PR indépendante, applicable sur main).

Cette PR introduit-elle un breaking change ?

Non.

Autres informations

  • Vérifications locales : nginx -t OK sur la configuration modifiée ; suite unitaire server-nestjs verte (80 fichiers, 665 tests, sur base main) ; lint OK ; 0 erreur TypeScript sur les fichiers modifiés.
  • Empilement : pile #2751, couche au-dessus de refactor(user): strangler offload routes to server-nestjs #2739. Le socle de la pile (21/08) précède le module admin-role : le test de décompte vit donc dans test(admin-role): lock member counts against OIDC role ids #2783 (indépendant), et cette couche se limite au routage (+9 lignes).
  • Rollback : commenter le bloc location puis nginx -s reload (procédure documentée en tête de routing.conf).

@shikanime

Copy link
Copy Markdown
Member Author

Vérification de bascule (bout en bout, locale)

Test réalisé avec le binaire nginx réel, la configuration routing.conf d'avant (main) et d'après (cette PR), face à deux upstreams simulés :

7/7 vérifications OK. CI : 32/32 checks verts.

@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from a3d642f to cf607cc Compare September 28, 2026 14:06
@shikanime
shikanime changed the base branch from main to pr/user-strangler September 28, 2026 14:06
@shikanime
shikanime added this pull request to stack #2751 September 28, 2026 14:06
@shikanime shikanime closed this Sep 28, 2026
@shikanime shikanime reopened this Sep 28, 2026
@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from cf607cc to 6a72d66 Compare September 28, 2026 14:16
StephaneTrebel
StephaneTrebel previously approved these changes Sep 29, 2026
@shikanime shikanime moved this to Backlog in Cloud Pi Native Sep 29, 2026
@github-project-automation github-project-automation Bot moved this from Backlog to Ready in Cloud Pi Native Sep 29, 2026
@shikanime shikanime moved this from Ready to In review in Cloud Pi Native Sep 29, 2026
@shikanime shikanime added the enhancement New feature or request label Sep 29, 2026
@shikanime shikanime self-assigned this Sep 29, 2026
@shikanime shikanime added this to the 9.27.0 milestone Sep 29, 2026
@shikanime
shikanime removed this pull request from stack #2751 September 29, 2026 13:28
@shikanime
shikanime requested review from a team and removed request for StephaneTrebel September 29, 2026 13:28
@shikanime
shikanime added this pull request to stack #2794 September 29, 2026 13:51
StephaneTrebel
StephaneTrebel previously approved these changes Sep 30, 2026
@shikanime
shikanime dismissed StephaneTrebel’s stale review October 1, 2026 15:44

The merge-base changed after approval.

@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from 7c4eeb2 to 19b5b08 Compare October 1, 2026 15:44
@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from 6a3a204 to 8c2dd1a Compare October 5, 2026 10:33
@StephaneTrebel
StephaneTrebel added this pull request to the merge queue Oct 6, 2026

@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.

La règle de routage est correcte, mais le prérequis #2749 reste ouvert, bloqué et en modifications demandées. Sa fusion est une condition explicite du ledger #2781 : sans pont d’événements adminRole, les mutations désormais routées vers NestJS ne déclenchent pas les synchronisations de plugins.

Comment thread apps/nginx-strangler/conf.d/routing.conf
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 6, 2026
@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from 8c2dd1a to a560402 Compare October 6, 2026 08:26
@shikanime

Copy link
Copy Markdown
Member Author

Rebase et déblocage du prérequis effectués sur a5604026 :

  • feat(server-nestjs): consume adminRole events in keycloak and gitlab modules #2749 (pont d'événements adminRole) est rebasé sur le main courant, artefact de configuration retiré, CI verte sur f199e7fc — détail et preuves des contrôles dans le commentaire dédié de la PR.
  • La branche est rebasée sur le main courant ; le conflit de fusion signalé est résolu (MERGEABLE, plus uniquement bloquée par la revue).
  • La rebasage préserve la route /api/v1/stages ajoutée par main entre-temps (diff vérifié : 9 insertions, 0 suppression, 1 fichier).
  • CI sur a5604026 : success (tous les checks).

Les mutations POST/PATCH/DELETE sous /api/v1/admin/roles atteignent désormais leurs consommateurs @OnEvent Keycloak/GitLab via le pont #2749 — la condition du fil de revue est satisfaite au niveau du code ; il reste la revue humaine de #2749 avant fusion.

@StephaneTrebel StephaneTrebel modified the milestones: 9.27.0, 9.28.0 Oct 6, 2026
@shikanime
shikanime force-pushed the feat/admin-roles-routing branch from a560402 to 8c5749d Compare October 7, 2026 09:44
@shikanime

Copy link
Copy Markdown
Member Author

Conflit résolu — branche reconstruite sur main actuel.

Résolution : les deux blocs location (celui de la PR admin/roles, celui de main = /api/v1/auth) insérés au même endroit ; les deux sont conservés, admin/roles avant auth. Preuve : delta vs main = exactement les 9 lignes de la PR, delta vs l'ancienne tête = exactement le bloc auth de main. stages et tous les blocs existants intacts (assertions exécutées). Nouvelle tête 8c5749d5 (force-push, l'ancienne tête a5604026 ne contenait que ce fichier et est intégralement remplacée). Fusion possible à nouveau (mergeable: MERGEABLE).

Aucune dépendance git envers #2749 : fichiers disjoints. (Voir #2781 pour le bug NaN qui motive cette bascule.)

@shikanime shikanime modified the milestones: 9.28.0, 9.27.0 Oct 8, 2026
@shikanime shikanime added the preview Deploy preview app with Argo-cd label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🤖 Hey !

A preview of the application is available at : https://console-pr-2782.dso.cpin-hp.numerique-interieur.fr

Please be patient, deployment may take a few minutes.

@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.

🔴 La règle de routage corrige bien le chemin de lecture member-counts, et les tests de décompte sont couverts par #2783. Mais cette location route également toutes les mutations admin-role vers NestJS alors que le pont d’événements #2749 est encore en brouillon, en modifications demandées et en retard sur main ; sans ce pont, les synchronisations Keycloak/GitLab ne sont pas garanties. Je demande la livraison et la validation de #2749 avant cette bascule ; le fil inline correspondant est actualisé.

@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.

Verdict : changements demandés. La location traite bien la route des décomptes, mais son préfixe bascule aussi toutes les mutations admin-role vers NestJS. Le pont #2749 qui garantit les synchronisations Keycloak/GitLab est encore non validé, en retard sur main et comporte des points bloquants ouverts ; cette bascule ne peut donc pas être livrée seule pour la 9.27.0.

@shikanime
shikanime dismissed StephaneTrebel’s stale review October 8, 2026 09:27

Le point sera traite en parallel, dans l'actuel on utilise les "Reprovionner project" depuis le debut

@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.

Verdict : changements demandés. La règle de routage est correcte et sa CI est verte, et le head actualisé de #2749 corrige les deux défauts fonctionnels précédemment signalés. Mais #2749 n’est pas encore rebasée/validée ni fusionnée ; le ledger #2781 exige explicitement cette fusion avant la bascule, qui route aussi les mutations admin-role.

@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.

Verdict : changements demandés. Le prérequis #2749 est maintenant rebasé, validé par les checks et approuvé ; il n’est toutefois pas encore fusionné, alors que le ledger #2781 exige qu’il le soit avant la bascule. Cette branche de routage est par ailleurs à 2 commits derrière main (dont la mise à jour contractuelle #2834) : rebase, CI à jour, puis fusion après #2749.

Design: adds the /api/v1/admin/roles location to the migrated-routes block, ahead of the general /api/v1/admin fallback, so role reads and mutations reach the NestJS admin-role module whose member-counts implementation is contract-valid (unlike the frozen legacy handler, see #2781). Resolution carries main's concurrent /api/v1/auth migration verbatim; both blocks kept.

Refs #2781

Co-authored-by: Automata <automata@shikanime.studio>
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: I9cd3971dbaa619a997c1fe08d2a3438e6a6a6964
@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.

Verdict : approuvée. La location route correctement l’ensemble du préfixe admin-role vers NestJS ; le pont prérequis #2749 est maintenant fusionné, et #2783 fournit les tests de décompte. La branche est à jour sur main et les checks, dont Sonar, sont verts. Ledger #2781 : les tests sont livrés ; routage et correctif sont couverts par ce diff, la communication d’équipe reste non vérifiable.

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 preview Deploy preview app with Argo-cd

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants