mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-08-22 07:31:52 +02:00
(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
) (cherry picked from commitee1de38527
) (cherry picked from commit54e7799d13
) (cherry picked from commit4f04da7ab7
) (cherry picked from commit0d39a0a520
) (cherry picked from commit7d8ae8279f
) (cherry picked from commit76b6770b73
) (cherry picked from commit9bc0d96064
) Conflicts: contrib/environment-to-ini/environment-to-ini.go https://codeberg.org/forgejo/forgejo/pulls/1769 (cherry picked from commite21bf9b144
) (cherry picked from commit96e501c5f0
) (cherry picked from commit466a66a1f6
) (cherry picked from commit7814cf700a
) (cherry picked from commit4d12344871
) (cherry picked from commitfad4cf84c3
) (cherry picked from commit7ad89400ee
) (cherry picked from commitec91140447
) (cherry picked from commit295a7f4487
) (cherry picked from commit66163a5dcf
) (cherry picked from commit9e06f57269
)
112 lines
3.1 KiB
Go
112 lines
3.1 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
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 forgejo configuration
|
|
through the environment, this command allows environment variables to
|
|
be mapped to values in the ini.
|
|
|
|
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.
|
|
|
|
Environment variables of the form "FORGEJO__SECTION_NAME__KEY_NAME__FILE"
|
|
will be mapped to the ini section "[section_name]" and the key
|
|
"KEY_NAME" with the value loaded from the specified file.
|
|
|
|
Environment variables are usually restricted to a reduced character
|
|
set "0-9A-Z_" - in order to allow the setting of sections with
|
|
characters outside of that set, they should be escaped as following:
|
|
"_0X2E_" for ".". The entire section and key names can be escaped as
|
|
a UTF8 byte string if necessary. E.g. to configure:
|
|
|
|
"""
|
|
...
|
|
[log.console]
|
|
COLORIZE=false
|
|
STDERR=true
|
|
...
|
|
"""
|
|
|
|
You would set the environment variables: "FORGEJO__LOG_0x2E_CONSOLE__COLORIZE=false"
|
|
and "FORGEJO__LOG_0x2E_CONSOLE__STDERR=false". Other examples can be found
|
|
on the configuration cheat sheet.`
|
|
app.Flags = []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "custom-path",
|
|
Aliases: []string{"C"},
|
|
Value: setting.CustomPath,
|
|
Usage: "Custom path file path",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "config",
|
|
Aliases: []string{"c"},
|
|
Value: setting.CustomConf,
|
|
Usage: "Custom configuration file path",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "work-path",
|
|
Aliases: []string{"w"},
|
|
Value: setting.AppWorkPath,
|
|
Usage: "Set the forgejo working path",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "out",
|
|
Aliases: []string{"o"},
|
|
Value: "",
|
|
Usage: "Destination file to write to",
|
|
},
|
|
}
|
|
app.Action = runEnvironmentToIni
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
log.Fatal("Failed to run app with %s: %v", os.Args, err)
|
|
}
|
|
}
|
|
|
|
func runEnvironmentToIni(c *cli.Context) error {
|
|
// the config system may change the environment variables, so get a copy first, to be used later
|
|
env := append([]string{}, os.Environ()...)
|
|
setting.InitWorkPathAndCfgProvider(os.Getenv, setting.ArgWorkPathAndCustomConf{
|
|
WorkPath: c.String("work-path"),
|
|
CustomPath: c.String("custom-path"),
|
|
CustomConf: c.String("config"),
|
|
})
|
|
|
|
cfg, err := setting.NewConfigProviderFromFile(setting.CustomConf)
|
|
if err != nil {
|
|
log.Fatal("Failed to load custom conf '%s': %v", setting.CustomConf, err)
|
|
}
|
|
|
|
changed := setting.EnvironmentToConfig(cfg, env)
|
|
|
|
// try to save the config file
|
|
destination := c.String("out")
|
|
if len(destination) == 0 {
|
|
destination = setting.CustomConf
|
|
}
|
|
if destination != setting.CustomConf || changed {
|
|
log.Info("Settings saved to: %q", destination)
|
|
err = cfg.SaveTo(destination)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|