This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / spindle / config / config.go
4.8 kB 127 lines
1package config 2 3import ( 4 "context" 5 "time" 6 7 "github.com/bluesky-social/indigo/atproto/syntax" 8 "github.com/sethvargo/go-envconfig" 9 "tangled.org/core/xrpc/serviceauth" 10) 11 12type Server struct { 13 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"` 14 DBPath string `env:"DB_PATH, default=spindle.db"` 15 RepoDir string `env:"REPO_DIR, default=repos"` 16 Hostname string `env:"HOSTNAME, required"` 17 JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"` 18 Tap Tap `env:",prefix=TAP_"` 19 PlcUrl string `env:"PLC_URL, default=https://plc.directory"` 20 Dev bool `env:"DEV, default=false"` 21 DevExtraHosts []string `env:"DEV_EXTRA_HOSTS"` 22 Owner string `env:"OWNER, required"` 23 Secrets Secrets `env:",prefix=SECRETS_"` 24 LogDir string `env:"LOG_DIR, default=/var/log/spindle"` 25 QueueSize int `env:"QUEUE_SIZE, default=100"` 26 MaxJobCount int `env:"MAX_JOB_COUNT, default=2"` // max number of pipelines that run at a time 27 DockerSocket string `env:"DOCKER_SOCKET"` // path to a docker socket to expose to workflow containers 28} 29 30type Tap struct { 31 Embed bool `env:"EMBED, default=true"` 32 Url string `env:"URL, default=http://[::1]:2480"` 33 Bind string `env:"BIND, default=[::1]:2480"` 34 DBPath string `env:"DB_PATH, default=tap.db"` 35 RelayUrl string `env:"RELAY_URL, default=https://bsky.network"` 36 AdminPassword string `env:"ADMIN_PASSWORD"` 37} 38 39func (s Server) Did() syntax.DID { 40 return serviceauth.DidWeb(s.Hostname) 41} 42 43type Secrets struct { 44 Provider string `env:"PROVIDER, default=sqlite"` 45 OpenBao OpenBaoConfig `env:",prefix=OPENBAO_"` 46} 47 48type OpenBaoConfig struct { 49 ProxyAddr string `env:"PROXY_ADDR, default=http://127.0.0.1:8200"` 50 Mount string `env:"MOUNT, default=spindle"` 51} 52 53type NixeryPipelines struct { 54 Nixery string `env:"NIXERY, default=nixery.tangled.sh"` 55 WorkflowTimeout string `env:"WORKFLOW_TIMEOUT, default=5m"` 56 MaxJobMemoryMB int64 `env:"MAX_JOB_MEMORY_MB, default=6144"` // per-container memory limit in MiB (default 6 GiB) 57 MaxConcurrentWorkflows int `env:"MAX_CONCURRENT_WORKFLOWS, default=8"` // max number of workflow containers running at once (memory cap) 58} 59 60type ArtifactStoreDisk struct { 61 Dir string `env:"DIR"` 62} 63 64type ArtifactStoreS3 struct { 65 Bucket string `env:"BUCKET"` 66 Region string `env:"REGION, default=us-east-1"` 67} 68 69type ArtifactStores struct { 70 Disk ArtifactStoreDisk `env:",prefix=DISK_"` 71 S3 ArtifactStoreS3 `env:",prefix=S3_"` 72} 73 74type LegacyS3 struct { 75 LogBucket string `env:"LOG_BUCKET"` 76} 77 78type MicroVMPipelines struct { 79 ImageDir string `env:"IMAGE_DIR"` 80 OverlayDir string `env:"OVERLAY_DIR, default="` // where microVM temporary disks will live 81 DefaultImage string `env:"DEFAULT_IMAGE, default=nixos-x86_64"` 82 AgentPort uint32 `env:"AGENT_PORT, default=10240"` 83 EnableKVM bool `env:"ENABLE_KVM, default=true"` 84 WorkflowTimeout string `env:"WORKFLOW_TIMEOUT, default=5m"` 85 86 MaxTotalMemoryMiB int64 `env:"MAX_TOTAL_MEMORY_MIB, default=0"` 87 MaxTotalVCPUs int64 `env:"MAX_TOTAL_VCPUS, default=0"` 88 MaxTotalDiskMiB int64 `env:"MAX_TOTAL_DISK_MIB, default=0"` 89 90 MaxWorkflowMemoryMiB int64 `env:"MAX_WORKFLOW_MEMORY_MIB, default=0"` 91 MaxWorkflowVCPUs int64 `env:"MAX_WORKFLOW_VCPUS, default=0"` 92 MaxWorkflowDiskMiB int64 `env:"MAX_WORKFLOW_DISK_MIB, default=0"` 93 94 AgingThreshold time.Duration `env:"AGING_THRESHOLD, default=30s"` 95 96 EnableCgroups bool `env:"ENABLE_CGROUPS, default=false"` 97 CgroupParent string `env:"CGROUP_PARENT, default=self"` 98 CgroupPidsMax int64 `env:"CGROUP_PIDS_MAX, default=4096"` 99 CgroupSwapMaxMiB *int64 `env:"CGROUP_SWAP_MAX_MIB"` 100 // memory.min that will get assigned to the supervisor (spindle itself) cgroup 101 CgroupSupervisorMemoryMinMiB int64 `env:"CGROUP_SUPERVISOR_MEMORY_MIN_MIB, default=512"` 102} 103 104type NixCache struct { 105 ReadURLs []string `env:"READ_URLS"` 106 TrustedPublicKeys []string `env:"TRUSTED_PUBLIC_KEYS"` 107 UploadURL string `env:"UPLOAD_URL"` 108} 109 110type Config struct { 111 Server Server `env:",prefix=SPINDLE_SERVER_"` 112 NixeryPipelines NixeryPipelines `env:",prefix=SPINDLE_NIXERY_PIPELINES_"` 113 MicroVMPipelines MicroVMPipelines `env:",prefix=SPINDLE_MICROVM_PIPELINES_"` 114 NixCache NixCache `env:",prefix=SPINDLE_NIX_CACHE_"` 115 ArtifactStores ArtifactStores `env:",prefix=SPINDLE_ARTIFACT_STORES_"` 116 LegacyS3 LegacyS3 `env:",prefix=SPINDLE_S3_"` 117} 118 119func Load(ctx context.Context) (*Config, error) { 120 var cfg Config 121 err := envconfig.Process(ctx, &cfg) 122 if err != nil { 123 return nil, err 124 } 125 126 return &cfg, nil 127}