58 lines
1.4 kB
1
package config
2
3
import (
4
"context"
5
6
"github.com/sethvargo/go-envconfig"
7
)
8
9
type Repo struct {
10
ScanPath string `env:"SCAN_PATH, default=/home/git"`
11
Readme []string `env:"README"`
12
MainBranch string `env:"MAIN_BRANCH, default=main"`
13
}
14
15
type Server struct {
16
ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:5555"`
17
InternalListenAddr string `env:"INTERNAL_LISTEN_ADDR, default=127.0.0.1:5444"`
18
Secret string `env:"SECRET, required"`
19
DBPath string `env:"DB_PATH, default=knotserver.db"`
20
Hostname string `env:"HOSTNAME, required"`
21
22
// This disables signature verification so use with caution.
23
Dev bool `env:"DEV, default=false"`
24
}
25
26
type Config struct {
27
Repo Repo `env:",prefix=KNOT_REPO_"`
28
Server Server `env:",prefix=KNOT_SERVER_"`
29
AppViewEndpoint string `env:"APPVIEW_ENDPOINT, default=https://tangled.sh"`
30
}
31
32
func Load(ctx context.Context) (*Config, error) {
33
var cfg Config
34
err := envconfig.Process(ctx, &cfg)
35
if err != nil {
36
return nil, err
37
}
38
39
if cfg.Repo.Readme == nil {
40
cfg.Repo.Readme = []string{
41
"README.md", "readme.md",
42
"README",
43
"readme",
44
"README.markdown",
45
"readme.markdown",
46
"README.txt",
47
"readme.txt",
48
"README.rst",
49
"readme.rst",
50
"README.org",
51
"readme.org",
52
"README.asciidoc",
53
"readme.asciidoc",
54
}
55
}
56
57
return &cfg, nil
58
}
59