fix(admin): passe les variables FORGEJO_* au conteneur app #143
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/forgejo-env-passthrough"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
En prod Docker/Portainer, l'intégration Forgejo (bouton « Créer un ticket » depuis un message de contact, issue #81) reste inactive même avec les
FORGEJO_*renseignées dans le.env: le bouton n'apparaît sur aucune ligne de/admin/messages.Cause
docker-compose.ymlliste explicitement chaque variable passée au conteneurapp(JWT_SECRET,ADMIN_JWT_SECRET,INTERNAL_WORKER_SECRET, …) —FORGEJO_BASE_URL/FORGEJO_TOKEN/FORGEJO_REPOn'y étaient pas. Un.envposé à côté du compose ne sert qu'à l'interpolation${...}dans le fichier compose ; il n'est pas injecté dans le conteneur (et**/.envest.dockerignored, doncdotenvne trouve rien non plus). Résultat : le process API voit les 3 variables comme absentes →ForgejoService.isConfigured()=false→GET /admin/api/contact/forgejo/statusrenvoie{ enabled: false }→MessagesPagemasque le bouton.Correctif
docker-compose.ymlFORGEJO_*ajoutées au blocenvironment:du serviceapp, via${VAR:-}— même forme queADMIN_JWT_SECRET/INTERNAL_WORKER_SECRETjuste au-dessusapps/api/src/config/env.tsblankAsUnsetsur les 3 champs :${VAR:-}arrive dans le conteneur comme""quand le.envdu stack laisse la variable vide ; sans ça une valeur vide ferait échouerz.string().url()/ la regexowner/repoet planterenvSchema.parse()au démarrage pour tout déploiement qui n'utilise pas Forgejo. Même parade queCOOKIE_SECURE.envSchemaexporté pour le test..env.example(racine)apps/api/.env.exampleles documentait déjà pour le workflow natif)apps/api/test/env.test.ts(nouveau)undefined(ne plante pas), absent ⇒undefined, valeur non vide valide ⇒ passe, valeur non vide mal formée ⇒ rejette toujoursAprès merge
Redéployer le stack (Portainer relit
docker-compose.ymldepuis Git + le.envexistant). LesFORGEJO_*déjà présentes dans le.envprendront alors effet → le bouton apparaît. Si le bouton s'affiche mais que le clic renvoie502(« La création du ticket Forgejo a échoué »), l'étape suivante est le scope du token (write:issue) ou l'accès réseau du conteneur à l'instance Forgejo — les logs de l'API (logger.warndeForgejoService) donnent alors le statut HTTP exact renvoyé par Forgejo.🤖 Generated with Claude Code
app