Files
2026-08-21 19:28:21 +01:00

97 lines
2.2 KiB
Go

package launcher
import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/kandev/kandev/internal/common/config"
"github.com/kandev/kandev/internal/profiles"
)
func loadBootstrapConfig() (*config.Config, error) {
return loadBootstrapConfigWithHome("")
}
func loadBootstrapConfigWithHome(homeDir string) (*config.Config, error) {
cfg, err := config.LoadWithHome(homeDir)
if err != nil {
return nil, fmt.Errorf("load startup configuration: %w", err)
}
if _, _, err := profiles.ApplyProfile(); err != nil {
return nil, fmt.Errorf("apply profile defaults: %w", err)
}
return cfg, nil
}
func loadServiceBootstrapConfig(args serviceArgs) (*config.Config, error) {
return loadBootstrapConfigWithHome(serviceBootstrapHomeDir(args))
}
func serviceBootstrapHomeDir(args serviceArgs) string {
if strings.TrimSpace(args.HomeDir) != "" {
return args.HomeDir
}
if raw := strings.TrimSpace(os.Getenv("KANDEV_HOME_DIR")); raw != "" {
return expandHome(raw)
}
if args.System {
return defaultSystemServiceHomeDir
}
return resolveHomeDir()
}
func configSourceIsExplicit(cfg *config.Config, key string) bool {
if cfg == nil {
return false
}
source := cfg.SourceFor(key)
return source == config.SourceConfiguration || source == config.SourceEnvironment || source == config.SourceProfile
}
func resolveHomeDirForConfig(cfg *config.Config) string {
if cfg == nil {
return resolveHomeDir()
}
return cfg.ResolvedHomeDir()
}
func resolveDataDirForConfig(cfg *config.Config) string {
if cfg == nil {
return resolveDataDir()
}
return cfg.ResolvedDataDir()
}
func resolveDatabasePathForConfig(cfg *config.Config) string {
if cfg == nil {
return resolveDatabasePath()
}
if path := strings.TrimSpace(cfg.Database.Path); path != "" {
return path
}
return filepath.Join(resolveDataDirForConfig(cfg), "kandev.db")
}
func ensureDataDirForConfig(cfg *config.Config) error {
dir := resolveDataDirForConfig(cfg)
if err := rejectSymlinkComponents(dir); err != nil {
return err
}
if err := os.MkdirAll(dir, 0o700); err != nil {
return err
}
if err := os.Chmod(dir, 0o700); err != nil {
return err
}
return nil
}
func configFileForChild(cfg *config.Config) string {
if cfg == nil {
return ""
}
return cfg.Source.FilePath
}