Description
Suite à la migration de la logique base de données et de la génération du schéma vers un package dédié (#2064), nous rencontrons un problème de couplage sur la gestion des environnements.
Actuellement, prisma.config.ts utilise dotenv pour charger conditionnellement des fichiers (ex: .env.integ ou .env.docker). Le fait que cette logique soit désormais dans un package pose problème : le package doit soit dupliquer les fichiers .env, soit connaître le chemin relatif vers la racine du projet, ce qui n'est pas propre.
{
"scripts": {
"dev:db:migrate": "...",
"docker:db:migrate": "...",
"integ:db:migrate": "..."
}
L'objectif est d'extraire la logique de chargement du code applicatif pour la confier au shell via direnv, Makefile ou autre outil.
PRs liées
N/A
Issues liées
Liée à l'issue #2064
Exemples simples
Au lieu de gérer la sélection du fichier en TypeScript, on utilise un fichier .envrc à la racine :
# .envrc
if [ "$INTEGRATION" = "true" ]; then
source_env .env.integ
elif [ "$DOCKER" = "true" ]; then
source_env .env.docker
else
source_env .env
fi
env_vars_required DB_URL
equivalent avec un Makefile
PNPM = corepack pnpm
-include .env
ifeq ($(DOCKER),true)
-include .env.docker
endif
ifeq ($(INTEGRATION),true)
-include .env.integ
endif
db-generate:
$(PNPM) --filter @cpn-console/database run generate
db-migrate:
$(PNPM) --filter @cpn-console/database run migrate
db-deploy:
$(PNPM) --filter @cpn-console/database run deploy
db-diff:
$(PNPM) --filter @cpn-console/database run diff
db-reset:
$(PNPM) --filter @cpn-console/database run reset
Ainsi, l'application et le package se contentent de lire process.env.DATABASE_URL sans se soucier de la provenance de la donnée.
Spécifications techniques
- Suppression de dotenv : Retirer les imports
dotenv/config et la logique de chargement conditionnel dans le code applicatif.
- Workflow développeur : Ajouter un
.envrc dans chaque apps et au niveau du root si necessare de partage des scripts.
- Mettre à jour le
README.md pour documenter l'usage de direnv (installation et direnv allow).
- Impact CI/CD & Docker : S'assurer que les environnements de production/CI continuent d'injecter ces variables, car le code ne fournira plus de valeurs via direnv.
Définition du fini
Description
Suite à la migration de la logique base de données et de la génération du schéma vers un package dédié (#2064), nous rencontrons un problème de couplage sur la gestion des environnements.
Actuellement, prisma.config.ts utilise dotenv pour charger conditionnellement des fichiers (ex: .env.integ ou .env.docker). Le fait que cette logique soit désormais dans un package pose problème : le package doit soit dupliquer les fichiers .env, soit connaître le chemin relatif vers la racine du projet, ce qui n'est pas propre.
{ "scripts": { "dev:db:migrate": "...", "docker:db:migrate": "...", "integ:db:migrate": "..." }L'objectif est d'extraire la logique de chargement du code applicatif pour la confier au shell via direnv, Makefile ou autre outil.
PRs liées
N/A
Issues liées
Liée à l'issue #2064
Exemples simples
Au lieu de gérer la sélection du fichier en TypeScript, on utilise un fichier
.envrcà la racine :equivalent avec un Makefile
Ainsi, l'application et le package se contentent de lire
process.env.DATABASE_URLsans se soucier de la provenance de la donnée.Spécifications techniques
dotenv/configet la logique de chargement conditionnel dans le code applicatif..envrcdans chaque apps et au niveau du root si necessare de partage des scripts.README.mdpour documenter l'usage dedirenv(installation etdirenv allow).Définition du fini