Repository navigation
🐛 [BUG] - Les backfills de rôles (v9.26+) ne sont que dans l'arbre server-nestjs et ne sont jamais déployés #2812
Description
Description
Les migrations de backfill des rôles projet fusionnées depuis la v9.26.0 n'ont été écrites que dans l'arborescence Prisma de apps/server-nestjs. Le chemin de déploiement en production est l'arborescence de apps/server : le serveur Fastify exécute prisma migrate deploy au démarrage (prestart -> db:deploy), depuis apps/server/src/prisma/migrations. Les trois migrations de backfill ne sont donc jamais appliquées sur les instances existantes : les projets créés avant l'introduction du rôle Sécurité ne reçoivent pas les nouveaux rôles système, et leurs membres ne peuvent pas se voir attribuer les permissions correspondantes.
Migrations absentes (présentes uniquement dans apps/server-nestjs/src/prisma/migrations) :
20260907170000_backfill_project_roles(backfill des 4 rôles par défaut sur les projets sans aucun rôle, 🐛 [BUG] - Des projets existants n'ont aucun rôle projet (backfill des rôles système) #2684)20260908155700_add_security_role(backfill du rôle Sécurité sur tous les projets, 💡 [REQUEST] - Ajout du rôle Sécurité au système de rôles projet #2676)20260929130657_add_security_admin_role(rôle admin Sécurité Plateforme, 💡 [REQUEST] - Ajout du rôle Sécurité au système de rôles admin #2792)
L'image server-nestjs ne possède elle-même aucune étape de déploiement de migrations au démarrage (apps/server-nestjs n'a pas de script db:deploy) : la bascule vers server-nestjs reproduirait la même lacune.
Etapes de reproduction
- Partir d'une instance v9.26.0 ou supérieure avec des projets préexistants
- Comparer les deux arborescences de migrations :
comm -13 <(ls apps/server/src/prisma/migrations) <(ls apps/server-nestjs/src/prisma/migrations) - Constater que les trois migrations de backfill n'existent que dans l'arborescence server-nestjs
- Lancer
pnpm --filter server exec prisma migrate deploy(le cheminprestartstandard) : aucune migration de backfill n'est appliquée - En base, vérifier les projets sans rôle Sécurité :
SELECT p.slug FROM "Project" p LEFT JOIN "ProjectRole" r ON r."projectId" = p.id AND r."oidcGroup" = '/' || p."slug" || '/console/security' WHERE r.id IS NULL— la requête renvoie les projets existants
Captures d'écran
Logs
Navigateurs
OS
Version de la console impactée
v9.26.0 et suivantes (première release contenant les fusions de backfill), sur toute instance montée de version depuis une version antérieure.
Définition du fini
- Les trois migrations
20260907170000_backfill_project_roles,20260908155700_add_security_roleet20260929130657_add_security_admin_roleexistent dansapps/server/src/prisma/migrationssous les mêmes noms que dans l'arborescence server-nestjs -
pnpm --filter server exec prisma migrate deployapplique la chaîne complète sans erreur sur une instance PostgreSQL vierge - Sonde SQL sur une base de copie de montée v9.26.0 : chaque projet porte les 5 rôles
system:managed(Administrateur, DevOps, Développeur, Lecture seule, Sécurité) et le rôle admin Sécurité Plateforme est présent - Une seconde exécution de
prisma migrate deployest un no-op (aucune ligne ajoutée dans_prisma_migrations, aucun doublon dansProjectRole) - Un test de la chaîne complète de migrations est ajouté en CI (deploy sur base vierge)
Références
- 🐛 [BUG] - Des projets existants n'ont aucun rôle projet (backfill des rôles système) #2684 / PR fix(server-nestjs): backfill default system roles on roleless projects #2685, 💡 [REQUEST] - Ajout du rôle Sécurité au système de rôles projet #2676 / PR feat(server-nestjs): backfill Sécurité project role on existing projects #2700, 💡 [REQUEST] - Ajout du rôle Sécurité au système de rôles admin #2792 / PR feat(server-nestjs): add Sécurité Plateforme admin role #2793
apps/server/package.json(prestart->prisma migrate deploy),apps/server-nestjs/prisma.config.ts
Activity
shikanime commentedon Oct 5, 2026
Les trois backfills vivent dans une arborescence de migrations qu'aucun chemin de déploiement n'exécute.
Comparaison des deux arborescences sur
origin/main:La comparaison inverse est vide : les deux arbres sont identiques avant la divergence, les trois backfills sont les seules migrations nestjs-only.
Chemin de déploiement réel :
Le conteneur applicatif (
apps/server,prestart) ne déploie que l'arborescenceapps/server.apps/server-nestjsn'a aucun scriptdb:deployet sonENTRYPOINT(node dist/src/main) ne migre pas.shikanime commentedon Oct 5, 2026
Deux actions candidates, non exclusives :
apps/server/src/prisma/migrationssous les mêmes noms. La comparaisoncommdu commentaire précédent prouve qu'il n'y a pas de collision d'horodatage possible, et les anti-joins dans le SQL rendent toute double application no-op — y compris pour une base dont_prisma_migrationsaurait déjà été alimentée par l'arbre nestjs.db:deployau démarrage ou init container) pour que l'arbre nestjs soit réellement appliqué à la bascule.Le gel de
apps/server(référence read-only) doit trancher pour l'action 1 : les migrations de release v9.x continuent d'être déployées depuis cet arbre, le report est donc un correctif de release, pas une reprise de développement.fix(server): backport role backfill migrations to the apps/server tree
StephaneTrebel commentedon Oct 5, 2026
Bugfix intégré dans le hotfix v9.26.1
fix(server): backport role backfill migrations to the apps/server tree