1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
From 6d284379349794ad8939842e4067828aaab86cb9 Mon Sep 17 00:00:00 2001
From: jolheiser <git@jolheiser.com>
Date: Wed, 13 May 2026 15:14:24 -0500
Subject: [PATCH] feat: allow admins to extend default pipeline config paths
Signed-off-by: jolheiser <git@jolheiser.com>
---
cmd/server/flags.go | 8 ++++++++
cmd/server/setup.go | 4 ++++
server/services/config/forge.go | 2 +-
shared/constant/constant.go | 4 ++--
4 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/cmd/server/flags.go b/cmd/server/flags.go
index 2638bf5f7..ecfdb5d5f 100644
--- a/cmd/server/flags.go
+++ b/cmd/server/flags.go
@@ -289,6 +289,14 @@ var flags = append([]cli.Flag{
Name: "config-extension-netrc",
Usage: "whether global configuration extension should receive netrc data",
},
+ &cli.StringSliceFlag{
+ Sources: cli.EnvVars("WOODPECKER_EXTRA_DEFAULT_PIPELINE_CONFIGS"),
+ Name: "extra-default-pipeline-configs",
+ Usage: "extra default pipeline config paths to check",
+ Config: cli.StringConfig{
+ TrimSpace: true,
+ },
+ },
&cli.StringFlag{
Sources: cli.EnvVars("WOODPECKER_REGISTRY_EXTENSION_ENDPOINT"),
Name: "registry-extension-endpoint",
diff --git a/cmd/server/setup.go b/cmd/server/setup.go
index 6e8bb194c..5e74fbaf4 100644
--- a/cmd/server/setup.go
+++ b/cmd/server/setup.go
@@ -45,6 +45,7 @@ import (
"go.woodpecker-ci.org/woodpecker/v3/server/store"
"go.woodpecker-ci.org/woodpecker/v3/server/store/datastore"
"go.woodpecker-ci.org/woodpecker/v3/server/store/types"
+ "go.woodpecker-ci.org/woodpecker/v3/shared/constant"
)
const (
@@ -158,6 +159,9 @@ func setupJWTSecret(_store store.Store) (string, error) {
}
func setupEvilGlobals(ctx context.Context, c *cli.Command, s store.Store) (err error) {
+ // default config paths
+ constant.DefaultConfigOrder = append(constant.DefaultConfigOrder, c.StringSlice("extra-default-pipeline-configs")...)
+
// services
server.Config.Services.Logs = logging.New()
server.Config.Services.Membership = setupMembershipService(ctx, s)
diff --git a/server/services/config/forge.go b/server/services/config/forge.go
index 57bf040e8..aee3ad7c2 100644
--- a/server/services/config/forge.go
+++ b/server/services/config/forge.go
@@ -97,7 +97,7 @@ func (f *forgeFetcherContext) fetch(c context.Context, config string) ([]*types.
log.Trace().Msgf("configFetcher[%s]: user did not define own config, following default procedure", f.repo.FullName)
// for the order see shared/constants/constants.go
- fileMetas, err := f.getFirstAvailableConfig(ctx, constant.DefaultConfigOrder[:])
+ fileMetas, err := f.getFirstAvailableConfig(ctx, constant.DefaultConfigOrder)
if err == nil {
return fileMetas, nil
}
diff --git a/shared/constant/constant.go b/shared/constant/constant.go
index e56957b82..9de20ca53 100644
--- a/shared/constant/constant.go
+++ b/shared/constant/constant.go
@@ -16,9 +16,9 @@ package constant
import "time"
-// DefaultConfigOrder represent the priority in witch woodpecker search for a pipeline config by default
+// DefaultConfigOrder represent the priority in which woodpecker searches for a pipeline config by default
// folders are indicated by supplying a trailing slash.
-var DefaultConfigOrder = [...]string{
+var DefaultConfigOrder = []string{
".woodpecker/",
".woodpecker.yaml",
".woodpecker.yml",
base-commit: 48e1ece20057e59de4e8e3fe25fc1f3a41e8a020
--
2.50.1
|