fix: call config.MustInit() before config.Load() so Viper reads env vars
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

Without MustInit(), viper.AutomaticEnv() is never called, so Viper
cannot read environment variables injected by K8s secrets (envFrom).
This caused DATABASE_URL to always appear empty in deployed services,
forcing them into standalone/in-memory mode even when a database was
provisioned.

os.Getenv() calls like JWT_SECRET worked fine (direct syscall).
Viper-backed reads like DATABASE_URL did not (require AutomaticEnv).

Added pkgconfig.MustInit() call at the top of main() in both the
service component template and the full-monorepo example-api.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jordan 2026-02-23 04:25:38 -07:00
parent 4d9203eddc
commit ad1f19739d

View File

@ -24,6 +24,7 @@ import (
emailpkg "{{GO_MODULE}}/pkg/email"
"{{GO_MODULE}}/pkg/notify"
"{{GO_MODULE}}/pkg/queue"
pkgconfig "{{GO_MODULE}}/pkg/config"
"{{GO_MODULE}}/pkg/realtime"
"{{GO_MODULE}}/pkg/storage"
"{{GO_MODULE}}/pkg/textgen"
@ -58,6 +59,13 @@ func main() {
os.Exit(0)
}
// Initialize viper with AutomaticEnv so Viper reads env vars injected by
// the platform (K8s secrets, envFrom). Must happen before any config reads.
pkgconfig.MustInit(pkgconfig.Options{
AppName: "{{COMPONENT_NAME}}",
DefaultPort: {{PORT}},
})
// Load config
cfg := config.Load()