aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEarl Warren2023-01-12 22:56:56 +0100
committerLoïc Dachary2023-03-12 17:03:34 +0100
commit6429b20f4a1561480a4a0c214cc571f79c313be0 (patch)
treed5fe8d4894aad16d1f2b2ecda9cae4e30d0e3d25
parentc1c3d1f0e63b880baa32d285d3eba6034137b45a (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.yml8
-rw-r--r--contrib/environment-to-ini/environment-to-ini.go48
-rw-r--r--contrib/environment-to-ini/environment-to-ini_test.go21
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, "")
+}