From 52a066f0c62c8f76440cbebe0468b9dee4303ab9 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 10 Jun 2026 01:10:06 +0200 Subject: [PATCH 1/5] Only try to load .env if it exists --- 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 ++------ shared/dot_env/dot_env.go | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 shared/dot_env/dot_env.go diff --git a/cmd/agent/main.go b/cmd/agent/main.go index f452400732e..b14903896cc 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 77359c961ab..ef0124d078f 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 c92f442d0c7..4c1c8b55e90 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 127c908cddd..92d3fcd2072 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 92b073e006f..167d7e975e7 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/shared/dot_env/dot_env.go b/shared/dot_env/dot_env.go new file mode 100644 index 00000000000..2ce40967a77 --- /dev/null +++ b/shared/dot_env/dot_env.go @@ -0,0 +1,33 @@ +// Copyright 2022 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" +) + +func Load() { + if _, err := os.Stat(".env"); os.IsNotExist(err) { + return + } + + if err := godotenv.Load(); err != nil { + fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + os.Exit(1) + } +} From 95ec56c0685e6f50b3f1b478fc889e462ae14af3 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 10 Jun 2026 01:10:13 +0200 Subject: [PATCH 2/5] fmt --- pipeline/backend/kubernetes/kubernetes.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pipeline/backend/kubernetes/kubernetes.go b/pipeline/backend/kubernetes/kubernetes.go index 318845b882a..9f512ea80e7 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 { From 0b9e637120359e982655d55221a2fedc9c4acc1d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 10 Jun 2026 01:16:26 +0200 Subject: [PATCH 3/5] Apply suggestion from @6543 --- shared/dot_env/dot_env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dot_env/dot_env.go b/shared/dot_env/dot_env.go index 2ce40967a77..47f7f34985b 100644 --- a/shared/dot_env/dot_env.go +++ b/shared/dot_env/dot_env.go @@ -1,4 +1,4 @@ -// Copyright 2022 Woodpecker Authors +// 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. From d29782ea81e7ce07bfdaaffb080c8b0a33698a12 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 10 Jun 2026 01:22:47 +0200 Subject: [PATCH 4/5] conts --- shared/dot_env/dot_env.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shared/dot_env/dot_env.go b/shared/dot_env/dot_env.go index 47f7f34985b..c0f37a1842f 100644 --- a/shared/dot_env/dot_env.go +++ b/shared/dot_env/dot_env.go @@ -21,13 +21,15 @@ import ( "github.com/joho/godotenv" ) +const dotEnv = ".env" + func Load() { - if _, err := os.Stat(".env"); os.IsNotExist(err) { + if _, err := os.Stat(dotEnv); os.IsNotExist(err) { return } if err := godotenv.Load(); err != nil { - fmt.Fprintf(os.Stderr, "Error could not load .env: %s", err) + fmt.Fprintf(os.Stderr, "Error could not load %q: %s", dotEnv, err) os.Exit(1) } } From 4d4696e9e9981f0d78c14f45674e5ba424662aac Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 10 Jun 2026 01:23:07 +0200 Subject: [PATCH 5/5] conts --- shared/dot_env/dot_env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dot_env/dot_env.go b/shared/dot_env/dot_env.go index c0f37a1842f..1998947ef9e 100644 --- a/shared/dot_env/dot_env.go +++ b/shared/dot_env/dot_env.go @@ -28,7 +28,7 @@ func Load() { return } - if err := godotenv.Load(); err != nil { + if err := godotenv.Load(dotEnv); err != nil { fmt.Fprintf(os.Stderr, "Error could not load %q: %s", dotEnv, err) os.Exit(1) }