From c776564285f7ab65fca16539a640ccdc6a01ac70 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 12 Jun 2026 20:43:14 +0200 Subject: [PATCH] Only try to load .env if it exists (#6714) --- cmd/agent/main.go | 9 ++---- cmd/agent/man.go | 8 ++---- cmd/cli/main.go | 8 ++---- cmd/server/main.go | 8 ++---- cmd/server/man.go | 8 ++---- pipeline/backend/kubernetes/kubernetes.go | 3 +- shared/dot_env/dot_env.go | 35 +++++++++++++++++++++++ 7 files changed, 47 insertions(+), 32 deletions(-) create mode 100644 shared/dot_env/dot_env.go diff --git a/cmd/agent/main.go b/cmd/agent/main.go index f45240073..b14903896 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -16,10 +16,7 @@ package main import ( "context" - "fmt" - "os" - "github.com/joho/godotenv" "github.com/rs/zerolog/log" "go.woodpecker-ci.org/woodpecker/v3/cmd/agent/core" @@ -27,6 +24,7 @@ import ( "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/kubernetes" "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/local" backend_types "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" + "go.woodpecker-ci.org/woodpecker/v3/shared/dot_env" "go.woodpecker-ci.org/woodpecker/v3/shared/utils" ) @@ -37,10 +35,7 @@ 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) - } + dot_env.Load() 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 77359c961..ef0124d07 100644 --- a/cmd/agent/man.go +++ b/cmd/agent/man.go @@ -18,9 +18,7 @@ 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" @@ -28,6 +26,7 @@ import ( "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/kubernetes" "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/local" backend_types "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" + "go.woodpecker-ci.org/woodpecker/v3/shared/dot_env" ) var backends = []backend_types.Backend{ @@ -37,10 +36,7 @@ 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) - } + dot_env.Load() app := core.GenApp(backends) md, err := docs.ToMan(app) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index c92f442d0..4c1c8b55e 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -16,20 +16,16 @@ package main import ( "context" - "fmt" "os" - "github.com/joho/godotenv" "github.com/rs/zerolog/log" + "go.woodpecker-ci.org/woodpecker/v3/shared/dot_env" "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) - } + dot_env.Load() 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 127c908cd..92d3fcd20 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -18,21 +18,17 @@ package main import ( "context" - "fmt" "os" - "github.com/joho/godotenv" "github.com/rs/zerolog/log" _ "go.woodpecker-ci.org/woodpecker/v3/cmd/server/openapi" + "go.woodpecker-ci.org/woodpecker/v3/shared/dot_env" "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) - } + dot_env.Load() 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 92b073e00..167d7e975 100644 --- a/cmd/server/man.go +++ b/cmd/server/man.go @@ -18,19 +18,15 @@ package main import ( "fmt" - "os" - "github.com/joho/godotenv" docs "github.com/urfave/cli-docs/v3" _ "go.woodpecker-ci.org/woodpecker/v3/cmd/server/openapi" + "go.woodpecker-ci.org/woodpecker/v3/shared/dot_env" ) func main() { - if err := godotenv.Load(); err != nil { - fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) - os.Exit(1) - } + dot_env.Load() app := genApp() md, err := docs.ToMan(app) diff --git a/pipeline/backend/kubernetes/kubernetes.go b/pipeline/backend/kubernetes/kubernetes.go index 318845b88..9f512ea80 100644 --- a/pipeline/backend/kubernetes/kubernetes.go +++ b/pipeline/backend/kubernetes/kubernetes.go @@ -356,7 +356,8 @@ func (e *kube) WaitStep(ctx context.Context, step *types.Step, taskUUID string) // After the informer signals completion, kubelet may not have finalized // containerStatuses yet (phase=Succeeded before state.terminated is set). // Retry with backoff to allow kubelet to catch up. - pod, err := backoff.Retry(ctx, + pod, err := backoff.Retry( + ctx, func() (*kube_core_v1.Pod, error) { p, err := e.client.CoreV1().Pods(e.config.GetNamespace(step.OrgID)).Get(ctx, podName, kube_meta_v1.GetOptions{}) if err != nil { diff --git a/shared/dot_env/dot_env.go b/shared/dot_env/dot_env.go new file mode 100644 index 000000000..1998947ef --- /dev/null +++ b/shared/dot_env/dot_env.go @@ -0,0 +1,35 @@ +// Copyright 2026 Woodpecker Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dot_env + +import ( + "fmt" + "os" + + "github.com/joho/godotenv" +) + +const dotEnv = ".env" + +func Load() { + if _, err := os.Stat(dotEnv); os.IsNotExist(err) { + return + } + + if err := godotenv.Load(dotEnv); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load %q: %s", dotEnv, err) + os.Exit(1) + } +}