From b872e595aefba777293cf7337bad8422ad56e693 Mon Sep 17 00:00:00 2001
From: Stefan Prodan <stefan.prodan@gmail.com>
Date: Wed, 7 Apr 2021 12:18:16 +0300
Subject: [PATCH] Add recurse submodules arg to bootstrap cmd

Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
---
 cmd/flux/bootstrap.go              | 11 +++++++----
 cmd/flux/bootstrap_git.go          |  1 +
 cmd/flux/bootstrap_github.go       |  1 +
 cmd/flux/bootstrap_gitlab.go       |  1 +
 cmd/flux/create_source_git.go      |  3 ++-
 docs/cmd/flux_bootstrap.md         |  3 ++-
 docs/cmd/flux_bootstrap_git.md     |  3 ++-
 docs/cmd/flux_bootstrap_github.md  |  3 ++-
 docs/cmd/flux_bootstrap_gitlab.md  |  3 ++-
 docs/cmd/flux_create_source_git.md |  2 +-
 pkg/manifestgen/sync/options.go    |  1 +
 pkg/manifestgen/sync/sync.go       |  1 +
 12 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go
index 05139ab4..1c1dc1c2 100644
--- a/cmd/flux/bootstrap.go
+++ b/cmd/flux/bootstrap.go
@@ -39,8 +39,9 @@ type bootstrapFlags struct {
 	arch     flags.Arch
 	logLevel flags.LogLevel
 
-	branch        string
-	manifestsPath string
+	branch            string
+	recurseSubmodules bool
+	manifestsPath     string
 
 	defaultComponents  []string
 	extraComponents    []string
@@ -89,8 +90,10 @@ func init() {
 	bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.imagePullSecret, "image-pull-secret", "",
 		"Kubernetes secret name used for pulling the toolkit images from a private registry")
 
-	bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.branch, "branch", bootstrapDefaultBranch,
-		"default branch (for GitHub this must match the default branch setting for the organization)")
+	bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.branch, "branch", bootstrapDefaultBranch, "Git branch")
+	bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.recurseSubmodules, "recurse-submodules", false,
+		"when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces")
+
 	bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.manifestsPath, "manifests", "", "path to the manifest directory")
 
 	bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.watchAllNamespaces, "watch-all-namespaces", true,
diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go
index fa8eb584..2f4c49d1 100644
--- a/cmd/flux/bootstrap_git.go
+++ b/cmd/flux/bootstrap_git.go
@@ -189,6 +189,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error {
 		TargetPath:        gitArgs.path.String(),
 		ManifestFile:      sync.MakeDefaultOptions().ManifestFile,
 		GitImplementation: sourceGitArgs.gitImplementation.String(),
+		RecurseSubmodules: bootstrapArgs.recurseSubmodules,
 	}
 
 	// Bootstrap config
diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go
index 81238331..5f0f594d 100644
--- a/cmd/flux/bootstrap_github.go
+++ b/cmd/flux/bootstrap_github.go
@@ -211,6 +211,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error {
 		TargetPath:        githubArgs.path.String(),
 		ManifestFile:      sync.MakeDefaultOptions().ManifestFile,
 		GitImplementation: sourceGitArgs.gitImplementation.String(),
+		RecurseSubmodules: bootstrapArgs.recurseSubmodules,
 	}
 
 	// Bootstrap config
diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go
index a57b9aa5..d66003cf 100644
--- a/cmd/flux/bootstrap_gitlab.go
+++ b/cmd/flux/bootstrap_gitlab.go
@@ -227,6 +227,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error {
 		TargetPath:        gitlabArgs.path.String(),
 		ManifestFile:      sync.MakeDefaultOptions().ManifestFile,
 		GitImplementation: sourceGitArgs.gitImplementation.String(),
+		RecurseSubmodules: bootstrapArgs.recurseSubmodules,
 	}
 
 	// Bootstrap config
diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go
index eaee699a..c4b2fb18 100644
--- a/cmd/flux/create_source_git.go
+++ b/cmd/flux/create_source_git.go
@@ -125,7 +125,8 @@ func init() {
 	createSourceGitCmd.Flags().Var(&sourceGitArgs.gitImplementation, "git-implementation", sourceGitArgs.gitImplementation.Description())
 	createSourceGitCmd.Flags().StringVar(&sourceGitArgs.caFile, "ca-file", "", "path to TLS CA file used for validating self-signed certificates")
 	createSourceGitCmd.Flags().StringVar(&sourceGitArgs.privateKeyFile, "private-key-file", "", "path to a passwordless private key file used for authenticating to the Git SSH server")
-	createSourceGitCmd.Flags().BoolVar(&sourceGitArgs.recurseSubmodules, "recurse-submodules", false, "when enabled, after the clone is created, initializes all Git submodules within")
+	createSourceGitCmd.Flags().BoolVar(&sourceGitArgs.recurseSubmodules, "recurse-submodules", false,
+		"when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces")
 
 	createSourceCmd.AddCommand(createSourceGitCmd)
 }
diff --git a/docs/cmd/flux_bootstrap.md b/docs/cmd/flux_bootstrap.md
index 7d944dbd..9f1adb8b 100644
--- a/docs/cmd/flux_bootstrap.md
+++ b/docs/cmd/flux_bootstrap.md
@@ -14,7 +14,7 @@ The bootstrap sub-commands bootstrap the toolkit components on the targeted Git
 ```
       --author-email string                    author email for Git commits
       --author-name string                     author name for Git commits (default "Flux")
-      --branch string                          default branch (for GitHub this must match the default branch setting for the organization) (default "main")
+      --branch string                          Git branch (default "main")
       --ca-file string                         path to TLS CA file used for validating self-signed certificates
       --cluster-domain string                  internal cluster domain (default "cluster.local")
       --commit-message-appendix string         string to add to the commit messages, e.g. '[ci skip]'
@@ -25,6 +25,7 @@ The bootstrap sub-commands bootstrap the toolkit components on the targeted Git
       --log-level logLevel                     log level, available options are: (debug, info, error) (default info)
       --network-policy                         deny ingress access to the toolkit controllers from other namespaces using network policies (default true)
       --private-key-file string                path to a private key file used for authenticating to the Git SSH server
+      --recurse-submodules                     when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces
       --registry string                        container registry where the toolkit images are published (default "ghcr.io/fluxcd")
       --secret-name string                     name of the secret the sync credentials can be found in or stored to (default "flux-system")
       --ssh-ecdsa-curve ecdsaCurve             SSH ECDSA public key curve (p256, p384, p521) (default p384)
diff --git a/docs/cmd/flux_bootstrap_git.md b/docs/cmd/flux_bootstrap_git.md
index 0587e536..0ba7ebf9 100644
--- a/docs/cmd/flux_bootstrap_git.md
+++ b/docs/cmd/flux_bootstrap_git.md
@@ -46,7 +46,7 @@ flux bootstrap git [flags]
 ```
       --author-email string                    author email for Git commits
       --author-name string                     author name for Git commits (default "Flux")
-      --branch string                          default branch (for GitHub this must match the default branch setting for the organization) (default "main")
+      --branch string                          Git branch (default "main")
       --ca-file string                         path to TLS CA file used for validating self-signed certificates
       --cluster-domain string                  internal cluster domain (default "cluster.local")
       --commit-message-appendix string         string to add to the commit messages, e.g. '[ci skip]'
@@ -59,6 +59,7 @@ flux bootstrap git [flags]
   -n, --namespace string                       the namespace scope for this operation (default "flux-system")
       --network-policy                         deny ingress access to the toolkit controllers from other namespaces using network policies (default true)
       --private-key-file string                path to a private key file used for authenticating to the Git SSH server
+      --recurse-submodules                     when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces
       --registry string                        container registry where the toolkit images are published (default "ghcr.io/fluxcd")
       --secret-name string                     name of the secret the sync credentials can be found in or stored to (default "flux-system")
       --ssh-ecdsa-curve ecdsaCurve             SSH ECDSA public key curve (p256, p384, p521) (default p384)
diff --git a/docs/cmd/flux_bootstrap_github.md b/docs/cmd/flux_bootstrap_github.md
index 05dbe90e..d99ba691 100644
--- a/docs/cmd/flux_bootstrap_github.md
+++ b/docs/cmd/flux_bootstrap_github.md
@@ -65,7 +65,7 @@ flux bootstrap github [flags]
 ```
       --author-email string                    author email for Git commits
       --author-name string                     author name for Git commits (default "Flux")
-      --branch string                          default branch (for GitHub this must match the default branch setting for the organization) (default "main")
+      --branch string                          Git branch (default "main")
       --ca-file string                         path to TLS CA file used for validating self-signed certificates
       --cluster-domain string                  internal cluster domain (default "cluster.local")
       --commit-message-appendix string         string to add to the commit messages, e.g. '[ci skip]'
@@ -78,6 +78,7 @@ flux bootstrap github [flags]
   -n, --namespace string                       the namespace scope for this operation (default "flux-system")
       --network-policy                         deny ingress access to the toolkit controllers from other namespaces using network policies (default true)
       --private-key-file string                path to a private key file used for authenticating to the Git SSH server
+      --recurse-submodules                     when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces
       --registry string                        container registry where the toolkit images are published (default "ghcr.io/fluxcd")
       --secret-name string                     name of the secret the sync credentials can be found in or stored to (default "flux-system")
       --ssh-ecdsa-curve ecdsaCurve             SSH ECDSA public key curve (p256, p384, p521) (default p384)
diff --git a/docs/cmd/flux_bootstrap_gitlab.md b/docs/cmd/flux_bootstrap_gitlab.md
index a3a6823f..fbf17666 100644
--- a/docs/cmd/flux_bootstrap_gitlab.md
+++ b/docs/cmd/flux_bootstrap_gitlab.md
@@ -62,7 +62,7 @@ flux bootstrap gitlab [flags]
 ```
       --author-email string                    author email for Git commits
       --author-name string                     author name for Git commits (default "Flux")
-      --branch string                          default branch (for GitHub this must match the default branch setting for the organization) (default "main")
+      --branch string                          Git branch (default "main")
       --ca-file string                         path to TLS CA file used for validating self-signed certificates
       --cluster-domain string                  internal cluster domain (default "cluster.local")
       --commit-message-appendix string         string to add to the commit messages, e.g. '[ci skip]'
@@ -75,6 +75,7 @@ flux bootstrap gitlab [flags]
   -n, --namespace string                       the namespace scope for this operation (default "flux-system")
       --network-policy                         deny ingress access to the toolkit controllers from other namespaces using network policies (default true)
       --private-key-file string                path to a private key file used for authenticating to the Git SSH server
+      --recurse-submodules                     when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces
       --registry string                        container registry where the toolkit images are published (default "ghcr.io/fluxcd")
       --secret-name string                     name of the secret the sync credentials can be found in or stored to (default "flux-system")
       --ssh-ecdsa-curve ecdsaCurve             SSH ECDSA public key curve (p256, p384, p521) (default p384)
diff --git a/docs/cmd/flux_create_source_git.md b/docs/cmd/flux_create_source_git.md
index faab2f92..6d6daf23 100644
--- a/docs/cmd/flux_create_source_git.md
+++ b/docs/cmd/flux_create_source_git.md
@@ -70,7 +70,7 @@ flux create source git [name] [flags]
   -h, --help                                   help for git
   -p, --password string                        basic authentication password
       --private-key-file string                path to a passwordless private key file used for authenticating to the Git SSH server
-      --recurse-submodules                     when enabled, after the clone is created, initializes all Git submodules within
+      --recurse-submodules                     when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces
       --secret-ref string                      the name of an existing secret containing SSH or basic credentials
       --ssh-ecdsa-curve ecdsaCurve             SSH ECDSA public key curve (p256, p384, p521) (default p384)
       --ssh-key-algorithm publicKeyAlgorithm   SSH public key algorithm (rsa, ecdsa, ed25519) (default rsa)
diff --git a/pkg/manifestgen/sync/options.go b/pkg/manifestgen/sync/options.go
index d406435c..71da1e47 100644
--- a/pkg/manifestgen/sync/options.go
+++ b/pkg/manifestgen/sync/options.go
@@ -30,6 +30,7 @@ type Options struct {
 	TargetPath        string
 	ManifestFile      string
 	GitImplementation string
+	RecurseSubmodules bool
 }
 
 func MakeDefaultOptions() Options {
diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go
index 37f70f90..b2557208 100644
--- a/pkg/manifestgen/sync/sync.go
+++ b/pkg/manifestgen/sync/sync.go
@@ -56,6 +56,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) {
 				Name: options.Secret,
 			},
 			GitImplementation: options.GitImplementation,
+			RecurseSubmodules: options.RecurseSubmodules,
 		},
 	}
 
-- 
GitLab