Skip to content

🐛 [BUG] - Les backfills de rôles (v9.26+) ne sont que dans l'arbre server-nestjs et ne sont jamais déployés #2812

Closed

Description

@shikanime

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) :

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

  1. Partir d'une instance v9.26.0 ou supérieure avec des projets préexistants
  2. Comparer les deux arborescences de migrations : comm -13 <(ls apps/server/src/prisma/migrations) <(ls apps/server-nestjs/src/prisma/migrations)
  3. Constater que les trois migrations de backfill n'existent que dans l'arborescence server-nestjs
  4. Lancer pnpm --filter server exec prisma migrate deploy (le chemin prestart standard) : aucune migration de backfill n'est appliquée
  5. 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_role et 20260929130657_add_security_admin_role existent dans apps/server/src/prisma/migrations sous les mêmes noms que dans l'arborescence server-nestjs
  • pnpm --filter server exec prisma migrate deploy applique 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 deploy est un no-op (aucune ligne ajoutée dans _prisma_migrations, aucun doublon dans ProjectRole)
  • Un test de la chaîne complète de migrations est ajouté en CI (deploy sur base vierge)

Références

Activity

  1. shikanime commented on Oct 5, 2026

    @shikanime
    MemberAuthor

    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 :

    $ comm -13 \
      <(git ls-tree --name-only -r origin/main -- apps/server/src/prisma/migrations | sed 's|apps/server/src/prisma/migrations/||' | sort) \
      <(git ls-tree --name-only -r origin/main -- apps/server-nestjs/src/prisma/migrations | sed 's|apps/server-nestjs/src/prisma/migrations/||' | sort)
    20260907170000_backfill_project_roles/migration.sql
    20260908155700_add_security_role/migration.sql
    20260929130657_add_security_admin_role/migration.sql

    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 :

    $ grep -n '"db:deploy"\|"prestart"' apps/server/package.json
    22:    "db:deploy": "prisma migrate deploy",
    36:    "prestart": "npm run db:deploy",
    
    $ grep -n '"db:' apps/server-nestjs/package.json
    16:    "db:migrate": "prisma migrate dev --name dso",
    17:    "db:reset": "prisma migrate reset",

    Le conteneur applicatif (apps/server, prestart) ne déploie que l'arborescence apps/server. apps/server-nestjs n'a aucun script db:deploy et son ENTRYPOINT (node dist/src/main) ne migre pas.

  2. shikanime commented on Oct 5, 2026

    @shikanime
    MemberAuthor

    Deux actions candidates, non exclusives :

    1. Reporter les trois migrations dans apps/server/src/prisma/migrations sous les mêmes noms. La comparaison comm du 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_migrations aurait déjà été alimentée par l'arbre nestjs.
    2. Donner à server-nestjs une étape de déploiement de migrations (db:deploy au 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.

  3. added
    internalSujet créé par l’équipe de maintenance.
    on Oct 5, 2026
  4. self-assigned this
    on Oct 5, 2026
  5. added this to the 9.27.0 milestone on Oct 5, 2026
  6. added theissue type on Oct 5, 2026
  7. added a commit that references this issue on Oct 5, 2026
    f3b7ebf
  8. modified the milestones: 9.27.0, 9.26.1 on Oct 5, 2026
  9. StephaneTrebel commented on Oct 5, 2026

    @StephaneTrebel
    Collaborator

    Bugfix intégré dans le hotfix v9.26.1

  10. modified the milestones: 9.27.0, 9.26.1 on Oct 5, 2026
  11. added a commit that references this issue on Oct 8, 2026
    3617759
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinginternalSujet créé par l’équipe de maintenance.

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions