From 2aaf487a39de6cd354883a52bd243765a62ce07f Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 8 Jun 2026 10:21:45 +0200 Subject: [PATCH] Surface `.env` load errors (#6707) We drop errors loading from loading `.env` in the past. This is hard to debug and can cause confusion, so we change it with this. --- .cspell.json | 1 + cmd/agent/core/run.go | 2 -- cmd/agent/main.go | 8 ++++++++ cmd/agent/man.go | 7 +++++++ cmd/cli/main.go | 8 +++++++- cmd/server/main.go | 8 +++++++- cmd/server/man.go | 8 +++++++- 7 files changed, 37 insertions(+), 5 deletions(-) diff --git a/.cspell.json b/.cspell.json index 5c3d860d6..15e94eb46 100644 --- a/.cspell.json +++ b/.cspell.json @@ -80,6 +80,7 @@ "gocritic", "GODEBUG", "godoc", + "godotenv", "Gogs", "golangci", "gomod", diff --git a/cmd/agent/core/run.go b/cmd/agent/core/run.go index d72f62a84..d8feaf6ec 100644 --- a/cmd/agent/core/run.go +++ b/cmd/agent/core/run.go @@ -19,8 +19,6 @@ import ( "os" "slices" - // Load config from .env file. - _ "github.com/joho/godotenv/autoload" "github.com/rs/zerolog/log" "github.com/urfave/cli/v3" diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 2eedd8f18..f45240073 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -16,7 +16,10 @@ package main import ( "context" + "fmt" + "os" + "github.com/joho/godotenv" "github.com/rs/zerolog/log" "go.woodpecker-ci.org/woodpecker/v3/cmd/agent/core" @@ -34,6 +37,11 @@ var backends = []backend_types.Backend{ } func main() { + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } + ctx := utils.WithContextSigtermCallback(context.Background(), func() { log.Info().Msg("termination signal is received, shutting down agent") }) diff --git a/cmd/agent/man.go b/cmd/agent/man.go index 456e226de..77359c961 100644 --- a/cmd/agent/man.go +++ b/cmd/agent/man.go @@ -18,7 +18,9 @@ package main import ( "fmt" + "os" + "github.com/joho/godotenv" docs "github.com/urfave/cli-docs/v3" "go.woodpecker-ci.org/woodpecker/v3/cmd/agent/core" @@ -35,6 +37,11 @@ var backends = []backend_types.Backend{ } func main() { + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } + app := core.GenApp(backends) md, err := docs.ToMan(app) if err != nil { diff --git a/cmd/cli/main.go b/cmd/cli/main.go index d6670dadc..c92f442d0 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -16,15 +16,21 @@ package main import ( "context" + "fmt" "os" - _ "github.com/joho/godotenv/autoload" + "github.com/joho/godotenv" "github.com/rs/zerolog/log" "go.woodpecker-ci.org/woodpecker/v3/shared/utils" ) func main() { + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } + ctx := utils.WithContextSigtermCallback(context.Background(), func() { log.Info().Msg("termination signal is received, terminate cli") }) diff --git a/cmd/server/main.go b/cmd/server/main.go index 778b4a847..127c908cd 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -18,9 +18,10 @@ package main import ( "context" + "fmt" "os" - _ "github.com/joho/godotenv/autoload" + "github.com/joho/godotenv" "github.com/rs/zerolog/log" _ "go.woodpecker-ci.org/woodpecker/v3/cmd/server/openapi" @@ -28,6 +29,11 @@ import ( ) func main() { + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } + ctx := utils.WithContextSigtermCallback(context.Background(), func() { log.Info().Msg("termination signal is received, shutting down server") }) diff --git a/cmd/server/man.go b/cmd/server/man.go index 915601722..92b073e00 100644 --- a/cmd/server/man.go +++ b/cmd/server/man.go @@ -18,14 +18,20 @@ package main import ( "fmt" + "os" - _ "github.com/joho/godotenv/autoload" + "github.com/joho/godotenv" docs "github.com/urfave/cli-docs/v3" _ "go.woodpecker-ci.org/woodpecker/v3/cmd/server/openapi" ) func main() { + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } + app := genApp() md, err := docs.ToMan(app) if err != nil {