diff options
author | Earl Warren | 2023-01-12 22:56:56 +0100 |
---|---|---|
committer | Loïc Dachary | 2023-03-12 17:03:34 +0100 |
commit | 6429b20f4a1561480a4a0c214cc571f79c313be0 (patch) | |
tree | d5fe8d4894aad16d1f2b2ecda9cae4e30d0e3d25 | |
parent | c1c3d1f0e63b880baa32d285d3eba6034137b45a (diff) |
[BRANDING] parse FORGEJO__* in the container environment
Add the FORGEJO__ prefix as equivalent to GITEA__ when interpreted by
environment-to-ini. It is used when running the Forgejo container like
so:
docker run --name forgejo -e FORGEJO__security__INSTALL_LOCK=true \
-d codeberg.org/forgejo/forgejo:1.18
Signed-off-by: Earl Warren <contact@earl-warren.org>
(cherry picked from commit 6cd61e2ab701ae9236ff9a68520ee1e2d03e6193)
(cherry picked from commit 62cae8cc6a6ddc9e5bb066c81834b75cef3be29f)
(cherry picked from commit aee1afc5097531b2740b2aa8ef4aef745e7a1be0)
(cherry picked from commit 6ba563cd9b09d012a804f3f438c5ae4e38ca6ced)
-rw-r--r-- | .woodpecker/testing-amd64.yml | 8 | ||||
-rw-r--r-- | contrib/environment-to-ini/environment-to-ini.go | 48 | ||||
-rw-r--r-- | contrib/environment-to-ini/environment-to-ini_test.go | 21 |
3 files changed, 55 insertions, 22 deletions
diff --git a/.woodpecker/testing-amd64.yml b/.woodpecker/testing-amd64.yml index 340ee5573..94fd9e184 100644 --- a/.woodpecker/testing-amd64.yml +++ b/.woodpecker/testing-amd64.yml @@ -75,6 +75,14 @@ pipeline: commands: - ./build/test-env-prepare.sh + environment-to-ini: + image: *golang_image + environment: + GOPROXY_OVERRIDE: *goproxy_override + commands: + - *goproxy_setup + - go test contrib/environment-to-ini/environment-to-ini.go contrib/environment-to-ini/environment-to-ini_test.go + build: image: *test_image environment: diff --git a/contrib/environment-to-ini/environment-to-ini.go b/contrib/environment-to-ini/environment-to-ini.go index b502c15ce..1b8b63faa 100644 --- a/contrib/environment-to-ini/environment-to-ini.go +++ b/contrib/environment-to-ini/environment-to-ini.go @@ -1,3 +1,4 @@ +// Copyright 2023 The Forgejo Authors. All rights reserved. // Copyright 2019 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT @@ -18,17 +19,17 @@ import ( ) // EnvironmentPrefix environment variables prefixed with this represent ini values to write -const EnvironmentPrefix = "GITEA" +const prefixRegexpString = "^(FORGEJO|GITEA)" func main() { app := cli.NewApp() app.Name = "environment-to-ini" app.Usage = "Use provided environment to update configuration ini" - app.Description = `As a helper to allow docker users to update the gitea configuration + app.Description = `As a helper to allow docker users to update the forgejo configuration through the environment, this command allows environment variables to be mapped to values in the ini. - Environment variables of the form "GITEA__SECTION_NAME__KEY_NAME" + Environment variables of the form "FORGEJO__SECTION_NAME__KEY_NAME" will be mapped to the ini section "[section_name]" and the key "KEY_NAME" with the value as provided. @@ -46,9 +47,8 @@ func main() { ... """ - You would set the environment variables: "GITEA__LOG_0x2E_CONSOLE__COLORIZE=false" - and "GITEA__LOG_0x2E_CONSOLE__STDERR=false". Other examples can be found - on the configuration cheat sheet.` + You would set the environment variables: "FORGEJO__LOG_0x2E_CONSOLE__COLORIZE=false" + and "FORGEJO__LOG_0x2E_CONSOLE__STDERR=false".` app.Flags = []cli.Flag{ cli.StringFlag{ Name: "custom-path, C", @@ -76,7 +76,7 @@ func main() { }, cli.StringFlag{ Name: "prefix, p", - Value: EnvironmentPrefix, + Value: prefixRegexpString, Usage: "Environment prefix to look for - will be suffixed by __ (2 underscores)", }, } @@ -89,6 +89,19 @@ func main() { } } +func splitEnvironmentVariable(prefixRegexp *regexp.Regexp, kv string) (string, string) { + idx := strings.IndexByte(kv, '=') + if idx < 0 { + return "", "" + } + k := kv[:idx] + loc := prefixRegexp.FindStringIndex(k) + if loc == nil { + return "", "" + } + return k[loc[1]:], kv[idx+1:] +} + func runEnvironmentToIni(c *cli.Context) error { providedCustom := c.String("custom-path") providedConf := c.String("config") @@ -111,19 +124,13 @@ func runEnvironmentToIni(c *cli.Context) error { changed := false - prefix := c.String("prefix") + "__" + prefixRegexp := regexp.MustCompile(c.String("prefix") + "__") for _, kv := range os.Environ() { - idx := strings.IndexByte(kv, '=') - if idx < 0 { + eKey, value := splitEnvironmentVariable(prefixRegexp, kv) + if eKey == "" { continue } - eKey := kv[:idx] - value := kv[idx+1:] - if !strings.HasPrefix(eKey, prefix) { - continue - } - eKey = eKey[len(prefix):] sectionName, keyName := DecodeSectionKey(eKey) if len(keyName) == 0 { continue @@ -163,14 +170,11 @@ func runEnvironmentToIni(c *cli.Context) error { } if c.Bool("clear") { for _, kv := range os.Environ() { - idx := strings.IndexByte(kv, '=') - if idx < 0 { + eKey, _ := splitEnvironmentVariable(prefixRegexp, kv) + if eKey == "" { continue } - eKey := kv[:idx] - if strings.HasPrefix(eKey, prefix) { - _ = os.Unsetenv(eKey) - } + _ = os.Unsetenv(eKey) } } return nil diff --git a/contrib/environment-to-ini/environment-to-ini_test.go b/contrib/environment-to-ini/environment-to-ini_test.go new file mode 100644 index 000000000..6abbb67ef --- /dev/null +++ b/contrib/environment-to-ini/environment-to-ini_test.go @@ -0,0 +1,21 @@ +// Copyright 2023 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package main + +import ( + "regexp" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_splitEnvironmentVariable(t *testing.T) { + prefixRegexp := regexp.MustCompile(prefixRegexpString + "__") + k, v := splitEnvironmentVariable(prefixRegexp, "FORGEJO__KEY=VALUE") + assert.Equal(t, k, "KEY") + assert.Equal(t, v, "VALUE") + k, v = splitEnvironmentVariable(prefixRegexp, "nothing=interesting") + assert.Equal(t, k, "") + assert.Equal(t, v, "") +} |