package config import ( "encoding/json" "fmt" "io/ioutil" ) // Config is the whole configuration for the forge platform deployment. type Config struct { ProjectName string `json:"project"` Docker DockerConfig `json:"docker"` Services ServicesConfig `json:"services"` } // DockerConfig contains the configuration for docker specific components. type DockerConfig struct { Network DockerNetworkConfig `json:"network"` SharedVolume DockerSharedVolumeConfig `json:"sharedVolume"` } // DockerNetworkConfig contains configuration for creating the docker network. type DockerNetworkConfig struct { Name string `json:"name"` Subnet string `json:"subnet"` Driver string `json:"driver"` } // DockerSharedVolumeConfig contains configuration for creating the shared volume. type DockerSharedVolumeConfig struct { Name string `json:"name"` } // Services contains a list of services and their configuration. type ServicesConfig struct { Traefik TraefikConfig `json:"traefik"` Gitea GiteaConfig `json:"gitea"` } // TraefikConfig contains configuration for the Traefik container. type TraefikConfig struct { CheckNewVersion bool `json:"checkNewVersion"` ContainerIp string `json:"containerIp"` Domain string `json:"domain"` GroupId int LogLevel string `json:"logLevel"` SendAnonymousUsage bool `json:"sendAnonymousUsage"` Version string `json:"version"` } // GiteaConfig contains configuration for the Gitea container. type GiteaConfig struct { AppName string `json:"appName"` BaseUri string `json:"baseUri"` ContainerIp string `json:"containerIp"` DataDirectory string `json:"dataDirectory"` Domain string `json:"domain"` GroupId int HttpPort int `json:"httpPort"` InternalToken string `json:"internalToken"` LogLevel string `json:"logLevel"` RootUrl string `json:"rootUrl"` RunMode string `json:"runMode"` SecretKey string `json:"secretKey"` SshDomain string `json:"sshDomain"` SshPort int `json:"sshPort"` UserId int Version string `json:"version"` } // NewConfig creates a new Config value from a given JSON file. func NewConfig(file string) (Config, error) { var c Config var err error data, err := ioutil.ReadFile(file) if err != nil { return c, fmt.Errorf("unable to read data from %s...\n%v", file, err) } if err = json.Unmarshal(data, &c); err != nil { return c, fmt.Errorf("unable to decode the JSON configuration from %s...\n%v", file, err) } return c, nil }