1package config
2
3import (
4 "context"
5
6 "github.com/sethvargo/go-envconfig"
7)
8
9type Server struct {
10 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"`
11 DBPath string `env:"DB_PATH, default=spindle.db"`
12 Hostname string `env:"HOSTNAME, required"`
13 JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"`
14 Dev bool `env:"DEV, default=false"`
15 Owner string `env:"OWNER, required"`
16}
17
18type Pipelines struct {
19 // TODO: change default to nixery.tangled.sh
20 Nixery string `env:"NIXERY, default=nixery.dev"`
21 StepTimeout string `env:"STEP_TIMEOUT, default=5m"`
22 LogDir string `env:"LOG_DIR, default=/var/log/spindle"`
23}
24
25type Config struct {
26 Server Server `env:",prefix=SPINDLE_SERVER_"`
27 Pipelines Pipelines `env:",prefix=SPINDLE_PIPELINES_"`
28}
29
30func Load(ctx context.Context) (*Config, error) {
31 var cfg Config
32 err := envconfig.Process(ctx, &cfg)
33 if err != nil {
34 return nil, err
35 }
36
37 return &cfg, nil
38}