From 923a5882deb9a18b278a7ce26d08d84c605951b6 Mon Sep 17 00:00:00 2001
From: Jack Evans <jack.evans1@ibm.com>
Date: Mon, 8 Nov 2021 16:21:02 +0000
Subject: [PATCH] make flux bootstrap and install generation more consistent

Signed-off-by: Jack Evans <jack.evans1@ibm.com>
---
 cmd/flux/install.go                     |  4 ----
 pkg/manifestgen/install/install.go      | 10 +++++++++-
 pkg/manifestgen/install/install_test.go |  5 +++++
 pkg/manifestgen/manifest.go             |  2 +-
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/cmd/flux/install.go b/cmd/flux/install.go
index 206d9952..c0d62660 100644
--- a/cmd/flux/install.go
+++ b/cmd/flux/install.go
@@ -21,7 +21,6 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
-	"strings"
 	"time"
 
 	"github.com/spf13/cobra"
@@ -177,9 +176,6 @@ func installCmdRun(cmd *cobra.Command, args []string) error {
 	}
 
 	if installArgs.export {
-		fmt.Println("---")
-		fmt.Println("# Flux version:", installArgs.version)
-		fmt.Println("# Components:", strings.Join(components, ","))
 		fmt.Print(manifest.Content)
 		fmt.Println("---")
 		return nil
diff --git a/pkg/manifestgen/install/install.go b/pkg/manifestgen/install/install.go
index 373b19e4..ce6d1e19 100644
--- a/pkg/manifestgen/install/install.go
+++ b/pkg/manifestgen/install/install.go
@@ -84,7 +84,7 @@ func Generate(options Options, manifestsBase string) (*manifestgen.Manifest, err
 
 	return &manifestgen.Manifest{
 		Path:    path.Join(options.TargetPath, options.Namespace, options.ManifestFile),
-		Content: string(content),
+		Content: fmt.Sprintf("%s\n%s", GetGenWarning(options), string(content)),
 	}, nil
 }
 
@@ -142,3 +142,11 @@ func ExistingVersion(version string) (bool, error) {
 		return false, fmt.Errorf("GitHub API returned an unexpected status code (%d)", res.StatusCode)
 	}
 }
+
+// GetGenWarning generates a consistent generation warning in the install and bootstrap case in the following format:
+// # This manifest was generated by flux. DO NOT EDIT.
+// # Flux version: v0.21.1
+// # Components: source-controller,kustomize-controller,helm-controller,notification-controller,image-reflector-controller,image-automation-controller
+func GetGenWarning(options Options) string {
+	return fmt.Sprintf("---\n%s\n# Flux Version: %s\n# Components: %s", manifestgen.GenWarning, options.Version, strings.Join(options.Components, ","))
+}
diff --git a/pkg/manifestgen/install/install_test.go b/pkg/manifestgen/install/install_test.go
index eab771ad..d9dc7789 100644
--- a/pkg/manifestgen/install/install_test.go
+++ b/pkg/manifestgen/install/install_test.go
@@ -41,5 +41,10 @@ func TestGenerate(t *testing.T) {
 		t.Errorf("toleration key '%s' not found", opts.TolerationKeys[0])
 	}
 
+	warning := GetGenWarning(opts)
+	if !strings.HasPrefix(output.Content, warning) {
+		t.Errorf("Generation warning '%s' not found", warning)
+	}
+
 	fmt.Println(output)
 }
diff --git a/pkg/manifestgen/manifest.go b/pkg/manifestgen/manifest.go
index 693b22eb..db385f69 100644
--- a/pkg/manifestgen/manifest.go
+++ b/pkg/manifestgen/manifest.go
@@ -24,7 +24,7 @@ import (
 	securejoin "github.com/cyphar/filepath-securejoin"
 )
 
-const GenWarning = "# This manifest was generated by flux bootstrap. DO NOT EDIT."
+const GenWarning = "# This manifest was generated by flux. DO NOT EDIT."
 
 // Manifest holds the data of a multi-doc YAML
 type Manifest struct {
-- 
GitLab