Skip to content

feat(deployment): persist and validate deployment value sources - #2372

Merged
KepoParis merged 1 commit into
mainfrom
feat/deployment-value-sources-api
Jul 29, 2026
Merged

feat(deployment): persist and validate deployment value sources#2372
KepoParis merged 1 commit into
mainfrom
feat/deployment-value-sources-api

Conversation

@KepoParis

@KepoParis KepoParis commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Issues liées

Issues numéro: #2247


Note

PR empilée (stacked) sur #2369. À rebaser sur main une fois #2369 mergée.

Quel est le comportement actuel ?

Les sources de valeurs (internes / externes) ne sont pas encore exploitées par l'API : impossible de les créer, mettre à jour ou valider sur une source de déploiement.

Quel est le nouveau comportement ?

Modélisation stricte (parse, don't validate)

  • Une source de valeurs est soit interne, soit externe : deux relations dédiées DeploymentInternalValueSource / DeploymentExternalValueSource, et côté schémas partagés une union discriminée par type (internal | external).
  • Ajout de types nommés exportés (CreateDeploymentValueSource, UpdateDeploymentValueSource, CreateDeploymentSource, UpdateDeploymentSource, DeploymentValueSource, DeploymentSource) dont CreateDeployment / UpdateDeployment / Deployment se servent, plutôt que des accès indexés (X['deploymentSources'][number]...).

API — écriture (create / update)

  • Exposition d'une liste ordonnée valueSources (discriminée par type) sur les sources de déploiement. La position dans la liste est conservée (order), préservant l'entrelacement internal / external.
  • Contraintes : au plus une source externe par source de déploiement (superRefine + contrainte d'unicité en base) ; une source externe doit référencer un dépôt (repositoryId) et un ref.

API — lecture (read)

  • La lecture renvoie les value sources sous la forme d'une seule liste ordonnée valueSources (discriminée par type, avec id et order), symétrique de la forme d'écriture. La fusion des deux relations persistées est faite une fois, côté serveur (serializeDeployment, triée par order) : les consommateurs (client, CLI…) n'ont plus à reconstruire la liste. Les deux tables restent un détail de stockage non exposé par l'API.

Parsing au niveau du boundary serveur

  • parseCreateDeployment / parseUpdateDeployment convertissent le payload validé en un modèle précis avant toute écriture : l'externe devient un champ optionnel unique (et non une liste), et les entrées sont séparées en création / mise à jour (buckets …ToCreate / …ToUpdate).

Persistance

  • Création via nested create ; mise à jour via create / update / deleteMany pour les sources internes, et upsert / delete pour l'unique source externe (relation to-one).
  • getDeploymentById utilise findUniqueOrThrow (un id inconnu est une erreur, pas un null qui se balade). Le datastore charge internalValueSources (triées par order) + externalValueSource ; le service les fusionne en valueSources via serializeDeployment avant de répondre.

Tests

  • Tests unitaires de deployment.utils.ts : partitionnement, préservation de l'ordre, séparation create/update, branches d'upsert/delete de la source externe, et fusion ordonnée de la lecture (serializeDeployment).

Cette PR introduit-elle un breaking change ?

Non. Les valueSources sont optionnelles (default([])) ; les déploiements existants restent valides.

Autres informations

Partie API de l'adaptation au nouveau helm-chart (https://github.com/cloud-pi-native/helm-charts) permettant d'ajouter des valeurs externes au chart dso-env. Les composants client suivront dans une PR distincte (#2374) et consommeront la liste valueSources ainsi que les types nommés exposés ici.

Remonté en cours de revue et traité séparément : #2383 (filtre d'exception global Prisma P2025404).

@KepoParis KepoParis self-assigned this Jul 27, 2026
@KepoParis KepoParis added the enhancement New feature or request label Jul 27, 2026
@github-actions github-actions Bot added the built label Jul 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Hey !

The security scan report for the current pull request is available here.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Hey !

The security scan report for the current pull request is available here.

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

On n'est pas loin, mais n'hésite pas à être beaucoup plus intransigeant sur le typage. On ne s'autorise aucun "trou dans la raquette" qui pourrait revenir nous mordre par la suite.

J'ai eu la même conversation avec @shikanime hier à ce sujet. undefined, null, etc. c'est terminé. On serre tous les boulons qu'on peut serrer, le plus tôt possible !

Parse, don't validate

Comment thread apps/server-nestjs/src/modules/deployment/deployment-datastore.service.ts Outdated
Comment thread apps/server-nestjs/src/modules/deployment/deployment-testing.utils.ts Outdated
Comment thread apps/server-nestjs/src/modules/deployment/deployment.utils.ts Outdated
Comment thread apps/server-nestjs/src/modules/deployment/deployment.utils.ts Outdated
Comment thread packages/shared/src/schemas/deployment.ts Outdated
@KepoParis
KepoParis force-pushed the feat/deployment-value-sources branch 2 times, most recently from 87d2da6 to 79c3918 Compare July 28, 2026 10:09
@KepoParis
KepoParis force-pushed the feat/deployment-value-sources-api branch 2 times, most recently from 13f0fc0 to b712f61 Compare July 28, 2026 16:07
@KepoParis
KepoParis requested a review from StephaneTrebel July 28, 2026 16:13
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Hey !

The security scan report for the current pull request is available here.

@KepoParis
KepoParis force-pushed the feat/deployment-value-sources-api branch from b712f61 to 29f69d8 Compare July 28, 2026 19:37
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Hey !

The security scan report for the current pull request is available here.

@KepoParis
KepoParis requested a review from a team July 29, 2026 08:03
@StephaneTrebel
StephaneTrebel removed their request for review July 29, 2026 13:25
StephaneTrebel
StephaneTrebel previously approved these changes Jul 29, 2026
Comment thread packages/shared/src/schemas/deployment.ts
Comment thread packages/shared/src/schemas/deployment.ts
Base automatically changed from feat/deployment-value-sources to main July 29, 2026 15:19
@KepoParis
KepoParis dismissed StephaneTrebel’s stale review July 29, 2026 15:19

The merge-base changed after approval.

@KepoParis
KepoParis force-pushed the feat/deployment-value-sources-api branch from 29f69d8 to 99af2a8 Compare July 29, 2026 15:33
@KepoParis
KepoParis requested a review from StephaneTrebel July 29, 2026 15:42
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@KepoParis
KepoParis added this pull request to the merge queue Jul 29, 2026
Merged via the queue into main with commit 235e73b Jul 29, 2026
33 checks passed
@KepoParis
KepoParis deleted the feat/deployment-value-sources-api branch July 29, 2026 16:05
@KepoParis KepoParis added this to the 9.24.0 milestone Jul 29, 2026
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💡 [REQUEST] - Ajouter la configuration des références Argo Values externes

2 participants