# HG changeset patch
# User Florent Aide <florent.aide@gmail.com>
# Date 1709302555 -3600
#      Fri Mar 01 15:15:55 2024 +0100
# Node ID 14f3b29273022be279e83ceef909b87e03ee045f
# Parent  06c3d38a1f2e0437459ad9a72231669182d9fe4c
actually plug version control in the right place

diff --git a/lib/version.go b/lib/version.go
new file mode 100644
--- /dev/null
+++ b/lib/version.go
@@ -0,0 +1,25 @@
+package beaver
+
+import (
+	"fmt"
+
+	hv "github.com/hashicorp/go-version"
+)
+
+func ControlVersions(desired, actual string) error {
+	desiredVersion, err := hv.NewVersion(desired)
+	if err != nil {
+		return fmt.Errorf("failed to parse desired beaver version: %w", err)
+	}
+
+	actualVersion, err := hv.NewVersion(actual)
+	if err != nil {
+		return fmt.Errorf("failed to parse actual beaver version: %w", err)
+	}
+
+	if !desiredVersion.Equal(actualVersion) {
+		return fmt.Errorf("desired beaver version is not equal to actual beaver version, %s != %s", desiredVersion.String(), actualVersion.String())
+	}
+
+	return nil
+}
diff --git a/runner/cmd_config.go b/runner/cmd_config.go
--- a/runner/cmd_config.go
+++ b/runner/cmd_config.go
@@ -9,6 +9,8 @@
 	"strings"
 
 	"github.com/rs/zerolog"
+
+	beaver "orus.io/orus-io/beaver/lib"
 )
 
 const (
@@ -16,7 +18,7 @@
 	YttType  = "ytt"
 )
 
-// type alias describing ytt arguments
+// Ytt is a type alias describing ytt arguments
 type Ytt []string
 
 type CmdSpec struct {
@@ -189,6 +191,11 @@
 	}
 
 	c.Layers = append(c.Layers, absDir)
+	if config.BeaverVersion != "" && beaver.Version() != "" {
+		if err := beaver.ControlVersions(config.BeaverVersion, beaver.Version()); err != nil {
+			return nil, nil, err
+		}
+	}
 	configLayers = append(configLayers, config)
 
 	if config == nil || (len(config.Inherits) == 0 && config.Inherit == "") {
diff --git a/runner/config.go b/runner/config.go
--- a/runner/config.go
+++ b/runner/config.go
@@ -5,10 +5,7 @@
 	"os"
 	"path/filepath"
 
-	"github.com/hashicorp/go-version"
 	"gopkg.in/yaml.v3"
-
-	beaver "orus.io/orus-io/beaver/lib"
 )
 
 // Sha define sha feature parameter
@@ -117,29 +114,5 @@
 		return &config, nil
 	}
 
-	if config.BeaverVersion != "" && beaver.Version() != "" {
-		if err := ControlVersions(config.BeaverVersion, beaver.Version()); err != nil {
-			return nil, err
-		}
-	}
-
 	return nil, fmt.Errorf("no beaver file found in %s", configDir)
 }
-
-func ControlVersions(desired, actual string) error {
-	desiredVersion, err := version.NewVersion(desired)
-	if err != nil {
-		return fmt.Errorf("failed to parse desired beaver version: %w", err)
-	}
-
-	actualVersion, err := version.NewVersion(actual)
-	if err != nil {
-		return fmt.Errorf("failed to parse actual beaver version: %w", err)
-	}
-
-	if !desiredVersion.Equal(actualVersion) {
-		return fmt.Errorf("desired beaver version is not equal to actual beaver version, %s != %s", desiredVersion.String(), actualVersion.String())
-	}
-
-	return nil
-}
diff --git a/runner/config_test.go b/runner/config_test.go
--- a/runner/config_test.go
+++ b/runner/config_test.go
@@ -12,6 +12,7 @@
 	"github.com/stretchr/testify/require"
 	"gopkg.in/yaml.v3"
 
+	beaver "orus.io/orus-io/beaver/lib"
 	"orus.io/orus-io/beaver/runner"
 	"orus.io/orus-io/beaver/testutils"
 )
@@ -38,14 +39,14 @@
 func TestConfigVersionValid(t *testing.T) {
 	config, err := runner.NewConfig(filepath.Join(versionTest, "validbase"))
 	require.NoError(t, err)
-	err = runner.ControlVersions(config.BeaverVersion, "3.2.3")
+	err = beaver.ControlVersions(config.BeaverVersion, "3.2.3")
 	require.NoError(t, err)
 }
 
 func TestConfigVersionInValid(t *testing.T) {
 	config, err := runner.NewConfig(filepath.Join(versionTest, "invalidbase"))
 	require.NoError(t, err)
-	err = runner.ControlVersions(config.BeaverVersion, "3.2.3")
+	err = beaver.ControlVersions(config.BeaverVersion, "3.2.3")
 	require.Error(t, err)
 }