feat(P02): HCL config file parsing — internal/config package (REQ-054)
New internal/config package: Config struct (HCL tags), Load(paths...), MergeOverrides(flags, env) with flag>env>file>default precedence (D-039). No package-level state (AD-023). --config persistent flag on root command; daemon uses cfg.ListenAddr when flag at default. 11 config tests + 2 cli tests. ---ci--- project: orca phase: 2 milestone: v0.7 status: verify requirements: covered: [REQ-054] partial: [] ---/ci---
This commit is contained in:
@@ -1,13 +1,18 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"git.cloudinit.dev/coreci/orca/internal/config"
|
||||
)
|
||||
|
||||
type configCtxKey struct{}
|
||||
|
||||
var (
|
||||
version = "0.1.0-dev"
|
||||
gitCommit = "unknown"
|
||||
@@ -33,6 +38,13 @@ over feature richness.`,
|
||||
return fmt.Errorf("set ORCA_HOME for --system: %w", err)
|
||||
}
|
||||
}
|
||||
if configPath != "" {
|
||||
cfg, err := config.Load(configPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("load config %s: %w", configPath, err)
|
||||
}
|
||||
cmd.SetContext(context.WithValue(cmd.Context(), configCtxKey{}, cfg))
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
||||
@@ -40,11 +52,20 @@ over feature richness.`,
|
||||
var (
|
||||
jsonOutput bool
|
||||
systemNamespace bool
|
||||
configPath string
|
||||
)
|
||||
|
||||
func init() {
|
||||
rootCmd.PersistentFlags().BoolVar(&jsonOutput, "json", false, "output in JSON format")
|
||||
rootCmd.PersistentFlags().BoolVar(&systemNamespace, "system", false, "use system-level namespace root (/root/.orca) instead of user-level (~/.orca)")
|
||||
rootCmd.PersistentFlags().StringVar(&configPath, "config", "", "path to config.hcl (overrides ~/.orca/config.hcl)")
|
||||
}
|
||||
|
||||
func configFromCtx(ctx context.Context) *config.Config {
|
||||
if v, ok := ctx.Value(configCtxKey{}).(*config.Config); ok {
|
||||
return v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Execute() error {
|
||||
|
||||
Reference in New Issue
Block a user