Move some code under conditionals for better error handling.

This commit is contained in:
root 2025-03-09 17:00:35 -04:00
parent a5573f7097
commit e8b30a1b0f

25
main.go
View file

@ -45,9 +45,9 @@ type ServiceConfig struct {
func main() { func main() {
var err error var err error
var config Config var config Config
var systemConfig Config
// Read user config file // Read user config file
{
file, err := os.ReadFile("goolinux.json") file, err := os.ReadFile("goolinux.json")
if err != nil { if err != nil {
fmt.Println("Cannot read user config file") fmt.Println("Cannot read user config file")
@ -60,11 +60,14 @@ func main() {
fmt.Println(err) fmt.Println(err)
return return
} }
}
// Read system "base" config file if it exists // Read system "base" config file if it exists
if config.System.Base != "" { if config.System.Base != "" {
var systemConfig Config
path := "services/" + config.System.Base + ".json" path := "services/" + config.System.Base + ".json"
file, err = os.ReadFile(path)
file, err := os.ReadFile(path)
if err != nil { if err != nil {
fmt.Println("Cannot read system base config file") fmt.Println("Cannot read system base config file")
fmt.Println(err) fmt.Println(err)
@ -85,17 +88,24 @@ func main() {
for name, service := range config.Services { for name, service := range config.Services {
var b strings.Builder var b strings.Builder
var s ServiceConfig var s ServiceConfig
fmt.Printf("Service: %s\n", name)
// If no provider specified, try system
if service.Provider == "" { service.Provider = "system" }
// Read service config file // Read service config file
if service.Provider == "" { service.Provider = "system" }
fmt.Fprintf(&b, "services/%s/%s.json", name, service.Provider) fmt.Fprintf(&b, "services/%s/%s.json", name, service.Provider)
c, err := os.ReadFile(b.String()) c, err := os.ReadFile(b.String())
if err != nil { if err != nil {
fmt.Println("Unknown service: ", err) switch err := err.(type) {
case *os.PathError:
// No system config to merge
// Rely solely on the user config
fmt.Println(" Warning: No system config for service" + name)
default:
fmt.Println("Error reading service config: ", err)
return return
} }
} else {
// Parse service config // Parse service config
err = hjson.Unmarshal(c, &s) err = hjson.Unmarshal(c, &s)
if err != nil { if err != nil {
@ -106,10 +116,9 @@ func main() {
mergo.Merge(&s, service, mergo.WithOverride) mergo.Merge(&s, service, mergo.WithOverride)
config.Services[name] = s config.Services[name] = s
fmt.Printf(" %v\n", s)
// Add service packages to the global list // Add service packages to the global list
config.System.Packages = append(config.System.Packages, s.Packages...) config.System.Packages = append(config.System.Packages, s.Packages...)
}
// Generate a config file // Generate a config file
for _, f := range s.ConfigFiles { for _, f := range s.ConfigFiles {