2024-07-17 23:26:35 +00:00
// Copyright 2023 Woodpecker Authors
2021-05-31 12:35:47 +00:00
// Copyright 2019 Laszlo Fogas
//
// 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 main
import (
2022-03-01 15:09:33 +00:00
"os"
2021-05-31 12:35:47 +00:00
"time"
2024-07-17 23:26:35 +00:00
"github.com/urfave/cli/v3"
2021-12-19 11:46:36 +00:00
2023-12-08 07:15:08 +00:00
"go.woodpecker-ci.org/woodpecker/v2/shared/constant"
2023-12-31 22:29:56 +00:00
"go.woodpecker-ci.org/woodpecker/v2/shared/logger"
2021-05-31 12:35:47 +00:00
)
2023-08-07 18:47:30 +00:00
var flags = append ( [ ] cli . Flag {
2023-07-14 23:15:13 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LOG_XORM" ) ,
2023-07-14 23:15:13 +00:00
Name : "log-xorm" ,
Usage : "enable xorm logging" ,
} ,
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LOG_XORM_SQL" ) ,
2023-07-14 23:15:13 +00:00
Name : "log-xorm-sql" ,
Usage : "enable xorm sql command logging" ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_HOST" ) ,
2021-10-27 19:03:14 +00:00
Name : "server-host" ,
2024-06-04 06:30:54 +00:00
Usage : "server fully qualified url. Format: <scheme>://<host>[/<prefix path>]" ,
2023-06-18 12:47:40 +00:00
} ,
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_SERVER_ADDR" ) ,
2021-10-27 19:03:14 +00:00
Name : "server-addr" ,
Usage : "server address" ,
Value : ":8000" ,
} ,
2023-05-11 04:11:10 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_SERVER_ADDR_TLS" ) ,
2023-05-11 04:11:10 +00:00
Name : "server-addr-tls" ,
Usage : "port https with tls (:443)" ,
Value : ":443" ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_SERVER_CERT" ) ,
2021-10-27 19:03:14 +00:00
Name : "server-cert" ,
Usage : "server ssl cert path" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_SERVER_KEY" ) ,
2021-10-27 19:03:14 +00:00
Name : "server-key" ,
Usage : "server ssl key path" ,
} ,
support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781)
This PR introduces two new server configuration options, for providing a
custom .JS and .CSS file.
These can be used to show custom banner messages, add
environment-dependent signals, or simply a corporate logo.
### Motivation (what problem I try to solve)
I'm operating Woodpecker in multiple k8s clusters for different
environments.
When having multiple browser tabs open, I prefer strong indicators for
each environment.
E.g. a red "PROD" banner, or just a blue "QA" banner.
Also, we sometimes need to have the chance for maintenance, and instead
of broadcasting emails,
I prefer a banner message, stating something like: "Heads-up: there's a
planned downtime, next Friday, blabla...".
Also, I like to have the firm's logo visible, which makes Woodpecker
look more like an integral part of our platform.
### Implementation notes
* Two new config options are introduced ```WOODPECKER_CUSTOM_CSS_FILE```
and ```WOODPECKER_CUSTOM_JS_FILE```
* I've piggy-bagged the existing handler for assets, as it seemed to me
a minimally invasive approach
* the option along with an example is documented
* a simple unit test for the Gin-handler ensures some regression safety
* no extra dependencies are introduced
### Visual example
The documented example will look like this.
![Screenshot 2023-05-27 at 17 00
44](https://github.com/woodpecker-ci/woodpecker/assets/1189394/8940392e-463c-4651-a1eb-f017cd3cd64d)
### Areas of uncertainty
This is my first contribution to Woodpecker and I tried my best to align
with your conventions.
That said, I found myself uncertain about these things and would be glad
about getting feedback.
* The handler tests are somewhat different than the other ones because I
wanted to keep them simple - I hope that still matches your coding
guidelines
* caching the page sometimes will let the browser not recognize changes
and a user must reload. I'm not fully into the details of how caching is
implemented and neither can judge if it's a real problem. Another pair
of eyes would be good.
2023-07-10 10:46:35 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_CUSTOM_CSS_FILE" ) ,
support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781)
This PR introduces two new server configuration options, for providing a
custom .JS and .CSS file.
These can be used to show custom banner messages, add
environment-dependent signals, or simply a corporate logo.
### Motivation (what problem I try to solve)
I'm operating Woodpecker in multiple k8s clusters for different
environments.
When having multiple browser tabs open, I prefer strong indicators for
each environment.
E.g. a red "PROD" banner, or just a blue "QA" banner.
Also, we sometimes need to have the chance for maintenance, and instead
of broadcasting emails,
I prefer a banner message, stating something like: "Heads-up: there's a
planned downtime, next Friday, blabla...".
Also, I like to have the firm's logo visible, which makes Woodpecker
look more like an integral part of our platform.
### Implementation notes
* Two new config options are introduced ```WOODPECKER_CUSTOM_CSS_FILE```
and ```WOODPECKER_CUSTOM_JS_FILE```
* I've piggy-bagged the existing handler for assets, as it seemed to me
a minimally invasive approach
* the option along with an example is documented
* a simple unit test for the Gin-handler ensures some regression safety
* no extra dependencies are introduced
### Visual example
The documented example will look like this.
![Screenshot 2023-05-27 at 17 00
44](https://github.com/woodpecker-ci/woodpecker/assets/1189394/8940392e-463c-4651-a1eb-f017cd3cd64d)
### Areas of uncertainty
This is my first contribution to Woodpecker and I tried my best to align
with your conventions.
That said, I found myself uncertain about these things and would be glad
about getting feedback.
* The handler tests are somewhat different than the other ones because I
wanted to keep them simple - I hope that still matches your coding
guidelines
* caching the page sometimes will let the browser not recognize changes
and a user must reload. I'm not fully into the details of how caching is
implemented and neither can judge if it's a real problem. Another pair
of eyes would be good.
2023-07-10 10:46:35 +00:00
Name : "custom-css-file" ,
Usage : "file path for the server to serve a custom .CSS file, used for customizing the UI" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_CUSTOM_JS_FILE" ) ,
support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781)
This PR introduces two new server configuration options, for providing a
custom .JS and .CSS file.
These can be used to show custom banner messages, add
environment-dependent signals, or simply a corporate logo.
### Motivation (what problem I try to solve)
I'm operating Woodpecker in multiple k8s clusters for different
environments.
When having multiple browser tabs open, I prefer strong indicators for
each environment.
E.g. a red "PROD" banner, or just a blue "QA" banner.
Also, we sometimes need to have the chance for maintenance, and instead
of broadcasting emails,
I prefer a banner message, stating something like: "Heads-up: there's a
planned downtime, next Friday, blabla...".
Also, I like to have the firm's logo visible, which makes Woodpecker
look more like an integral part of our platform.
### Implementation notes
* Two new config options are introduced ```WOODPECKER_CUSTOM_CSS_FILE```
and ```WOODPECKER_CUSTOM_JS_FILE```
* I've piggy-bagged the existing handler for assets, as it seemed to me
a minimally invasive approach
* the option along with an example is documented
* a simple unit test for the Gin-handler ensures some regression safety
* no extra dependencies are introduced
### Visual example
The documented example will look like this.
![Screenshot 2023-05-27 at 17 00
44](https://github.com/woodpecker-ci/woodpecker/assets/1189394/8940392e-463c-4651-a1eb-f017cd3cd64d)
### Areas of uncertainty
This is my first contribution to Woodpecker and I tried my best to align
with your conventions.
That said, I found myself uncertain about these things and would be glad
about getting feedback.
* The handler tests are somewhat different than the other ones because I
wanted to keep them simple - I hope that still matches your coding
guidelines
* caching the page sometimes will let the browser not recognize changes
and a user must reload. I'm not fully into the details of how caching is
implemented and neither can judge if it's a real problem. Another pair
of eyes would be good.
2023-07-10 10:46:35 +00:00
Name : "custom-js-file" ,
Usage : "file path for the server to serve a custom .JS file, used for customizing the UI" ,
} ,
2022-09-04 01:24:42 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LETS_ENCRYPT_EMAIL" ) ,
2022-09-04 01:24:42 +00:00
Name : "lets-encrypt-email" ,
Usage : "let's encrypt email" ,
} ,
2022-02-06 20:21:57 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LETS_ENCRYPT" ) ,
2022-02-06 20:21:57 +00:00
Name : "lets-encrypt" ,
Usage : "enable let's encrypt" ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GRPC_ADDR" ) ,
2021-10-27 19:03:14 +00:00
Name : "grpc-addr" ,
Usage : "grpc address" ,
Value : ":9000" ,
} ,
2023-03-19 19:24:43 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_GRPC_SECRET_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_GRPC_SECRET" ) ) ,
Name : "grpc-secret" ,
Usage : "grpc jwt secret" ,
Value : "secret" ,
2023-03-19 19:24:43 +00:00
} ,
2023-03-12 08:41:10 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_METRICS_SERVER_ADDR" ) ,
2023-03-12 08:41:10 +00:00
Name : "metrics-server-addr" ,
Usage : "metrics server address" ,
Value : "" ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ADMIN" ) ,
2021-10-27 19:03:14 +00:00
Name : "admin" ,
Usage : "list of admin users" ,
} ,
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ORGS" ) ,
2021-10-27 19:03:14 +00:00
Name : "orgs" ,
Usage : "list of approved organizations" ,
} ,
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_REPO_OWNERS" ) ,
2021-10-27 19:03:14 +00:00
Name : "repo-owners" ,
2024-06-04 06:30:54 +00:00
Usage : "Repositories by those owners will be allowed to be used in woodpecker" ,
2021-10-27 19:03:14 +00:00
} ,
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_OPEN" ) ,
2021-10-27 19:03:14 +00:00
Name : "open" ,
Usage : "enable open user registration" ,
} ,
2022-02-08 16:55:08 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_AUTHENTICATE_PUBLIC_REPOS" ) ,
2022-02-08 16:55:08 +00:00
Name : "authenticate-public-repos" ,
Usage : "Always use authentication to clone repositories even if they are public. Needed if the SCM requires to always authenticate as used by many companies." ,
} ,
2022-05-09 09:26:09 +00:00
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DEFAULT_CANCEL_PREVIOUS_PIPELINE_EVENTS" ) ,
2022-05-09 09:26:09 +00:00
Name : "default-cancel-previous-pipeline-events" ,
Usage : "List of event names that will be canceled when a new pipeline for the same context (tag, branch) is created." ,
2024-07-17 23:26:35 +00:00
Value : [ ] string { "push" , "pull_request" } ,
2022-05-09 09:26:09 +00:00
} ,
2022-02-10 16:05:19 +00:00
& cli . StringFlag {
2024-09-01 18:41:10 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DEFAULT_CLONE_PLUGIN" , "WOODPECKER_DEFAULT_CLONE_IMAGE" ) ,
Name : "default-clone-plugin" ,
Aliases : [ ] string { "default-clone-image" } ,
2022-02-10 16:05:19 +00:00
Usage : "The default docker image to be used when cloning the repo" ,
2024-09-01 18:41:10 +00:00
Value : constant . DefaultClonePlugin ,
2022-02-10 16:05:19 +00:00
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_DEFAULT_PIPELINE_TIMEOUT" ) ,
2023-03-19 19:24:43 +00:00
Name : "default-pipeline-timeout" ,
Usage : "The default time in minutes for a repo in minutes before a pipeline gets killed" ,
Value : 60 ,
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_MAX_PIPELINE_TIMEOUT" ) ,
2023-03-19 19:24:43 +00:00
Name : "max-pipeline-timeout" ,
Usage : "The maximum time in minutes you can set in the repo settings before a pipeline gets killed" ,
Value : 120 ,
} ,
2021-10-27 19:03:14 +00:00
& cli . DurationFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_SESSION_EXPIRES" ) ,
2021-10-27 19:03:14 +00:00
Name : "session-expires" ,
Usage : "session expiration time" ,
Value : time . Hour * 72 ,
} ,
& cli . StringSliceFlag {
2024-09-02 08:41:20 +00:00
Sources : cli . EnvVars ( "WOODPECKER_PLUGINS_PRIVILEGED" ) ,
Name : "plugins-privileged" ,
2024-08-31 17:04:47 +00:00
Usage : "Allow plugins to run in privileged mode, if environment variable is defined but empty there will be none" ,
2021-10-27 19:03:14 +00:00
} ,
2024-09-01 18:41:10 +00:00
& cli . StringSliceFlag {
Sources : cli . EnvVars ( "WOODPECKER_PLUGINS_TRUSTED_CLONE" ) ,
Name : "plugins-trusted-clone" ,
Usage : "Plugins witch are trusted to handle the netrc info in clone steps" ,
Value : constant . TrustedClonePlugins ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_VOLUME" ) ,
2021-10-27 19:03:14 +00:00
Name : "volume" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DOCKER_CONFIG" ) ,
2021-10-27 19:03:14 +00:00
Name : "docker-config" ,
} ,
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ENVIRONMENT" ) ,
2021-10-27 19:03:14 +00:00
Name : "environment" ,
} ,
& cli . StringSliceFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_NETWORK" ) ,
2021-10-27 19:03:14 +00:00
Name : "network" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_AGENT_SECRET_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_AGENT_SECRET" ) ) ,
Name : "agent-secret" ,
Usage : "server-agent shared password" ,
2021-10-27 19:03:14 +00:00
} ,
2022-02-06 20:21:57 +00:00
& cli . DurationFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_KEEPALIVE_MIN_TIME" ) ,
2022-02-06 20:21:57 +00:00
Name : "keepalive-min-time" ,
Usage : "server-side enforcement policy on the minimum amount of time a client should wait before sending a keepalive ping." ,
} ,
2022-02-28 09:56:23 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_CONFIG_SERVICE_ENDPOINT" ) ,
2022-02-28 09:56:23 +00:00
Name : "config-service-endpoint" ,
Usage : "url used for calling configuration service endpoint" ,
} ,
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DATABASE_DRIVER" ) ,
2021-10-27 19:03:14 +00:00
Name : "driver" ,
Usage : "database driver" ,
Value : "sqlite3" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_DATABASE_DATASOURCE_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_DATABASE_DATASOURCE" ) ) ,
Name : "datasource" ,
Usage : "database driver configuration string" ,
Value : datasourceDefaultValue ( ) ,
2021-10-27 19:03:14 +00:00
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_PROMETHEUS_AUTH_TOKEN_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_PROMETHEUS_AUTH_TOKEN" ) ) ,
Name : "prometheus-auth-token" ,
Usage : "token to secure prometheus metrics endpoint" ,
2021-05-31 12:35:47 +00:00
} ,
2022-02-06 20:21:57 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_STATUS_CONTEXT" , "WOODPECKER_GITHUB_CONTEXT" , "WOODPECKER_GITEA_CONTEXT" ) ,
2022-02-06 20:21:57 +00:00
Name : "status-context" ,
Usage : "status context prefix" ,
Value : "ci/woodpecker" ,
} ,
2022-05-12 17:07:33 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_STATUS_CONTEXT_FORMAT" ) ,
2022-05-12 17:07:33 +00:00
Name : "status-context-format" ,
Usage : "status context format" ,
2023-11-03 12:00:34 +00:00
Value : "{{ .context }}/{{ .event }}/{{ .workflow }}{{if not (eq .axis_id 0)}}/{{.axis_id}}{{end}}" ,
2022-05-12 17:07:33 +00:00
} ,
2023-06-12 20:43:14 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_MIGRATIONS_ALLOW_LONG" ) ,
2023-06-12 20:43:14 +00:00
Name : "migrations-allow-long" ,
Value : false ,
} ,
2023-08-03 00:42:30 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ENABLE_SWAGGER" ) ,
2023-08-03 00:42:30 +00:00
Name : "enable-swagger" ,
Value : true ,
} ,
2023-12-27 21:16:15 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DISABLE_VERSION_CHECK" ) ,
2023-12-27 21:16:15 +00:00
Usage : "Disable version check in admin web ui." ,
Name : "skip-version-check" ,
} ,
2024-06-06 12:34:57 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LOG_STORE" ) ,
2024-06-06 12:34:57 +00:00
Name : "log-store" ,
Usage : "log store to use ('database' or 'file')" ,
Value : "database" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LOG_STORE_FILE_PATH" ) ,
2024-06-06 12:34:57 +00:00
Name : "log-store-file-path" ,
Usage : "directory used for file based log storage" ,
} ,
2021-05-31 12:35:47 +00:00
//
2023-08-07 19:13:26 +00:00
// backend options for pipeline compiler
//
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_BACKEND_NO_PROXY" , "NO_PROXY" , "no_proxy" ) ,
2023-08-07 19:13:26 +00:00
Usage : "if set, pass the environment variable down as \"NO_PROXY\" to steps" ,
Name : "backend-no-proxy" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_BACKEND_HTTP_PROXY" , "HTTP_PROXY" , "http_proxy" ) ,
2023-08-19 14:27:21 +00:00
Usage : "if set, pass the environment variable down as \"HTTP_PROXY\" to steps" ,
2023-08-07 19:13:26 +00:00
Name : "backend-http-proxy" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_BACKEND_HTTPS_PROXY" , "HTTPS_PROXY" , "https_proxy" ) ,
2023-08-07 19:13:26 +00:00
Usage : "if set, pass the environment variable down as \"HTTPS_PROXY\" to steps" ,
Name : "backend-https-proxy" ,
} ,
//
2021-05-31 12:35:47 +00:00
// resource limit parameters
//
2023-02-01 17:53:19 +00:00
& cli . DurationFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_FORGE_TIMEOUT" ) ,
2023-02-01 17:53:19 +00:00
Name : "forge-timeout" ,
Usage : "how many seconds before timeout when fetching the Woodpecker configuration from a Forge" ,
Value : time . Second * 3 ,
} ,
2024-05-13 17:43:45 +00:00
& cli . UintFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_FORGE_RETRY" ) ,
2024-05-13 17:43:45 +00:00
Name : "forge-retry" ,
Usage : "How many retries of fetching the Woodpecker configuration from a forge are done before we fail" ,
Value : 3 ,
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_MEM_SWAP" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-mem-swap" ,
2024-06-04 06:30:54 +00:00
Usage : "maximum memory used for swap in bytes" ,
2021-10-27 19:03:14 +00:00
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_MEM" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-mem" ,
Usage : "maximum memory allowed in bytes" ,
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_SHM_SIZE" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-shm-size" ,
Usage : "docker compose /dev/shm allowed in bytes" ,
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_CPU_QUOTA" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-cpu-quota" ,
Usage : "impose a cpu quota" ,
} ,
2024-07-17 23:26:35 +00:00
& cli . IntFlag {
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_CPU_SHARES" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-cpu-shares" ,
Usage : "change the cpu shares" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_LIMIT_CPU_SET" ) ,
2021-10-27 19:03:14 +00:00
Name : "limit-cpu-set" ,
Usage : "set the cpus allowed to execute containers" ,
2021-05-31 12:35:47 +00:00
} ,
//
2024-04-16 06:04:55 +00:00
& cli . StringFlag {
Name : "forge-url" ,
Usage : "url of the forge" ,
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_FORGE_URL" , "WOODPECKER_GITHUB_URL" , "WOODPECKER_GITLAB_URL" , "WOODPECKER_GITEA_URL" , "WOODPECKER_FORGEJO_URL" , "WOODPECKER_BITBUCKET_URL" , "WOODPECKER_BITBUCKET_DC_URL" ) ,
} ,
& cli . StringFlag {
Sources : cli . NewValueSourceChain (
cli . File ( getFirstNonEmptyEnvVar (
"WOODPECKER_FORGE_CLIENT_FILE" ,
"WOODPECKER_GITHUB_CLIENT_FILE" ,
"WOODPECKER_GITLAB_CLIENT_FILE" ,
"WOODPECKER_GITEA_CLIENT_FILE" ,
"WOODPECKER_FORGEJO_CLIENT_FILE" ,
"WOODPECKER_BITBUCKET_CLIENT_FILE" ,
"WOODPECKER_BITBUCKET_DC_CLIENT_ID_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_FORGE_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_GITHUB_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_GITLAB_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_GITEA_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_FORGEJO_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_CLIENT" ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_DC_CLIENT_ID" ) ) ,
Name : "forge-oauth-client" ,
Usage : "oauth2 client id" ,
} ,
& cli . StringFlag {
Sources : cli . NewValueSourceChain (
cli . File ( getFirstNonEmptyEnvVar (
"WOODPECKER_FORGE_SECRET_FILE" ,
"WOODPECKER_GITHUB_SECRET_FILE" ,
"WOODPECKER_GITLAB_SECRET_FILE" ,
"WOODPECKER_GITEA_SECRET_FILE" ,
"WOODPECKER_FORGEJO_SECRET_FILE" ,
"WOODPECKER_BITBUCKET_SECRET_FILE" ,
"WOODPECKER_BITBUCKET_DC_CLIENT_SECRET_FILE" ,
) ) ,
cli . EnvVar ( "WOODPECKER_FORGE_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_GITHUB_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_GITLAB_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_GITEA_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_FORGEJO_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_SECRET" ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_DC_CLIENT_SECRET" ) ) ,
Name : "forge-oauth-secret" ,
Usage : "oauth2 client secret" ,
2021-10-27 19:03:14 +00:00
} ,
2024-04-16 06:04:55 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Name : "forge-skip-verify" ,
Usage : "skip ssl verification" ,
Sources : cli . EnvVars (
"WOODPECKER_FORGE_SKIP_VERIFY" ,
"WOODPECKER_GITHUB_SKIP_VERIFY" ,
"WOODPECKER_GITLAB_SKIP_VERIFY" ,
"WOODPECKER_GITEA_SKIP_VERIFY" ,
"WOODPECKER_FORGEJO_SKIP_VERIFY" ,
"WOODPECKER_BITBUCKET_SKIP_VERIFY" ) ,
} ,
& cli . StringFlag {
2024-07-23 12:25:39 +00:00
Sources : cli . EnvVars ( "WOODPECKER_EXPERT_FORGE_OAUTH_HOST" ) ,
2024-05-15 13:45:08 +00:00
Name : "forge-oauth-host" ,
2024-06-04 06:30:54 +00:00
Usage : "!!!for experts!!! fully qualified public forge url. Use it if your forge url WOODPECKER_FORGE_URL or WOODPECKER_GITEA_URL, ... isn't a public url. Format: <scheme>://<host>[/<prefix path>]" ,
2024-05-15 13:45:08 +00:00
} ,
2024-04-16 06:04:55 +00:00
//
// Addon
//
2021-10-27 19:03:14 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ADDON_FORGE" ) ,
2024-04-16 06:04:55 +00:00
Name : "addon-forge" ,
Usage : "path to forge addon executable" ,
} ,
//
// GitHub
//
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GITHUB" ) ,
2024-04-16 06:04:55 +00:00
Name : "github" ,
Usage : "github driver is enabled" ,
2021-10-27 19:03:14 +00:00
} ,
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GITHUB_MERGE_REF" ) ,
2021-10-27 19:03:14 +00:00
Name : "github-merge-ref" ,
Usage : "github pull requests use merge ref" ,
Value : true ,
} ,
2024-03-29 13:36:48 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GITHUB_PUBLIC_ONLY" ) ,
2024-03-29 13:36:48 +00:00
Name : "github-public-only" ,
Usage : "github tokens should only get access to public repos" ,
Value : false ,
} ,
2022-01-31 14:38:00 +00:00
//
// Gitea
//
2021-10-27 19:03:14 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GITEA" ) ,
2021-10-27 19:03:14 +00:00
Name : "gitea" ,
Usage : "gitea driver is enabled" ,
} ,
2022-01-31 14:38:00 +00:00
//
2024-06-01 09:23:19 +00:00
// Forgejo
//
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_FORGEJO" ) ,
2024-06-01 09:23:19 +00:00
Name : "forgejo" ,
Usage : "forgejo driver is enabled" ,
} ,
//
2022-01-31 14:38:00 +00:00
// Bitbucket
//
2021-10-27 19:03:14 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_BITBUCKET" ) ,
2021-10-27 19:03:14 +00:00
Name : "bitbucket" ,
Usage : "bitbucket driver is enabled" ,
} ,
2022-01-31 14:38:00 +00:00
//
// Gitlab
//
2021-10-27 19:03:14 +00:00
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_GITLAB" ) ,
2021-10-27 19:03:14 +00:00
Name : "gitlab" ,
Usage : "gitlab driver is enabled" ,
} ,
2022-01-31 14:38:00 +00:00
//
2024-02-20 14:58:02 +00:00
// Bitbucket DataCenter/Server (previously Stash)
//
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_BITBUCKET_DC" ) ,
2024-02-20 14:58:02 +00:00
Name : "bitbucket-dc" ,
Usage : "Bitbucket DataCenter/Server driver is enabled" ,
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_BITBUCKET_DC_GIT_USERNAME_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_DC_GIT_USERNAME" ) ) ,
Name : "bitbucket-dc-git-username" ,
Usage : "Bitbucket DataCenter/Server service account username" ,
2024-02-20 14:58:02 +00:00
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_BITBUCKET_DC_GIT_PASSWORD_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_BITBUCKET_DC_GIT_PASSWORD" ) ) ,
Name : "bitbucket-dc-git-password" ,
Usage : "Bitbucket DataCenter/Server service account password" ,
2024-02-20 14:58:02 +00:00
} ,
//
2021-12-13 19:22:09 +00:00
// development flags
2022-01-31 14:38:00 +00:00
//
2021-12-13 19:22:09 +00:00
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_DEV_WWW_PROXY" ) ,
2021-12-13 19:22:09 +00:00
Name : "www-proxy" ,
Usage : "serve the website by using a proxy (used for development)" ,
Hidden : true ,
} ,
2024-05-15 13:45:08 +00:00
//
// expert flags
//
& cli . StringFlag {
2024-07-25 15:17:09 +00:00
Sources : cli . EnvVars ( "WOODPECKER_EXPERT_WEBHOOK_HOST" ) ,
2024-05-15 13:45:08 +00:00
Name : "server-webhook-host" ,
2024-06-04 06:30:54 +00:00
Usage : "!!!for experts!!! fully qualified woodpecker server url called by forge's webhooks. Format: <scheme>://<host>[/<prefix path>]" ,
2024-05-15 13:45:08 +00:00
} ,
2022-01-31 14:38:00 +00:00
//
2023-01-12 19:59:07 +00:00
// secrets encryption in DB
//
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . NewValueSourceChain (
cli . File ( os . Getenv ( "WOODPECKER_ENCRYPTION_KEY_FILE" ) ) ,
cli . EnvVar ( "WOODPECKER_ENCRYPTION_KEY" ) ) ,
Name : "encryption-raw-key" ,
Usage : "Raw encryption key" ,
2023-01-12 19:59:07 +00:00
} ,
& cli . StringFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ENCRYPTION_TINK_KEYSET_FILE" ) ,
2023-01-12 19:59:07 +00:00
Name : "encryption-tink-keyset" ,
Usage : "Google tink AEAD-compatible keyset file to encrypt secrets in DB" ,
} ,
& cli . BoolFlag {
2024-07-17 23:26:35 +00:00
Sources : cli . EnvVars ( "WOODPECKER_ENCRYPTION_DISABLE" ) ,
2023-01-12 19:59:07 +00:00
Name : "encryption-disable-flag" ,
Usage : "Flag to decrypt all encrypted data and disable encryption on server" ,
} ,
2023-12-31 22:29:56 +00:00
} , logger . GlobalLoggerFlags ... )
2024-02-26 19:12:41 +00:00
// If woodpecker is running inside a container the default value for
// the datasource is different from running outside a container.
func datasourceDefaultValue ( ) string {
_ , found := os . LookupEnv ( "WOODPECKER_IN_CONTAINER" )
if found {
return "/var/lib/woodpecker/woodpecker.sqlite"
}
return "woodpecker.sqlite"
}
2024-05-27 09:22:31 +00:00
2024-07-17 23:26:35 +00:00
func getFirstNonEmptyEnvVar ( envVars ... string ) string {
2024-05-27 09:22:31 +00:00
for _ , envVar := range envVars {
val := os . Getenv ( envVar )
if val != "" {
return val
}
}
return ""
}