feat(depot): config resolution and manifest sha parsing
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package depot
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
CDNBase string
|
||||
StorageHost string
|
||||
StorageZone string
|
||||
ReadKey string
|
||||
WriteKey string
|
||||
ProbeJobs int
|
||||
Jobs int
|
||||
ConnectTimeout time.Duration
|
||||
ProbeMaxTime time.Duration
|
||||
ConfirmRetries int
|
||||
ConfirmMax int
|
||||
}
|
||||
|
||||
func LoadConfig(getenv func(string) string) Config {
|
||||
cfg := Config{
|
||||
CDNBase: "https://cdn-a7f3k9.westgate.pw",
|
||||
StorageZone: "sow-assets-depot",
|
||||
ProbeJobs: 16,
|
||||
Jobs: 16,
|
||||
ConnectTimeout: 10 * time.Second,
|
||||
ProbeMaxTime: 30 * time.Second,
|
||||
ConfirmRetries: 3,
|
||||
ConfirmMax: 200,
|
||||
}
|
||||
|
||||
// DEPOT_CDN_BASE || BUNNY_CDN_BASE
|
||||
if v := getenv("DEPOT_CDN_BASE"); v != "" {
|
||||
cfg.CDNBase = v
|
||||
} else if v := getenv("BUNNY_CDN_BASE"); v != "" {
|
||||
cfg.CDNBase = v
|
||||
}
|
||||
|
||||
// BUNNY_STORAGE_HOST (no default)
|
||||
cfg.StorageHost = getenv("BUNNY_STORAGE_HOST")
|
||||
|
||||
// BUNNY_STORAGE_ZONE (default "sow-assets-depot")
|
||||
if v := getenv("BUNNY_STORAGE_ZONE"); v != "" {
|
||||
cfg.StorageZone = v
|
||||
}
|
||||
|
||||
// BUNNY_STORAGE_PASSWORD
|
||||
cfg.WriteKey = getenv("BUNNY_STORAGE_PASSWORD")
|
||||
|
||||
// BUNNY_STORAGE_READ_PASSWORD || BUNNY_STORAGE_PASSWORD
|
||||
if v := getenv("BUNNY_STORAGE_READ_PASSWORD"); v != "" {
|
||||
cfg.ReadKey = v
|
||||
} else {
|
||||
cfg.ReadKey = cfg.WriteKey
|
||||
}
|
||||
|
||||
// DEPOT_PROBE_JOBS (default 16)
|
||||
if v := getenv("DEPOT_PROBE_JOBS"); v != "" {
|
||||
if i, err := strconv.Atoi(v); err == nil {
|
||||
cfg.ProbeJobs = i
|
||||
}
|
||||
}
|
||||
|
||||
// DEPOT_JOBS (default 16)
|
||||
if v := getenv("DEPOT_JOBS"); v != "" {
|
||||
if i, err := strconv.Atoi(v); err == nil {
|
||||
cfg.Jobs = i
|
||||
}
|
||||
}
|
||||
|
||||
// DEPOT_CONNECT_TIMEOUT (default 10s)
|
||||
if v := getenv("DEPOT_CONNECT_TIMEOUT"); v != "" {
|
||||
if d, err := time.ParseDuration(v + "s"); err == nil {
|
||||
cfg.ConnectTimeout = d
|
||||
}
|
||||
}
|
||||
|
||||
// DEPOT_PROBE_MAX_TIME (default 30s)
|
||||
if v := getenv("DEPOT_PROBE_MAX_TIME"); v != "" {
|
||||
if d, err := time.ParseDuration(v + "s"); err == nil {
|
||||
cfg.ProbeMaxTime = d
|
||||
}
|
||||
}
|
||||
|
||||
// DEPOT_CONFIRM_RETRIES (default 3)
|
||||
if v := getenv("DEPOT_CONFIRM_RETRIES"); v != "" {
|
||||
if i, err := strconv.Atoi(v); err == nil {
|
||||
cfg.ConfirmRetries = i
|
||||
}
|
||||
}
|
||||
|
||||
// DEPOT_CONFIRM_MAX (default 200, 0 = unlimited)
|
||||
if v := getenv("DEPOT_CONFIRM_MAX"); v != "" {
|
||||
if i, err := strconv.Atoi(v); err == nil {
|
||||
cfg.ConfirmMax = i
|
||||
}
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
Reference in New Issue
Block a user