Skip to content

💡 [REQUEST] - Découpler le chargement des variables d'environnement #2078

@shikanime

Description

@shikanime

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.

L'objectif est d'extraire la logique de chargement du code applicatif pour la confier au shell via direnv.

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

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

  1. Suppression de dotenv : Retirer les imports dotenv/config et la logique de chargement conditionnel dans le code applicatif.
  2. 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).
  3. 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

  • La fonctionnalité est terminée
  • Les tests liés à cette fonctionnalité ont été ajoutés
  • La documentation liée à cette fonctionnalité a été ajoutée (cf. https://github.com/cloud-pi-native/documentation)
  • La communication avec les autres équipes impliquées par cette fonctionnalité a été faite

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions