✨ Better launchpad
This commit is contained in:
76
pkg/launchpad/config/config.go
Normal file
76
pkg/launchpad/config/config.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// LaunchpadConfig is the top-level configuration structure for the launchpad.
|
||||
type LaunchpadConfig struct {
|
||||
Variables struct {
|
||||
Required []string
|
||||
}
|
||||
Networks map[string]interface{}
|
||||
Services []Service
|
||||
}
|
||||
|
||||
// Service defines a single service that can be managed by the launchpad.
|
||||
type Service struct {
|
||||
Name string
|
||||
Type string
|
||||
Path string
|
||||
Dev struct {
|
||||
Command string
|
||||
Image string
|
||||
ExposePorts []int `mapstructure:"expose_ports"` // Ports to check for health in dev mode
|
||||
Healthcheck Healthcheck
|
||||
}
|
||||
Prod struct {
|
||||
Image string
|
||||
Command interface{}
|
||||
Dockerfile string
|
||||
BuildContext string `mapstructure:"build_context"`
|
||||
Ports []string
|
||||
Expose []string
|
||||
Environment []string
|
||||
Volumes []string
|
||||
DependsOn map[string]Dependency `mapstructure:"depends_on"`
|
||||
Networks []string
|
||||
Healthcheck Healthcheck
|
||||
}
|
||||
}
|
||||
|
||||
// Healthcheck defines a health check for a service.
|
||||
type Healthcheck struct {
|
||||
Test []string `yaml:"test,omitempty"`
|
||||
Interval string `yaml:"interval,omitempty"`
|
||||
Timeout string `yaml:"timeout,omitempty"`
|
||||
Retries int `yaml:"retries,omitempty"`
|
||||
// For dev mode TCP checks
|
||||
TcpPorts []int `mapstructure:"tcp_ports"`
|
||||
Path string
|
||||
}
|
||||
|
||||
// Dependency defines a dependency condition for docker-compose.
|
||||
type Dependency struct {
|
||||
Condition string `yaml:"condition"`
|
||||
}
|
||||
|
||||
|
||||
// Load reads and parses the launchpad.toml file from the project root.
|
||||
func Load() LaunchpadConfig {
|
||||
v := viper.New()
|
||||
v.SetConfigName("launchpad")
|
||||
v.AddConfigPath(".")
|
||||
v.SetConfigType("toml")
|
||||
|
||||
if err := v.ReadInConfig(); err != nil {
|
||||
log.Fatal().Err(err).Msg("Failed to read launchpad.toml")
|
||||
}
|
||||
|
||||
var config LaunchpadConfig
|
||||
if err := v.Unmarshal(&config); err != nil {
|
||||
log.Fatal().Err(err).Msg("Failed to parse launchpad.toml")
|
||||
}
|
||||
return config
|
||||
}
|
||||
Reference in New Issue
Block a user