mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	[BRANDING] parse FORGEJO__* in the container environment
(cherry picked from commitb075991747) (cherry picked from commitda3f76228e) (cherry picked from commit20d196e74f) (cherry picked from commit0bf8b1824e) (cherry picked from commit655bb770a7) (cherry picked from commitd69d5c2c46) (cherry picked from commit00b55e5a53) (cherry picked from commit456121fd8a) (cherry picked from commit9716a158e4) (cherry picked from commit7d60a6f511) (cherry picked from commitd32a6d9437)
This commit is contained in:
		
					parent
					
						
							
								d2551dc9b7
							
						
					
				
			
			
				commit
				
					
						ee1de38527
					
				
			
		
					 3 changed files with 23 additions and 14 deletions
				
			
		|  | @ -14,7 +14,7 @@ import ( | |||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	EnvConfigKeyPrefixGitea = "GITEA__" | ||||
| 	EnvConfigKeyPrefixGitea = "^(FORGEJO|GITEA)__" | ||||
| 	EnvConfigKeySuffixFile  = "__FILE" | ||||
| ) | ||||
| 
 | ||||
|  | @ -97,19 +97,21 @@ func decodeEnvSectionKey(encoded string) (ok bool, section, key string) { | |||
| 
 | ||||
| // decodeEnvironmentKey decode the environment key to section and key | ||||
| // The environment key is in the form of GITEA__SECTION__KEY or GITEA__SECTION__KEY__FILE | ||||
| func decodeEnvironmentKey(prefixGitea, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) { | ||||
| 	if !strings.HasPrefix(envKey, prefixGitea) { | ||||
| 		return false, "", "", false | ||||
| 	} | ||||
| func decodeEnvironmentKey(prefixRegexp *regexp.Regexp, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) { | ||||
| 	if strings.HasSuffix(envKey, suffixFile) { | ||||
| 		useFileValue = true | ||||
| 		envKey = envKey[:len(envKey)-len(suffixFile)] | ||||
| 	} | ||||
| 	ok, section, key = decodeEnvSectionKey(envKey[len(prefixGitea):]) | ||||
| 	loc := prefixRegexp.FindStringIndex(envKey) | ||||
| 	if loc == nil { | ||||
| 		return false, "", "", false | ||||
| 	} | ||||
| 	ok, section, key = decodeEnvSectionKey(envKey[loc[1]:]) | ||||
| 	return ok, section, key, useFileValue | ||||
| } | ||||
| 
 | ||||
| func EnvironmentToConfig(cfg ConfigProvider, envs []string) (changed bool) { | ||||
| 	prefixRegexp := regexp.MustCompile(EnvConfigKeyPrefixGitea) | ||||
| 	for _, kv := range envs { | ||||
| 		idx := strings.IndexByte(kv, '=') | ||||
| 		if idx < 0 { | ||||
|  | @ -119,7 +121,7 @@ func EnvironmentToConfig(cfg ConfigProvider, envs []string) (changed bool) { | |||
| 		// parse the environment variable to config section name and key name | ||||
| 		envKey := kv[:idx] | ||||
| 		envValue := kv[idx+1:] | ||||
| 		ok, sectionName, keyName, useFileValue := decodeEnvironmentKey(EnvConfigKeyPrefixGitea, EnvConfigKeySuffixFile, envKey) | ||||
| 		ok, sectionName, keyName, useFileValue := decodeEnvironmentKey(prefixRegexp, EnvConfigKeySuffixFile, envKey) | ||||
| 		if !ok { | ||||
| 			continue | ||||
| 		} | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ package setting | |||
| 
 | ||||
| import ( | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
|  | @ -33,7 +34,7 @@ func TestDecodeEnvSectionKey(t *testing.T) { | |||
| } | ||||
| 
 | ||||
| func TestDecodeEnvironmentKey(t *testing.T) { | ||||
| 	prefix := "GITEA__" | ||||
| 	prefix := regexp.MustCompile(EnvConfigKeyPrefixGitea) | ||||
| 	suffix := "__FILE" | ||||
| 
 | ||||
| 	ok, section, key, file := decodeEnvironmentKey(prefix, suffix, "SEC__KEY") | ||||
|  | @ -60,6 +61,12 @@ func TestDecodeEnvironmentKey(t *testing.T) { | |||
| 	assert.Equal(t, "KEY", key) | ||||
| 	assert.False(t, file) | ||||
| 
 | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "FORGEJO__SEC__KEY") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "sec", section) | ||||
| 	assert.Equal(t, "KEY", key) | ||||
| 	assert.False(t, file) | ||||
| 
 | ||||
| 	// with "__FILE" suffix, it doesn't support to write "[sec].FILE" to config (no such key FILE is used in Gitea) | ||||
| 	// but it could be fixed in the future by adding a new suffix like "__VALUE" (no such key VALUE is used in Gitea either) | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "GITEA__SEC__FILE") | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue