Ein 60-Zeilen-Tool in Go zum Validieren von .env-Dateien
Jedes Projekt, das über ein Wochenende hinaus wächst, liefert irgendwann einen Deploy aus, dem stillschweigend eine env var fehlt. Der Service startet, ein halbes Feature funktioniert nicht mehr, und einen Tag später merkt es jemand. Wir hatten es satt und schrieben ein 60-Zeilen-Tool, das wir jetzt als ersten Schritt jedes CI-Jobs ausführen.
Wie es aufgebaut ist
Die Idee ist absichtlich langweilig. Man committet eine Schema-Datei — env.schema — die auflistet, was jede Umgebung erwartet. Das Tool liest sie, liest die tatsächliche .env und sagt dir, was fehlt, was zu viel ist und was falsch aussieht:
$ envcheck --env production .env
✗ DATABASE_URL missing
✗ ANTHROPIC_API_KEY missing
! SENTRY_DSN present but empty
✓ PORT ok
✓ LOG_LEVEL ok
Exit-Code 1 bei jedem ✗, sonst 0. CI schlägt vor dem Deploy fehl, nicht danach.
Das Schema
Ein Schema-Eintrag ist eine Zeile. Pflicht-Variablen bekommen ein !, optionale ein ?, und du kannst auf Umgebungen einschränken:
! DATABASE_URL production,staging
! ANTHROPIC_API_KEY production,staging
? SENTRY_DSN production
! PORT *
! LOG_LEVEL *
Das ist die gesamte Spezifikation. Keine Typen, keine Regex-Validierung, kein JSON Schema. Wir haben zweimal reichere Schemas versucht und beide Male wieder verworfen — jedes Team hat bereits irgendeine Validierung für die Werte selbst; was fehlte, war eine klare Übersicht, welche Keys wo existieren müssen.
Was wir nicht gebaut haben
Auto-Fix, .env-Templating, Secret-Rotation, irgendetwas Cloud-Spezifisches. Das Tool macht eine Sache: dir sagen, welche env vars für eine bestimmte Umgebung fehlen, bevor der Deploy rausgeht. Wir werden wissen, dass es zu groß geworden ist, an dem Tag, an dem es eine eigene Config-Datei braucht.