From 671ef86e6dcccb168380033c7a8ec09dfa135f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Dachary?= Date: Fri, 24 Feb 2023 13:38:29 +0100 Subject: [PATCH] [BRANDING] alias {FORGEJO,GITEA}_{CUSTOM,WORK_DIR} FORGEJO_* environment variables are set to the corresponding GITEA_* variable when the cli starts. This approach is intended to minimize the conflicts on rebase. All occurences of GITEA_* are left untouched in the codebase and they are only changed to FORGEJO_* if exposed to the user. (cherry picked from commit e466f9d10e145a3ed750f0c86cfcafad5f141ea8) (cherry picked from commit e33e95931b0d91c41433db68ddb19a8724b8ed80) (cherry picked from commit 2cfc6519b7cbc758f8322fd7f7b84dfc6d14ae73) (cherry picked from commit af8864373a65441c817dad1c3b696157c4024a7e) (cherry picked from commit a0550ff3391f0575b72c3d0d1fdf1fcd9b51e4d6) (cherry picked from commit 24dc0a5191a26fac0aef6b3a53fd58b9185edc88) (cherry picked from commit e255eea2b48ad39eeb3eae227ca0d4fd4b667d99) (cherry picked from commit 0c4f5afa7a37e6b805efb452b9d4166f7e2cec61) (cherry picked from commit 42fce708d05d616ebbdfb2eecf384ad2fdaa1d7a) (cherry picked from commit e7278c3c22b656e5730ec2ba0c1b4ee2ef6627ce) (cherry picked from commit 0fb9ed7e0eb5db59ab5b574d3d69b4b161f50b0b) (cherry picked from commit a98308aa4d6659f46f7f69996167f9c2f3c4e859) (cherry picked from commit b8695fcbe04792cb75acb62fdf9c6dee237e8365) (cherry picked from commit 4aee8719f57b40f8645905c10ba8966b29052295) (cherry picked from commit 1c503c1ba7414fe0b960187bcc370b44c536ec7f) (cherry picked from commit cf1ed8551e6a8abc56d3ed45b65b0e6ca4e1e891) (cherry picked from commit c52459b088cd52bf3b11b68cadf95d738fd09269) (cherry picked from commit 92cac277b28f9b68d3346f5dd463bc41c1952af6) (cherry picked from commit 2c744f11189ca76de62be908069500d7dbfc2a8f) (cherry picked from commit 989a98a8c52342fb146938c41c1db9a0818013f4) (cherry picked from commit 9cf7052bd4c126618833487134cb39dbe6d58297) (cherry picked from commit a13c9667e04555d38106bf7e63d57b05002b20ee) Conflicts: main.go https://codeberg.org/forgejo/forgejo/pulls/1216 (cherry picked from commit a9c3cf060d76ece0664b05f03690bd3a7d8f7089) (cherry picked from commit eb6d904b23bce2bc02ea96db0459b7b7a8e55cae) (cherry picked from commit fd4878e4877ced8a65cb348c69220b688556a214) (cherry picked from commit cc2cab92410e13abdd88c6ae8acfd17ee6e7fb0a) (cherry picked from commit be523c63dbc7d3dc1f852bb7aee045cf2d9f74fa) (cherry picked from commit 254d1a2f9a9751cb2e0d9475f2f6c7579120cd32) (cherry picked from commit 1eecf4200e2c073c13675f769bd1254fdcc4079f) (cherry picked from commit a01f5c3475991ae2dfceaa17ac3dd7adccce3d5f) (cherry picked from commit b1ba7ce32131a4868a734fec1aef64bd96150fbd) (cherry picked from commit eddfd96beb24604179ac80175e717c334cdb6d75) (cherry picked from commit c9c9b7e49bd298b4e1d1c374a8829e434f140d6e) (cherry picked from commit ad7e871779b18b8265ddf4c06566cff90f494c89) (cherry picked from commit 9073ed215bf33535a3764b834e2e16690af72679) (cherry picked from commit a827fdadd391159cd928e767b08e9d04473ed145) (cherry picked from commit 39e66246cd75800f26bdde94b421893ad2701183) (cherry picked from commit 46d1c778a2fd5030d7ad48b27ffcf18f04236e54) (cherry picked from commit a65bc0b75dfb03fe474ad47003aceb7c751d890c) (cherry picked from commit 5f901e967161a1768b8d1da1edee23e1eb2f8d79) Conflicts: cmd/main.go https://codeberg.org/forgejo/forgejo/pulls/1976 (cherry picked from commit a0e017d206ade5de9dacb7794052dde38aab3616) (cherry picked from commit e6e24b96312ee9090865f685e299b2073bb918f8) (cherry picked from commit 00667d869b593fe50c1236f902c5656b5f4265c7) (cherry picked from commit a9c5bc38e9960c06807c6464c02876b21813e79c) --- cmd/main.go | 8 ++-- main.go | 9 ++++ modules/setting/path.go | 18 ++++++- modules/setting/path_test.go | 92 ++++++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 5 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index baba758eae..6e3d46cc35 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -147,10 +147,10 @@ func NewMainApp(version, versionExtra string) *cli.App { func innerNewMainApp(version, versionExtra string, subCmdsStandaloneArgs, subCmdWithConfigArgs []*cli.Command) *cli.App { app := cli.NewApp() - app.Name = "Gitea" - app.HelpName = "gitea" - app.Usage = "A painless self-hosted Git service" - app.Description = `Gitea program contains "web" and other subcommands. If no subcommand is given, it starts the web server by default. Use "web" subcommand for more web server arguments, use other subcommands for other purposes.` + app.HelpName = "forgejo" + app.Name = "Forgejo" + app.Usage = "Beyond coding. We forge." + app.Description = `By default, forgejo will start serving using the web-server with no argument, which can alternatively be run by running the subcommand "web".` app.Version = version + versionExtra app.EnableBashCompletion = true diff --git a/main.go b/main.go index 700b75d748..56f97caf27 100644 --- a/main.go +++ b/main.go @@ -40,7 +40,16 @@ func init() { setting.AppStartTime = time.Now().UTC() } +func forgejoEnv() { + for _, k := range []string{"CUSTOM", "WORK_DIR"} { + if v, ok := os.LookupEnv("FORGEJO_" + k); ok { + os.Setenv("GITEA_"+k, v) + } + } +} + func main() { + forgejoEnv() cli.OsExiter = func(code int) { log.GetManager().Close() os.Exit(code) diff --git a/modules/setting/path.go b/modules/setting/path.go index 0fdc305aa1..85d0e06302 100644 --- a/modules/setting/path.go +++ b/modules/setting/path.go @@ -129,6 +129,14 @@ func InitWorkPathAndCfgProvider(getEnvFn func(name string) string, args ArgWorkP } } + envWorkPath = getEnvFn("FORGEJO_WORK_DIR") + if envWorkPath != "" { + tmpWorkPath.Set(envWorkPath) + if !filepath.IsAbs(tmpWorkPath.Value) { + log.Fatal("FORGEJO_WORK_DIR (work path) must be absolute path") + } + } + envCustomPath := getEnvFn("GITEA_CUSTOM") if envCustomPath != "" { tmpCustomPath.Set(envCustomPath) @@ -136,6 +144,14 @@ func InitWorkPathAndCfgProvider(getEnvFn func(name string) string, args ArgWorkP log.Fatal("GITEA_CUSTOM (custom path) must be absolute path") } } + + envCustomPath = getEnvFn("FORGEJO_CUSTOM") + if envCustomPath != "" { + tmpCustomPath.Set(envCustomPath) + if !filepath.IsAbs(tmpCustomPath.Value) { + log.Fatal("FORGEJO_CUSTOM (custom path) must be absolute path") + } + } } readFromArgs := func() { @@ -180,7 +196,7 @@ func InitWorkPathAndCfgProvider(getEnvFn func(name string) string, args ArgWorkP log.Fatal("WORK_PATH in %q must be absolute path", configWorkPath) } configWorkPath = filepath.Clean(configWorkPath) - if tmpWorkPath.Value != "" && (getEnvFn("GITEA_WORK_DIR") != "" || args.WorkPath != "") { + if tmpWorkPath.Value != "" && (getEnvFn("GITEA_WORK_DIR") != "" || getEnvFn("FORGEJO_WORK_DIR") != "" || args.WorkPath != "") { fi1, err1 := os.Stat(tmpWorkPath.Value) fi2, err2 := os.Stat(configWorkPath) if err1 != nil || err2 != nil || !os.SameFile(fi1, fi2) { diff --git a/modules/setting/path_test.go b/modules/setting/path_test.go index fc6a2116dc..4508bae50f 100644 --- a/modules/setting/path_test.go +++ b/modules/setting/path_test.go @@ -60,6 +60,22 @@ func TestInitWorkPathAndCommonConfig(t *testing.T) { assert.Equal(t, fp(dirXxx, "custom/conf/app.ini"), CustomConf) }) + t.Run("WorkDir(env)", func(t *testing.T) { + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_WORK_DIR": dirBar}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirBar, AppWorkPath) + assert.Equal(t, fp(dirBar, "custom"), CustomPath) + assert.Equal(t, fp(dirBar, "custom/conf/app.ini"), CustomConf) + }) + + t.Run("WorkDir(env,arg)", func(t *testing.T) { + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_WORK_DIR": dirBar}.Getenv, ArgWorkPathAndCustomConf{WorkPath: dirXxx}) + assert.Equal(t, dirXxx, AppWorkPath) + assert.Equal(t, fp(dirXxx, "custom"), CustomPath) + assert.Equal(t, fp(dirXxx, "custom/conf/app.ini"), CustomConf) + }) + t.Run("CustomPath(env)", func(t *testing.T) { testInit(dirFoo, "", "") InitWorkPathAndCommonConfig(envVars{"GITEA_CUSTOM": fp(dirBar, "custom1")}.Getenv, ArgWorkPathAndCustomConf{}) @@ -76,6 +92,22 @@ func TestInitWorkPathAndCommonConfig(t *testing.T) { assert.Equal(t, fp(dirFoo, "custom2/conf/app.ini"), CustomConf) }) + t.Run("CustomPath(env)", func(t *testing.T) { + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_CUSTOM": fp(dirBar, "custom1")}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirFoo, AppWorkPath) + assert.Equal(t, fp(dirBar, "custom1"), CustomPath) + assert.Equal(t, fp(dirBar, "custom1/conf/app.ini"), CustomConf) + }) + + t.Run("CustomPath(env,arg)", func(t *testing.T) { + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_CUSTOM": fp(dirBar, "custom1")}.Getenv, ArgWorkPathAndCustomConf{CustomPath: "custom2"}) + assert.Equal(t, dirFoo, AppWorkPath) + assert.Equal(t, fp(dirFoo, "custom2"), CustomPath) + assert.Equal(t, fp(dirFoo, "custom2/conf/app.ini"), CustomConf) + }) + t.Run("CustomConf", func(t *testing.T) { testInit(dirFoo, "", "") InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{CustomConf: "app1.ini"}) @@ -115,6 +147,32 @@ func TestInitWorkPathAndCommonConfig(t *testing.T) { assert.True(t, AppWorkPathMismatch) }) + t.Run("CustomConfOverrideWorkPath", func(t *testing.T) { + iniWorkPath := fp(tmpDir, "app-workpath.ini") + _ = os.WriteFile(iniWorkPath, []byte("WORK_PATH="+dirXxx), 0o644) + + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{CustomConf: iniWorkPath}) + assert.Equal(t, dirXxx, AppWorkPath) + assert.Equal(t, fp(dirXxx, "custom"), CustomPath) + assert.Equal(t, iniWorkPath, CustomConf) + assert.False(t, AppWorkPathMismatch) + + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_WORK_DIR": dirBar}.Getenv, ArgWorkPathAndCustomConf{CustomConf: iniWorkPath}) + assert.Equal(t, dirXxx, AppWorkPath) + assert.Equal(t, fp(dirXxx, "custom"), CustomPath) + assert.Equal(t, iniWorkPath, CustomConf) + assert.True(t, AppWorkPathMismatch) + + testInit(dirFoo, "", "") + InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{WorkPath: dirBar, CustomConf: iniWorkPath}) + assert.Equal(t, dirXxx, AppWorkPath) + assert.Equal(t, fp(dirXxx, "custom"), CustomPath) + assert.Equal(t, iniWorkPath, CustomConf) + assert.True(t, AppWorkPathMismatch) + }) + t.Run("Builtin", func(t *testing.T) { testInit(dirFoo, dirBar, dirXxx) InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{}) @@ -148,4 +206,38 @@ func TestInitWorkPathAndCommonConfig(t *testing.T) { assert.Equal(t, fp(dirXxx, "custom1"), CustomPath) assert.Equal(t, iniWorkPath, CustomConf) }) + + t.Run("Builtin", func(t *testing.T) { + testInit(dirFoo, dirBar, dirXxx) + InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirFoo, AppWorkPath) + assert.Equal(t, dirBar, CustomPath) + assert.Equal(t, dirXxx, CustomConf) + + testInit(dirFoo, "custom1", "cfg.ini") + InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirFoo, AppWorkPath) + assert.Equal(t, fp(dirFoo, "custom1"), CustomPath) + assert.Equal(t, fp(dirFoo, "custom1/cfg.ini"), CustomConf) + + testInit(dirFoo, "custom1", "cfg.ini") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_WORK_DIR": dirYyy}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirYyy, AppWorkPath) + assert.Equal(t, fp(dirYyy, "custom1"), CustomPath) + assert.Equal(t, fp(dirYyy, "custom1/cfg.ini"), CustomConf) + + testInit(dirFoo, "custom1", "cfg.ini") + InitWorkPathAndCommonConfig(envVars{"FORGEJO_CUSTOM": dirYyy}.Getenv, ArgWorkPathAndCustomConf{}) + assert.Equal(t, dirFoo, AppWorkPath) + assert.Equal(t, dirYyy, CustomPath) + assert.Equal(t, fp(dirYyy, "cfg.ini"), CustomConf) + + iniWorkPath := fp(tmpDir, "app-workpath.ini") + _ = os.WriteFile(iniWorkPath, []byte("WORK_PATH="+dirXxx), 0o644) + testInit(dirFoo, "custom1", "cfg.ini") + InitWorkPathAndCommonConfig(envVars{}.Getenv, ArgWorkPathAndCustomConf{CustomConf: iniWorkPath}) + assert.Equal(t, dirXxx, AppWorkPath) + assert.Equal(t, fp(dirXxx, "custom1"), CustomPath) + assert.Equal(t, iniWorkPath, CustomConf) + }) }