# HG changeset patch
# User Steeve Chailloux <steeve.chailloux@proton.ch>
# Date 1681376978 -7200
#      Thu Apr 13 11:09:38 2023 +0200
# Node ID c3982c80170b9e1bb8c7f8e722d91b7c87b47a6a
# Parent  29020c1f34358cbf5e655258b6ae61dda6411721
# EXP-Topic namespace
build namespace flag to force helm charts namespace

Signed-off-by: Steeve Chailloux <steeve.chailloux@proton.ch>

diff --git a/cmd/build.go b/cmd/build.go
--- a/cmd/build.go
+++ b/cmd/build.go
@@ -12,9 +12,10 @@
 
 type BuildCmd struct {
 	Args struct {
-		DryRun bool   `short:"d" long:"dry-run" description:"if set only prints commands but do not run them"`
-		Keep   bool   `short:"k" long:"keep" description:"Keep the temporary files"`
-		Output string `short:"o" long:"output" description:"output directory, use \"stdout\" to print to stdout"`
+		DryRun    bool   `short:"d" long:"dry-run" description:"if set only prints commands but do not run them"`
+		Keep      bool   `short:"k" long:"keep" description:"Keep the temporary files"`
+		Output    string `short:"o" long:"output" description:"output directory, use \"stdout\" to print to stdout"`
+		Namespace string `short:"n" long:"namespace" description:"force helm namespace flag for all helm charts"`
 	}
 	PositionalArgs struct {
 		DirName string `required:"yes" positional-arg-name:"directory"`
@@ -32,7 +33,7 @@
 func (cmd *BuildCmd) Execute([]string) error {
 	cmd.log.Debug().Str("directory", cmd.PositionalArgs.DirName).Msg("starting beaver")
 
-	config := runner.NewCmdConfig(cmd.log, ".", cmd.PositionalArgs.DirName, cmd.Args.DryRun, cmd.Args.Output)
+	config := runner.NewCmdConfig(cmd.log, ".", cmd.PositionalArgs.DirName, cmd.Args.DryRun, cmd.Args.Output, cmd.Args.Namespace)
 
 	path, err := os.Getwd()
 	if err != nil {
diff --git a/runner/cmd_test.go b/runner/cmd_test.go
--- a/runner/cmd_test.go
+++ b/runner/cmd_test.go
@@ -35,7 +35,7 @@
 	testPath := filepath.Join("environments", "ns1")
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testPath, false, "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testPath, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
diff --git a/runner/config.go b/runner/config.go
--- a/runner/config.go
+++ b/runner/config.go
@@ -107,7 +107,7 @@
 	return nil, fmt.Errorf("no beaver file found in %s", configDir)
 }
 
-func NewCmdConfig(logger zerolog.Logger, rootDir, configDir string, dryRun bool, output string) *CmdConfig {
+func NewCmdConfig(logger zerolog.Logger, rootDir, configDir string, dryRun bool, output string, namespace string) *CmdConfig {
 	cmdConfig := &CmdConfig{}
 	cmdConfig.DryRun = dryRun
 	cmdConfig.Output = output
@@ -116,7 +116,7 @@
 	cmdConfig.Spec.Charts = make(map[string]CmdChart)
 	cmdConfig.Spec.Creates = make(map[CmdCreateKey]CmdCreate)
 	cmdConfig.Spec.Shas = []*CmdSha{}
-	cmdConfig.Namespace = ""
+	cmdConfig.Namespace = namespace
 	cmdConfig.Logger = logger
 	return cmdConfig
 }
@@ -159,7 +159,9 @@
 	}
 
 	for _, config := range configLayers {
-		c.Namespace = config.NameSpace
+		if c.Namespace == "" {
+			c.Namespace = config.NameSpace
+		}
 		c.MergeVariables(config)
 
 		for k, chart := range config.Charts {
diff --git a/runner/config_test.go b/runner/config_test.go
--- a/runner/config_test.go
+++ b/runner/config_test.go
@@ -160,7 +160,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -190,7 +190,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -206,7 +206,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -250,7 +250,7 @@
 	tl := testutils.NewTestLogger(t)
 	absConfigDir, err := filepath.Abs(shaFixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, "base", false, "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, "base", false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {