From e649269cff2663f46fbf55bb42d5f4fe804f2d8c Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixriv@amazon.com>
Date: Thu, 15 Aug 2024 15:43:29 -0700
Subject: [PATCH 01/21] added eks-a-releaser files

---
 .../create-branch.yml                         |   8 +
 .../create-release.yml                        |   8 +
 .../go-build-binary.yml                       |  14 +
 .../eks-a-releaser-buildspec/prod-bundle.yml  |   8 +
 .../eks-a-releaser-buildspec/prod-cli.yml     |   8 +
 .../eks-a-releaser-buildspec/stage-bundle.yml |   8 +
 .../eks-a-releaser-buildspec/stage-cli.yml    |   8 +
 .../update-homebrew.yml                       |   8 +
 .../update-makefile.yml                       |   8 +
 .../eks-a-releaser-buildspec/update-prow.yml  |   8 +
 release/cli/cmd/create-branch.go              | 182 +++++++++
 release/cli/cmd/create-release.go             | 174 +++++++++
 release/cli/cmd/prod-bundle.go                | 145 +++++++
 release/cli/cmd/prod-cli.go                   | 139 +++++++
 release/cli/cmd/stage-bundle.go               | 248 ++++++++++++
 release/cli/cmd/stage-cli.go                  | 140 +++++++
 release/cli/cmd/trigger.go                    |  31 ++
 release/cli/cmd/update-homebrew.go            | 156 ++++++++
 release/cli/cmd/update-makefile.go            | 156 ++++++++
 release/cli/cmd/update-prow.go                | 306 +++++++++++++++
 release/cli/go.mod                            |  25 +-
 release/cli/go.sum                            | 364 ++++--------------
 22 files changed, 1855 insertions(+), 297 deletions(-)
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/create-branch.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/create-release.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/prod-bundle.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/prod-cli.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/stage-bundle.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/stage-cli.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/update-homebrew.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/update-makefile.yml
 create mode 100644 release/buildspecs/eks-a-releaser-buildspec/update-prow.yml
 create mode 100644 release/cli/cmd/create-branch.go
 create mode 100644 release/cli/cmd/create-release.go
 create mode 100644 release/cli/cmd/prod-bundle.go
 create mode 100644 release/cli/cmd/prod-cli.go
 create mode 100644 release/cli/cmd/stage-bundle.go
 create mode 100644 release/cli/cmd/stage-cli.go
 create mode 100644 release/cli/cmd/trigger.go
 create mode 100644 release/cli/cmd/update-homebrew.go
 create mode 100644 release/cli/cmd/update-makefile.go
 create mode 100644 release/cli/cmd/update-prow.go

diff --git a/release/buildspecs/eks-a-releaser-buildspec/create-branch.yml b/release/buildspecs/eks-a-releaser-buildspec/create-branch.yml
new file mode 100644
index 000000000000..7f0ed89a6e7d
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/create-branch.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger create-branch
diff --git a/release/buildspecs/eks-a-releaser-buildspec/create-release.yml b/release/buildspecs/eks-a-releaser-buildspec/create-release.yml
new file mode 100644
index 000000000000..f03d09f9eaab
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/create-release.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger create-release
diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
new file mode 100644
index 000000000000..162bf085951c
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -0,0 +1,14 @@
+version: 0.2
+
+phases:
+  pre_build:
+    commands:
+    - ./release/scripts/setup.sh
+
+  build:
+    commands:
+    - make dev-release -C release
+
+  artifacts:
+  files:
+    - release/bin/eks-anywhere-release
\ No newline at end of file
diff --git a/release/buildspecs/eks-a-releaser-buildspec/prod-bundle.yml b/release/buildspecs/eks-a-releaser-buildspec/prod-bundle.yml
new file mode 100644
index 000000000000..a960cef5b0fa
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/prod-bundle.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger prod-bundle
diff --git a/release/buildspecs/eks-a-releaser-buildspec/prod-cli.yml b/release/buildspecs/eks-a-releaser-buildspec/prod-cli.yml
new file mode 100644
index 000000000000..00c1183127cb
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/prod-cli.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger prod-cli
diff --git a/release/buildspecs/eks-a-releaser-buildspec/stage-bundle.yml b/release/buildspecs/eks-a-releaser-buildspec/stage-bundle.yml
new file mode 100644
index 000000000000..adf61df8d011
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/stage-bundle.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger stage-bundle
diff --git a/release/buildspecs/eks-a-releaser-buildspec/stage-cli.yml b/release/buildspecs/eks-a-releaser-buildspec/stage-cli.yml
new file mode 100644
index 000000000000..7843842741e2
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/stage-cli.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger stage-cli
diff --git a/release/buildspecs/eks-a-releaser-buildspec/update-homebrew.yml b/release/buildspecs/eks-a-releaser-buildspec/update-homebrew.yml
new file mode 100644
index 000000000000..f0646e828fba
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/update-homebrew.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger update-homebrew
diff --git a/release/buildspecs/eks-a-releaser-buildspec/update-makefile.yml b/release/buildspecs/eks-a-releaser-buildspec/update-makefile.yml
new file mode 100644
index 000000000000..10ce1719996c
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/update-makefile.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger update-makefile
diff --git a/release/buildspecs/eks-a-releaser-buildspec/update-prow.yml b/release/buildspecs/eks-a-releaser-buildspec/update-prow.yml
new file mode 100644
index 000000000000..af875f2175f9
--- /dev/null
+++ b/release/buildspecs/eks-a-releaser-buildspec/update-prow.yml
@@ -0,0 +1,8 @@
+version: 0.2
+env:
+  secrets-manager:
+    SECRET_PAT: "github-eks-distro-pr-bot:github-token"
+phases:
+  build:
+    commands:
+      - ${CODEBUILD_SRC_DIR}/release/bin/eks-anywhere-release trigger update-prow
diff --git a/release/cli/cmd/create-branch.go b/release/cli/cmd/create-branch.go
new file mode 100644
index 000000000000..76c295caeea0
--- /dev/null
+++ b/release/cli/cmd/create-branch.go
@@ -0,0 +1,182 @@
+package cmd
+
+/*
+	what does this command do?
+
+	if release type is "minor" then :
+	creates a new release branch in upstream eks-a repo based off "main" & build tooling repo
+
+	creates a new release branch in forked repo based off newly created release branch in upstream repo
+
+	else :
+	creates a new patch branch in users forked repo based off latest release branch upstream
+
+*/
+
+import (
+	"context"
+	"fmt"
+	"os"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	buildToolingRepoName = "eks-anywhere-build-tooling"
+	upStreamRepoOwner    = "testerIbix" // will eventually be replaced by actual upstream owner, aws
+)
+
+// createBranchCmd represents the createBranch command
+var createBranchCmd = &cobra.Command{
+	Use:   "create-branch",
+	Short: "Creates new release branch from updated trigger file",
+	Long: `A longer description that spans multiple lines and likely contains examples
+and usage of using your command.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+
+		err := releaseDecision()
+		if err != nil {
+			fmt.Printf("error creating branch %s", err)
+		}
+	},
+}
+
+func releaseDecision() error {
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	if RELEASE_TYPE == "minor" {
+		err := createMinorBranches()
+		if err != nil {
+			fmt.Printf("error calling createMinorBranches %s", err)
+		}
+		return nil
+	}
+	// else
+	err := createPatchBranch()
+	if err != nil {
+		fmt.Printf("error calling createPatchBranch %s", err)
+	}
+	return nil
+}
+
+func createMinorBranches() error {
+
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	//create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// create branch in upstream repo based off main branch
+	ref := "refs/heads/" + latestRelease
+	baseRef := "main"
+
+	// Get the reference for the base branch
+	baseRefObj, _, err := client.Git.GetRef(ctx, upStreamRepoOwner, EKSAnyrepoName, "heads/"+baseRef)
+	if err != nil {
+		return fmt.Errorf("error getting base branch reference one: %v", err)
+	}
+
+	// Create a new branch
+	newBranchRef, _, err := client.Git.CreateRef(ctx, upStreamRepoOwner, EKSAnyrepoName, &github.Reference{
+		Ref: &ref,
+		Object: &github.GitObject{
+			SHA: baseRefObj.Object.SHA,
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("error creating branch one: %v", err)
+	}
+
+	// branch created upstream
+	fmt.Printf("New release branch '%s' created upstream successfully\n", *newBranchRef.Ref)
+
+	// create branch in forked repo based off upstream
+	ref = "refs/heads/" + latestRelease
+	baseRef = latestRelease
+
+	// Get the reference for the base branch from the upstream repository
+	baseRefObj, _, err = client.Git.GetRef(ctx, upStreamRepoOwner, EKSAnyrepoName, "heads/"+baseRef)
+	if err != nil {
+		return fmt.Errorf("error getting base branch reference two: %v", err)
+	}
+
+	// Create a new branch
+	newBranchRef, _, err = client.Git.CreateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, &github.Reference{
+		Ref: &ref,
+		Object: &github.GitObject{
+			SHA: baseRefObj.Object.SHA,
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("error creating branch two: %v", err)
+	}
+
+	// branch created upstream
+	fmt.Printf("New user fork branch '%s' created successfully\n", *newBranchRef.Ref)
+
+	// create branch in upstream build tooling repo based off main branch
+	ref = "refs/heads/" + latestRelease
+	baseRef = "main"
+
+	// Get the reference for the base branch
+	baseRefObj, _, err = client.Git.GetRef(ctx, upStreamRepoOwner, buildToolingRepoName, "heads/"+baseRef)
+	if err != nil {
+		return fmt.Errorf("error getting base branch reference three: %v", err)
+	}
+
+	// Create a new branch
+	newBranchRef, _, err = client.Git.CreateRef(ctx, upStreamRepoOwner, buildToolingRepoName, &github.Reference{
+		Ref: &ref,
+		Object: &github.GitObject{
+			SHA: baseRefObj.Object.SHA,
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("error creating branch three: %v", err)
+	}
+
+	// branch created upstream
+	fmt.Printf("New build tooling branch '%s' created successfully\n", *newBranchRef.Ref)
+
+	return nil
+}
+
+func createPatchBranch() error {
+
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	//create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// create branch in forked repo based off upstream
+	ref := "refs/heads/" + latestRelease + "-releaser-patch"
+	baseRef := latestRelease
+
+	// Get the reference for the base branch from upstream
+	baseRefObj, _, err := client.Git.GetRef(ctx, upStreamRepoOwner, EKSAnyrepoName, "heads/"+baseRef)
+	if err != nil {
+		return fmt.Errorf("error getting base branch reference: %v", err)
+	}
+
+	// Create a new branch in fork
+	newBranchRef, _, err := client.Git.CreateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, &github.Reference{
+		Ref: &ref,
+		Object: &github.GitObject{
+			SHA: baseRefObj.Object.SHA,
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("error creating branch: %v", err)
+	}
+
+	// branch created upstream
+	fmt.Printf("New branch '%s' created successfully\n", *newBranchRef.Ref)
+
+	return nil
+}
diff --git a/release/cli/cmd/create-release.go b/release/cli/cmd/create-release.go
new file mode 100644
index 000000000000..e02c88afd842
--- /dev/null
+++ b/release/cli/cmd/create-release.go
@@ -0,0 +1,174 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for creating a release tag with the commit hash that triggered the prod CLI release
+
+	depending on release type, either minor or patch branch will be checked to retrieve commit hash
+*/
+
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+	"golang.org/x/oauth2"
+)
+
+// createReleaseCmd represents the createRelease command
+var createReleaseCmd = &cobra.Command{
+	Use:   "create-release",
+	Short: "A brief description of your command",
+	Long: `A longer description that spans multiple lines and likely contains examples
+and usage of using your command.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		runBothTag()
+	},
+}
+
+func runBothTag() {
+
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	//retrieve commit hash
+	commitHash := retrieveLatestProdCLIHash(RELEASE_TYPE)
+
+	//create tag with commit hash
+	tag, errOne := createTag(commitHash)
+	if errOne != nil {
+		log.Panic(errOne)
+	}
+
+	rel, errTwo := createGitHubRelease(tag)
+	if errTwo != nil {
+		log.Panic(errTwo)
+	}
+
+	//print release object
+	fmt.Print(rel)
+}
+
+// creates tag using retrieved commit hash
+func createTag(commitHash string) (*github.RepositoryRelease, error) {
+
+	// retrieve tag name "v0.0.00"
+	latestVersionValue := os.Getenv("LATEST_VERSION")
+
+	//create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+
+	// Create a new GitHub client instance with the token type set to "Bearer"
+	ts := oauth2.StaticTokenSource(&oauth2.Token{
+		AccessToken: accessToken,
+		TokenType:   "Bearer",
+	})
+	tc := oauth2.NewClient(ctx, ts)
+	client := github.NewClient(tc)
+
+	releaseName := latestVersionValue
+	releaseDesc := latestVersionValue //"EKS-Anywhere " + latestVersionValue + " release"
+	commitSHA := commitHash
+	release := &github.RepositoryRelease{
+		TagName:         github.String(releaseName),
+		Name:            github.String(releaseName),
+		Body:            github.String(releaseDesc),
+		TargetCommitish: github.String(commitSHA),
+	}
+
+	rel, _, err := client.Repositories.CreateRelease(ctx, upStreamRepoOwner, EKSAnyrepoName, release)
+	if err != nil {
+		fmt.Printf("error creating release: %v", err)
+	}
+
+	fmt.Printf("Release tag %s created successfully!\n", rel.GetTagName())
+	return rel, nil
+}
+
+func retrieveLatestProdCLIHash(releaseType string) string {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	if releaseType == "minor" {
+
+		//create client
+		accessToken := os.Getenv("SECRET_PAT")
+		ctx := context.Background()
+		client := github.NewClient(nil).WithAuthToken(accessToken)
+
+		opts := &github.CommitsListOptions{
+			Path: prodCliReleaseVerPath, // file to check
+			SHA:  latestRelease,         // branch to check - release-0.xx
+		}
+
+		commits, _, err := client.Repositories.ListCommits(ctx, usersForkedRepoAccount, EKSAnyrepoName, opts)
+		if err != nil {
+			return "error fetching commits list"
+		}
+
+		if len(commits) > 0 {
+			latestCommit := commits[0]
+			return latestCommit.GetSHA()
+		}
+
+		return "no commits found for file"
+
+	}
+
+	// else
+	//create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	opts := &github.CommitsListOptions{
+		Path: prodCliReleaseVerPath,             // file to check
+		SHA:  latestRelease + "-releaser-patch", // branch to check - release-0.xx-releaser-patch
+	}
+
+	commits, _, err := client.Repositories.ListCommits(ctx, usersForkedRepoAccount, EKSAnyrepoName, opts)
+	if err != nil {
+		return "error fetching commits list"
+	}
+
+	if len(commits) > 0 {
+		latestCommit := commits[0]
+		return latestCommit.GetSHA()
+	}
+
+	return "no commits found for file"
+
+}
+
+func createGitHubRelease(releaseTag *github.RepositoryRelease) (*github.RepositoryRelease, error) {
+
+	latestVersionValue := os.Getenv("LATEST_VERSION")
+
+	//create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	release, _, err := client.Repositories.GetReleaseByTag(ctx, upStreamRepoOwner, EKSAnyrepoName, latestVersionValue)
+	if err == nil {
+		fmt.Printf("Release %s already exists!\n", latestVersionValue)
+		return release, nil
+	}
+
+	release = &github.RepositoryRelease{
+		TagName: releaseTag.TagName,
+		Name:    &latestVersionValue,
+		Body:    releaseTag.Body,
+	}
+
+	rel, _, err := client.Repositories.CreateRelease(ctx, upStreamRepoOwner, EKSAnyrepoName, release)
+	if err != nil {
+		return nil, err
+	}
+
+	return rel, nil
+}
diff --git a/release/cli/cmd/prod-bundle.go b/release/cli/cmd/prod-bundle.go
new file mode 100644
index 000000000000..4498a6d7cc0e
--- /dev/null
+++ b/release/cli/cmd/prod-bundle.go
@@ -0,0 +1,145 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for staging prod bundle release
+
+	A PR is then created originating from the forked repo targeting the upstream repo latest release branch
+
+	changes are committed into branch depending on release type
+*/
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	prodBundleNumPath     = "release/triggers/bundle-release/production/BUNDLE_NUMBER"
+	prodCliMaxVersionPath = "release/triggers/bundle-release/production/CLI_MAX_VERSION"
+	prodCliMinVersionPath = "release/triggers/bundle-release/production/CLI_MIN_VERSION"
+)
+
+// prodBundleCmd represents the prodBundle command
+var prodBundleCmd = &cobra.Command{
+	Use:   "prod-bundle",
+	Short: "creates a PR containing a single commit updating the contents of 3 files intended for prod bundle release",
+	Long: `Retrieves updated content for production : bundle number, cli max version, and cli min version. 
+	Writes the updated changes to the 3 files and raises a PR with a single commit.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		err := updateAllProdBundleFiles()
+		if err != nil {
+			log.Panic(err)
+		}
+	},
+}
+
+func updateAllProdBundleFiles() error {
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	_, err := updateProdBundleFiles(RELEASE_TYPE)
+	if err != nil {
+		return err
+	}
+
+	err = createProdBundlePullRequest(RELEASE_TYPE)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func updateProdBundleFiles(releaseType string) (string, error) {
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	bundleNumber := os.Getenv("RELEASE_NUMBER")
+	latestVersion := os.Getenv("LATEST_VERSION")
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Get the latest commit SHA from the appropriate branch
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
+	if err != nil {
+		return "", fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(prodBundleNumPath, "/")), Type: github.String("blob"), Content: github.String(string(bundleNumber)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(prodCliMaxVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(prodCliMinVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return "", fmt.Errorf("error creating tree %s", err)
+	}
+
+	newTreeSHA := tree.GetSHA()
+
+	// Create a new commit with all the changes
+	author := &github.CommitAuthor{
+		Name:  github.String("eks-a-releaser"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update version files for production bundle release"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return "", fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// Update the branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return "", fmt.Errorf("error updating ref %s", err)
+	}
+
+	return newCommitSHA, nil
+}
+
+func createProdBundlePullRequest(releaseType string) error {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	base := latestRelease // Target branch for upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, getBranchName(releaseType, latestRelease))
+	title := "Update version files to stage production bundle release"
+	body := "This pull request is responsible for updating the contents of 3 separate files in order to trigger the production bundle release pipeline"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
diff --git a/release/cli/cmd/prod-cli.go b/release/cli/cmd/prod-cli.go
new file mode 100644
index 000000000000..c512af0378d0
--- /dev/null
+++ b/release/cli/cmd/prod-cli.go
@@ -0,0 +1,139 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for staging prod cli release
+
+	A PR is then created originating from the forked repo targeting the upstream repo latest release branch
+
+	changes are committed into branch depending on release type
+*/
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	prodCliReleaseNumPath = "release/triggers/eks-a-release/production/RELEASE_NUMBER"
+	prodCliReleaseVerPath = "release/triggers/eks-a-release/production/RELEASE_VERSION"
+)
+
+// prodCliCmd represents the prodCli command
+var prodCliCmd = &cobra.Command{
+	Use:   "prod-cli",
+	Short: "creates a PR containing a single commit updating the contents of 2 files intended for prod cli release",
+	Long: `Retrieves updated content for production : release_number and release_version. 
+	Writes the updated changes to the two files and raises a PR with a single commit.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		updateAllProdCliFiles()
+	},
+}
+
+// runs both updates functions
+func updateAllProdCliFiles() {
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	_, err := updateProdCliFiles(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+
+	err = createProdCliPullRequest(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+}
+
+func updateProdCliFiles(releaseType string) (string, error) {
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	releaseNumber := os.Getenv("RELEASE_NUMBER")
+	latestVersion := os.Getenv("LATEST_VERSION")
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Get the latest commit SHA from the appropriate branch
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
+	if err != nil {
+		return "", fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(prodCliReleaseNumPath, "/")), Type: github.String("blob"), Content: github.String(string(releaseNumber)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(prodCliReleaseVerPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return "", fmt.Errorf("error creating tree %s", err)
+	}
+
+	newTreeSHA := tree.GetSHA()
+
+	// Create a new commit with all the changes
+	author := &github.CommitAuthor{
+		Name:  github.String("ibix16"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update version files for prod cli release"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return "", fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// Update the branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return "", fmt.Errorf("error updating ref %s", err)
+	}
+
+	return newCommitSHA, nil
+}
+
+func createProdCliPullRequest(releaseType string) error {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	base := latestRelease // Target branch for upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, getBranchName(releaseType, latestRelease))
+	title := "Update version files to stage prod cli release"
+	body := "This pull request is responsible for updating the contents of 2 separate files in order to trigger the prod cli release pipeline"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
diff --git a/release/cli/cmd/stage-bundle.go b/release/cli/cmd/stage-bundle.go
new file mode 100644
index 000000000000..e7b7663a36ff
--- /dev/null
+++ b/release/cli/cmd/stage-bundle.go
@@ -0,0 +1,248 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for staging bundle release
+
+	A PR is created originating from the forked repo targeting the upstream repo latest release branch
+
+	changes are committed into branch depending on release type
+*/
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"net/http"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	bundleNumPath     = "release/triggers/bundle-release/development/BUNDLE_NUMBER"
+	cliMaxVersionPath = "release/triggers/bundle-release/development/CLI_MAX_VERSION"
+	cliMinVersionPath = "release/triggers/bundle-release/development/CLI_MIN_VERSION"
+	//triggerFilePath         = "release/triggers/eks-a-releaser-trigger"
+	usersForkedRepoAccount = getAuthenticatedUsername()
+)
+
+// stageBundleCmd represents the stageBundle command
+var stageBundleCmd = &cobra.Command{
+	Use:   "stage-bundle",
+	Short: "creates a PR containing 3 commits, each updating the contents of a singular file intended for staging bundle release",
+	Long: `Retrieves updated content for development : bundle number, cli max version, and cli min version. 
+	Writes the updated changes to the 3 files and raises a PR with the 3 commits.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+
+		err := runAllStagebundle()
+		if err != nil {
+			log.Fatal(err)
+		}
+	},
+}
+
+func runAllStagebundle() error {
+
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	commitSHA, err := updateFilesStageBundle(RELEASE_TYPE)
+	if err != nil {
+		return err
+	}
+	fmt.Print(commitSHA)
+
+	err = createPullRequestStageBundleTwo(RELEASE_TYPE)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func updateFilesStageBundle(releaseType string) (string, error) {
+
+	// create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// env variables
+	bundleNumber := os.Getenv("RELEASE_NUMBER")
+	latestVersion := os.Getenv("LATEST_VERSION")
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Get the latest commit SHA from the appropriate branch, patch vs minor
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
+	if err != nil {
+		return "", fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(bundleNumPath, "/")), Type: github.String("blob"), Content: github.String(string(bundleNumber)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliMaxVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliMinVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return "", fmt.Errorf("error creating tree %s", err)
+	}
+
+	newTreeSHA := tree.GetSHA()
+
+	// Create a new commit with all the changes
+	author := &github.CommitAuthor{
+		Name:  github.String("ibix16"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update version files for bundle release"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return "", fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// Update the branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return "", fmt.Errorf("error updating ref %s", err)
+	}
+
+	return newCommitSHA, nil
+}
+
+func createPullRequestStageBundleTwo(releaseType string) error {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	base := latestRelease // Target branch for upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, getBranchName(releaseType, latestRelease))
+	title := "Update version files to stage bundle release"
+	body := "This pull request is responsible for updating the contents of 3 separate files in order to trigger the staging bundle release pipeline"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
+
+func getBranchName(releaseType, latestRelease string) string {
+	if releaseType == "minor" {
+		return latestRelease
+	}
+	return latestRelease + "-releaser-patch"
+}
+
+// non related to staging bundle release
+// User represents the user's GitHub account information.
+type User struct {
+	Login             string `json:"login"`
+	ID                int    `json:"id"`
+	NodeID            string `json:"node_id"`
+	AvatarURL         string `json:"avatar_url"`
+	GravatarID        string `json:"gravatar_id"`
+	URL               string `json:"url"`
+	HTMLURL           string `json:"html_url"`
+	FollowersURL      string `json:"followers_url"`
+	FollowingURL      string `json:"following_url"`
+	GistsURL          string `json:"gists_url"`
+	StarredURL        string `json:"starred_url"`
+	SubscriptionsURL  string `json:"subscriptions_url"`
+	OrganizationsURL  string `json:"organizations_url"`
+	ReposURL          string `json:"repos_url"`
+	EventsURL         string `json:"events_url"`
+	ReceivedEventsURL string `json:"received_events_url"`
+	Type              string `json:"type"`
+	SiteAdmin         bool   `json:"site_admin"`
+	Name              string `json:"name"`
+	Company           string `json:"company"`
+	Blog              string `json:"blog"`
+	Location          string `json:"location"`
+	Email             string `json:"email"`
+	Hireable          bool   `json:"hireable"`
+	Bio               string `json:"bio"`
+	TwitterUsername   string `json:"twitter_username"`
+	PublicRepos       int    `json:"public_repos"`
+	PublicGists       int    `json:"public_gists"`
+	Followers         int    `json:"followers"`
+	Following         int    `json:"following"`
+	CreatedAt         string `json:"created_at"`
+	UpdatedAt         string `json:"updated_at"`
+}
+
+func getAuthenticatedUsername() string {
+
+	// username is fetched using gh PAT
+	accessToken := os.Getenv("SECRET_PAT")
+	// github PAT is retrieved from secrets manager / buildspec file
+
+	// Create a new HTTP client
+	client := &http.Client{}
+
+	// Create a new HTTP request
+	req, err := http.NewRequest("GET", "https://api.github.com/user", nil)
+	if err != nil {
+		return "error creating HTTP request"
+	}
+
+	// Set the authorization header with the personal access token
+	req.Header.Set("Authorization", "token "+accessToken)
+
+	// Send the HTTP request
+	resp, err := client.Do(req)
+	if err != nil {
+		return "error sending HTTP request"
+	}
+	defer resp.Body.Close()
+
+	// Read the response body
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		return "error reading response body"
+	}
+
+	// Check if the request was successful
+	if resp.StatusCode != http.StatusOK {
+		return "failed to retrieve user information"
+	}
+
+	// Unmarshal the response body into a User struct
+	var user User
+	err = json.Unmarshal(body, &user)
+	if err != nil {
+		return "error unmarshalling"
+	}
+
+	stringUser := user.Login
+	return stringUser
+}
diff --git a/release/cli/cmd/stage-cli.go b/release/cli/cmd/stage-cli.go
new file mode 100644
index 000000000000..b7ef7ec27681
--- /dev/null
+++ b/release/cli/cmd/stage-cli.go
@@ -0,0 +1,140 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for staging cli release
+
+	A PR is then created originating from the forked repo targeting the upstream repo latest release branch
+
+	changes are committed into branch depending on release type
+*/
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	cliReleaseNumPath = "release/triggers/eks-a-release/development/RELEASE_NUMBER"
+	cliReleaseVerPath = "release/triggers/eks-a-release/development/RELEASE_VERSION"
+)
+
+// stageCliCmd represents the stageCli command
+var stageCliCmd = &cobra.Command{
+	Use:   "stage-cli",
+	Short: "creates a PR containing a single commit updating the contents of 2 files intended for staging cli release",
+	Long: `Retrieves updated content for development : release_number and release_version. 
+	Writes the updated changes to the two files and raises a PR with a single commit.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		updateAllStageCliFiles()
+	},
+}
+
+// runs both update functions
+func updateAllStageCliFiles() {
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	commitSHA, err := updateFilesStageCli(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+	fmt.Print(commitSHA)
+
+	err = createPullRequestStageCli(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+}
+
+func updateFilesStageCli(releaseType string) (string, error) {
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	releaseNumber := os.Getenv("RELEASE_NUMBER")
+	latestVersion := os.Getenv("LATEST_VERSION")
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Get the latest commit SHA from the appropriate branch
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
+	if err != nil {
+		return "", fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliReleaseNumPath, "/")), Type: github.String("blob"), Content: github.String(string(releaseNumber)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliReleaseVerPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
+
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return "", fmt.Errorf("error creating tree %s", err)
+	}
+
+	newTreeSHA := tree.GetSHA()
+
+	// Create a new commit with all the changes
+	author := &github.CommitAuthor{
+		Name:  github.String("ibix16"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update version files for cli release"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return "", fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// Update the branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return "", fmt.Errorf("error updating ref %s", err)
+	}
+
+	return newCommitSHA, nil
+}
+
+func createPullRequestStageCli(releaseType string) error {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	base := latestRelease // Target branch for upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, getBranchName(releaseType, latestRelease))
+	title := "Update version files to stage cli release"
+	body := "This pull request is responsible for updating the contents of 2 separate files in order to trigger the staging cli release pipeline"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
diff --git a/release/cli/cmd/trigger.go b/release/cli/cmd/trigger.go
new file mode 100644
index 000000000000..eb840dd05e76
--- /dev/null
+++ b/release/cli/cmd/trigger.go
@@ -0,0 +1,31 @@
+package cmd
+
+import (
+	"github.com/spf13/cobra"
+)
+
+// rootCmd represents the base command when called without any subcommands
+var triggerCmd = &cobra.Command{
+	Use:   "trigger",
+	Short: "A brief description of your application",
+	Long: `A longer description that spans multiple lines and likely contains
+examples and usage of using your application. For example:
+
+Cobra is a CLI library for Go that empowers applications.
+This application is a tool to generate the needed files
+to quickly create a Cobra application.`,
+}
+
+func init() {
+	// rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
+	rootCmd.AddCommand(triggerCmd)
+	triggerCmd.AddCommand(updateMakefileCmd)
+	triggerCmd.AddCommand(updateProwCmd)
+	triggerCmd.AddCommand(stageBundleCmd)
+	triggerCmd.AddCommand(stageCliCmd)
+	triggerCmd.AddCommand(prodBundleCmd)
+	triggerCmd.AddCommand(prodCliCmd)
+	triggerCmd.AddCommand(createBranchCmd)
+	triggerCmd.AddCommand(updateHomebrewCmd)
+	triggerCmd.AddCommand(createReleaseCmd)
+}
diff --git a/release/cli/cmd/update-homebrew.go b/release/cli/cmd/update-homebrew.go
new file mode 100644
index 000000000000..c9d1bcaf36c1
--- /dev/null
+++ b/release/cli/cmd/update-homebrew.go
@@ -0,0 +1,156 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for updating the homebrew file
+
+	A PR is then created originating from the forked repo targeting the upstream repo latest release branch
+
+	changes are committed into branch depending on release type
+*/
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	homebrewPath = "release/triggers/brew-version-release/CLI_RELEASE_VERSION"
+)
+
+// updateHomebrewCmd represents the updateHomebrew command
+var updateHomebrewCmd = &cobra.Command{
+	Use:   "update-homebrew",
+	Short: "Updates homebrew with latest version in eks-a-releaser branch, PR targets release branch",
+	Long: `A longer description that spans multiple lines and likely contains examples
+and usage of using your command.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		runAllHomebrew()
+	},
+}
+
+func runAllHomebrew() {
+	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
+
+	_, err := updateHomebrew(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+
+	err = createPullRequestHomebrew(RELEASE_TYPE)
+	if err != nil {
+		log.Panic(err)
+	}
+}
+
+func updateHomebrew(releaseType string) (string, error) {
+
+	// env variables
+	latestVersionValue := os.Getenv("LATEST_VERSION")
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	opts := &github.RepositoryContentGetOptions{
+		Ref: "main", // Specific branch to check for homebrew file
+	}
+
+	// Access homebrew file
+	FileContentBundleNumber, _, _, err := client.Repositories.GetContents(ctx, usersForkedRepoAccount, EKSAnyrepoName, homebrewPath, opts)
+	if err != nil {
+		fmt.Print("first breakpoint", err)
+	}
+
+	// Holds content of homebrew cli version file
+	content, err := FileContentBundleNumber.GetContent()
+	if err != nil {
+		fmt.Print("second breakpoint", err)
+	}
+
+	// Update instances of previous release with new
+	updatedFile := strings.ReplaceAll(content, content, latestVersionValue)
+
+	// Get the latest commit SHA from the appropriate branch
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
+	if err != nil {
+		return "", fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(homebrewPath, "/")), Type: github.String("blob"), Content: github.String(string(updatedFile)), Mode: github.String("100644")})
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return "", fmt.Errorf("error creating tree %s", err)
+	}
+
+	newTreeSHA := tree.GetSHA()
+
+	// Create a new commit
+	author := &github.CommitAuthor{
+		Name:  github.String("ibix16"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update brew-version value to point to new release"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return "", fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// Update the branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return "", fmt.Errorf("error updating ref %s", err)
+	}
+
+	return newCommitSHA, nil
+}
+
+func createPullRequestHomebrew(releaseType string) error {
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	base := latestRelease // Target branch for upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, getBranchName(releaseType, latestRelease))
+	title := "Update homebrew cli version value to point to new release"
+	body := "This pull request is responsible for updating the contents of the home brew cli version file"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
diff --git a/release/cli/cmd/update-makefile.go b/release/cli/cmd/update-makefile.go
new file mode 100644
index 000000000000..4641076879a1
--- /dev/null
+++ b/release/cli/cmd/update-makefile.go
@@ -0,0 +1,156 @@
+package cmd
+
+/*
+	what does this command do?
+
+	this command is responsible for accessing and updating the Makefile with the latest release value
+
+	the updated makefile is committed to the latest release branch, forked repo
+
+	and a pull request is raised targeting the upstream repo latest release branch
+*/
+
+import (
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	EKSAnyrepoName = "eks-anywhere"
+	makeFilePath   = "/Makefile"
+)
+
+// upMakeFileCmd represents the upMakeFile command
+var updateMakefileCmd = &cobra.Command{
+	Use:   "update-makefile",
+	Short: "Updates BRANCH_NAME?= variable to match new release branch within the Makefile",
+	Long:  `A longer description.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		content := updateMakefile()
+		fmt.Print(content)
+	},
+}
+
+func updateMakefile() error {
+
+	// create client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// string variable holding latest release from env "release-0.xx"
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	opts := &github.RepositoryContentGetOptions{
+		Ref: "main", // branch that will be accessed
+	}
+
+	// access makefile in forked repo and retrieve entire file contents
+	triggerFileContentBundleNumber, _, _, err := client.Repositories.GetContents(ctx, usersForkedRepoAccount, EKSAnyrepoName, makeFilePath, opts)
+	if err != nil {
+		fmt.Print("first breakpoint", err)
+	}
+	// holds makefile
+	content, err := triggerFileContentBundleNumber.GetContent()
+	if err != nil {
+		fmt.Print("second breakpoint", err)
+	}
+
+	// stores entire updated Makefile as a string
+	updatedContent := returnUpdatedMakeFile(content, latestRelease)
+
+	// get latest commit sha from latest release branch
+	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+latestRelease)
+	if err != nil {
+		return fmt.Errorf("error getting ref %s", err)
+	}
+	latestCommitSha := ref.Object.GetSHA()
+
+	entries := []*github.TreeEntry{}
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(makeFilePath, "/")), Type: github.String("blob"), Content: github.String(string(updatedContent)), Mode: github.String("100644")})
+	tree, _, err := client.Git.CreateTree(ctx, usersForkedRepoAccount, EKSAnyrepoName, *ref.Object.SHA, entries)
+	if err != nil {
+		return fmt.Errorf("error creating tree %s", err)
+	}
+
+	//validate tree sha
+	newTreeSHA := tree.GetSHA()
+
+	// create new commit, update email address
+	author := &github.CommitAuthor{
+		Name:  github.String("ibix16"),
+		Email: github.String("fake@wtv.com"),
+	}
+
+	commit := &github.Commit{
+		Message: github.String("Update Makefile"),
+		Tree:    &github.Tree{SHA: github.String(newTreeSHA)},
+		Author:  author,
+		Parents: []*github.Commit{{SHA: github.String(latestCommitSha)}},
+	}
+
+	commitOP := &github.CreateCommitOptions{}
+	newCommit, _, err := client.Git.CreateCommit(ctx, usersForkedRepoAccount, EKSAnyrepoName, commit, commitOP)
+	if err != nil {
+		return fmt.Errorf("creating commit %s", err)
+	}
+	newCommitSHA := newCommit.GetSHA()
+
+	// update branch reference
+	ref.Object.SHA = github.String(newCommitSHA)
+
+	_, _, err = client.Git.UpdateRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, ref, false)
+	if err != nil {
+		return fmt.Errorf("error updating ref %s", err)
+	}
+
+	// create pull request
+	base := latestRelease // branch PR will be merged into
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, latestRelease)
+	title := "Updates Makefile to point to new release"
+	body := "This pull request is responsible for updating the contents of the Makefile"
+
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, EKSAnyrepoName, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR %s", err)
+	}
+
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+
+}
+
+// updates Makefile with new release, returns entire file updated
+func returnUpdatedMakeFile(fileContent, newRelease string) string {
+	snippetStartIdentifierB := "BRANCH_NAME?="
+	lines := strings.Split(fileContent, "\n")
+	var updatedLines []string
+
+	for _, line := range lines {
+		if strings.Contains(line, snippetStartIdentifierB) {
+			parts := strings.Split(line, "=")
+			varNamePart := parts[0] // holds "BRANCH_NAME?"
+			updatedLine := varNamePart + "=" + newRelease
+			updatedLines = append(updatedLines, updatedLine)
+		} else {
+			updatedLines = append(updatedLines, line)
+		}
+	}
+
+	return strings.Join(updatedLines, "\n")
+
+}
diff --git a/release/cli/cmd/update-prow.go b/release/cli/cmd/update-prow.go
new file mode 100644
index 000000000000..86b7b94f3422
--- /dev/null
+++ b/release/cli/cmd/update-prow.go
@@ -0,0 +1,306 @@
+package cmd
+
+/*
+	what does this command do?
+
+	(1) creates a folder on user's Desktop
+	(2) clones github prow repo (update account name)
+	(3) Renames templater file and updates contents
+	(4) executes make command
+	(5) creates a branch on user's fork of prow repo
+	(6) stages, commits, and pushes changes to newly created branch
+	(7) creates PR targeting upstream "main" branch
+
+	Only command to include local cloning of repo
+*/
+
+import (
+	"context"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"regexp"
+	"strings"
+	"time"
+
+	"github.com/aws/eks-anywhere-build-tooling/tools/version-tracker/pkg/util/command"
+	"github.com/go-git/go-git/v5"
+	"github.com/go-git/go-git/v5/config"
+	"github.com/go-git/go-git/v5/plumbing/object"
+	"github.com/go-git/go-git/v5/plumbing/transport/http"
+	"github.com/google/go-github/v62/github"
+	"github.com/spf13/cobra"
+)
+
+var (
+	prowRepo = "eks-anywhere-prow-jobs"
+)
+
+// upProwCmd represents the upProw command
+var updateProwCmd = &cobra.Command{
+	Use:   "update-prow",
+	Short: "accesses prow-jobs repo and updates version files",
+	Long:  `A`,
+	Run: func(cmd *cobra.Command, args []string) {
+		updateProw()
+	},
+}
+
+func updateProw() {
+
+	latestRelease := os.Getenv("LATEST_RELEASE")
+
+	// Step 1: Create a folder on the user's desktop
+	homeDir, err := os.UserHomeDir()
+	if err != nil {
+		fmt.Printf("error getting user home directory: %v", err)
+		return
+	}
+	desktopPath := filepath.Join(homeDir, "Desktop")
+	newFolderPath := filepath.Join(desktopPath, "ProwJobsRepo")
+	err = os.Mkdir(newFolderPath, 0755)
+	if err != nil {
+		fmt.Println("Error creating folder:", err)
+		return
+	}
+	fmt.Println("Folder created successfully at:", newFolderPath)
+
+	//clones github repo into newly created folder
+	clonedRepoDestination := filepath.Join(homeDir, "Desktop", "ProwJobsRepo")
+	repo, err := cloneRepo("https://github.com/ibix16/eks-anywhere-prow-jobs", clonedRepoDestination)
+	if err != nil {
+		fmt.Printf("error cloning repo: %v", err)
+		return
+	}
+
+	// Step 2: Rename the file with the latest version
+	originalFilePath, err := retrieveFilePath(clonedRepoDestination + "/templater/jobs/periodic/eks-anywhere-build-tooling")
+	if err != nil {
+		fmt.Printf("error fetching path to file on cloned repo: %v", err)
+	}
+	newFilePath := clonedRepoDestination + "/templater/jobs/periodic/eks-anywhere-build-tooling/eks-anywhere-attribution-periodics-" + latestRelease + ".yaml"
+	err = os.Rename(originalFilePath, newFilePath)
+	if err != nil {
+		fmt.Printf("error renaming file: %v", err)
+		return
+	}
+
+	// Step 3: Update file contents
+	convertedRelease := strings.Replace(latestRelease, ".", "-", 1)
+	content, err := ioutil.ReadFile(newFilePath)
+	if err != nil {
+		log.Fatalf("Failed to read file: %v", err)
+	}
+	releasePattern := regexp.MustCompile(`release-0\.\d+\d+`)
+	jobNamePattern := regexp.MustCompile(`release-0-\d+\d+`)
+	updatedContent := releasePattern.ReplaceAllString(string(content), latestRelease)
+	updatedContent = jobNamePattern.ReplaceAllString(updatedContent, convertedRelease)
+	err = ioutil.WriteFile(newFilePath, []byte(updatedContent), 0644)
+	if err != nil {
+		log.Fatalf("Failed to write file: %v", err)
+	}
+	fmt.Println("File updated successfully.")
+
+	// Execute make command
+	err = makeCommand()
+	if err != nil {
+		fmt.Printf("error running make command: %v", err)
+		return
+	}
+	fmt.Println("Make command executed successfully.")
+
+	// Create a branch in the user's forked repo
+	err = createProwBranch(usersForkedRepoAccount, prowRepo)
+	if err != nil {
+		fmt.Printf("error creating branch: %v", err)
+		return
+	}
+
+	// Commit and push changes to the branch
+	err = commitAndPushChanges(repo, latestRelease+"-releaser")
+	if err != nil {
+		fmt.Printf("error pushing changes to branch: %v", err)
+		return
+	}
+	fmt.Println("Changes pushed successfully.")
+
+	// Create PR
+	err = createProwPr()
+	if err != nil {
+		fmt.Printf("error creating PR: %v", err)
+		return
+	}
+
+	// delete folder
+	err = os.RemoveAll(clonedRepoDestination)
+	if err != nil {
+		fmt.Printf("error deleting folder: %s", err)
+	}
+
+	fmt.Println("Folder deleted successfully from desktop.")
+
+}
+
+// return full system file path to templater file on cloned repo
+func retrieveFilePath(directory string) (string, error) {
+	var filePath string
+	err := filepath.Walk(directory, func(path string, info os.FileInfo, err error) error {
+		if err != nil {
+			return err // Return the error immediately
+		}
+		if !info.IsDir() && strings.Contains(info.Name(), "release-0.") {
+			filePath = path
+			return nil // Stop walking after finding the first matching file
+		}
+		return nil
+	})
+	if err != nil {
+		return "", err // Return the error if one occurred during the walk
+	}
+	if filePath == "" {
+		return "", fmt.Errorf("no file found with 'release-0.' in its name")
+	}
+	return filePath, nil
+}
+
+// clones prow jobs repo on local machine destination
+func cloneRepo(cloneURL, destination string) (*git.Repository, error) {
+	repo, err := git.PlainClone(destination, false, &git.CloneOptions{
+		URL:      cloneURL,
+		Progress: os.Stdout,
+	})
+	if err != nil {
+		if err == git.ErrRepositoryAlreadyExists {
+			fmt.Printf("Repo already exists at %s\n", destination)
+			repo, err = git.PlainOpen(destination)
+			if err != nil {
+				return nil, fmt.Errorf("opening repo from %s directory: %v", destination, err)
+			}
+		} else {
+			return nil, fmt.Errorf("cloning repo %s to %s directory: %v", cloneURL, destination, err)
+		}
+	}
+	return repo, nil
+}
+
+// function to execute make command located within templater dir
+func makeCommand() error {
+	desktopPath, err := os.UserHomeDir()
+	if err != nil {
+		fmt.Printf("error getting user home directory: %v", err)
+		return nil
+	}
+	clonedRepoPath := filepath.Join(desktopPath, "Desktop", "ProwJobsRepo")
+	templaterDirPath := filepath.Join(clonedRepoPath, "templater")
+	updateProwJobsCommandSequence := fmt.Sprintf("make prowjobs -C %s", templaterDirPath)
+	updateProwJobsCmd := exec.Command("bash", "-c", updateProwJobsCommandSequence)
+	_, err = command.ExecCommand(updateProwJobsCmd)
+	if err != nil {
+		return fmt.Errorf("running make prowjobs command: %v", err)
+	}
+	return nil
+}
+
+func createProwBranch(owner, repo string) error {
+
+	latestRelease := os.Getenv("LATEST_RELEASE")
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// Get the latest commit on the "main" branch
+	mainBranch, _, err := client.Git.GetRef(ctx, owner, repo, "refs/heads/main")
+	if err != nil {
+		return fmt.Errorf("failed to get 'main' branch: %v", err)
+	}
+	latestCommit, _, err := client.Git.GetCommit(ctx, owner, repo, *mainBranch.Object.SHA)
+	if err != nil {
+		return fmt.Errorf("failed to get latest commit: %v", err)
+	}
+	// Create a new reference for the branch
+	newRef := &github.Reference{
+		Ref: github.String("refs/heads/" + latestRelease + "-releaser"),
+		Object: &github.GitObject{
+			SHA: latestCommit.SHA,
+		},
+	}
+	// Create the new branch
+	_, _, err = client.Git.CreateRef(ctx, owner, repo, newRef)
+	if err != nil {
+		return fmt.Errorf("failed to create 'releaser' branch: %v", err)
+	}
+	fmt.Println("Branch created successfully")
+	return nil
+}
+
+// Commits and pushes the changes to the new branch
+func commitAndPushChanges(repo *git.Repository, branchName string) error {
+
+	w, err := repo.Worktree()
+	if err != nil {
+		return fmt.Errorf("could not get worktree: %v", err)
+	}
+	// Stage all changes
+	err = w.AddGlob(".")
+	if err != nil {
+		return fmt.Errorf("could not stage changes: %v", err)
+	}
+	// Commit changes
+	_, err = w.Commit("Update prow jobs for "+branchName, &git.CommitOptions{
+		Author: &object.Signature{
+			Name: "your-github-username", // Update with your GitHub username
+			When: time.Now(),
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("could not commit changes: %v", err)
+	}
+	// Push changes to  the new branch
+	accessToken := os.Getenv("SECRET_PAT")
+	err = repo.Push(&git.PushOptions{
+		RemoteName: "origin",
+		Auth: &http.BasicAuth{
+			Username: "your-github-username", // Update with your GitHub username
+			Password: accessToken,            // GitHub personal access token
+		},
+		RefSpecs: []config.RefSpec{
+			config.RefSpec("refs/heads/main" + ":refs/heads/" + branchName),
+		},
+	})
+	if err != nil {
+		return fmt.Errorf("could not push changes: %v", err)
+	}
+	return nil
+}
+
+// Function to create the PR
+func createProwPr() error {
+
+	latestRelease := os.Getenv("LATEST_RELEASE")
+	// Create a GitHub client
+	accessToken := os.Getenv("SECRET_PAT")
+	ctx := context.Background()
+	client := github.NewClient(nil).WithAuthToken(accessToken)
+
+	// Create a PR from this branch
+	branchName := latestRelease + "-releaser"
+	base := "main"                                                   // target branch in upstream repo
+	head := fmt.Sprintf("%s:%s", usersForkedRepoAccount, branchName) // PR originates from
+	title := "Update Prow Jobs Templater file & execute make command"
+	body := "This pull request contains the most recent commit from the release branch."
+	newPR := &github.NewPullRequest{
+		Title: &title,
+		Head:  &head,
+		Base:  &base,
+		Body:  &body,
+	}
+	pr, _, err := client.PullRequests.Create(ctx, upStreamRepoOwner, prowRepo, newPR)
+	if err != nil {
+		return fmt.Errorf("error creating PR: %s", err)
+	}
+	log.Printf("Pull request created: %s\n", pr.GetHTMLURL())
+	return nil
+}
diff --git a/release/cli/go.mod b/release/cli/go.mod
index ff852dcf946b..46c77faf7533 100644
--- a/release/cli/go.mod
+++ b/release/cli/go.mod
@@ -5,16 +5,20 @@ go 1.22.4
 require (
 	github.com/aws/aws-sdk-go v1.54.12
 	github.com/aws/aws-sdk-go-v2 v1.30.1
-	github.com/aws/eks-anywhere v0.18.0
-	github.com/aws/eks-distro-build-tooling/release v0.0.0-20211103003257-a7e2379eae5e
+	github.com/aws/eks-anywhere v0.18.3
+	github.com/aws/eks-anywhere-build-tooling/tools/version-tracker v0.0.0-20240815210949-837386fac62f
+	github.com/aws/eks-distro-build-tooling/release v0.0.0-20240513204929-c69ded04ed10
 	github.com/fsouza/go-dockerclient v1.11.0
 	github.com/ghodss/yaml v1.0.0
+	github.com/go-git/go-git/v5 v5.11.0
 	github.com/go-logr/logr v1.4.2
+	github.com/google/go-github/v62 v62.0.0
 	github.com/mitchellh/go-homedir v1.1.0
 	github.com/onsi/gomega v1.33.1
 	github.com/pkg/errors v0.9.1
 	github.com/spf13/cobra v1.8.1
 	github.com/spf13/viper v1.19.0
+	golang.org/x/oauth2 v0.21.0
 	golang.org/x/sync v0.7.0
 	helm.sh/helm/v3 v3.15.1
 	k8s.io/apimachinery v0.30.2
@@ -24,6 +28,7 @@ require (
 )
 
 require (
+	dario.cat/mergo v1.0.0 // indirect
 	github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
 	github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
 	github.com/BurntSushi/toml v1.3.2 // indirect
@@ -35,11 +40,13 @@ require (
 	github.com/Masterminds/squirrel v1.5.4 // indirect
 	github.com/Microsoft/go-winio v0.6.1 // indirect
 	github.com/Microsoft/hcsshim v0.11.4 // indirect
+	github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
 	github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
 	github.com/aws/smithy-go v1.20.3 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/chai2010/gettext-go v1.0.2 // indirect
+	github.com/cloudflare/circl v1.3.7 // indirect
 	github.com/containerd/containerd v1.7.12 // indirect
 	github.com/containerd/log v0.1.0 // indirect
 	github.com/cyphar/filepath-securejoin v0.2.4 // indirect
@@ -53,6 +60,7 @@ require (
 	github.com/docker/go-metrics v0.0.1 // indirect
 	github.com/docker/go-units v0.5.0 // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
+	github.com/emirpasic/gods v1.18.1 // indirect
 	github.com/evanphx/json-patch v5.7.0+incompatible // indirect
 	github.com/evanphx/json-patch/v5 v5.9.0 // indirect
 	github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
@@ -60,8 +68,11 @@ require (
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/go-errors/errors v1.4.2 // indirect
+	github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
+	github.com/go-git/go-billy/v5 v5.5.0 // indirect
 	github.com/go-gorp/gorp/v3 v3.1.0 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-logr/zapr v1.3.0 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 	github.com/go-openapi/jsonreference v0.20.2 // indirect
 	github.com/go-openapi/swag v0.22.3 // indirect
@@ -72,6 +83,7 @@ require (
 	github.com/google/btree v1.0.1 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-cmp v0.6.0 // indirect
+	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
 	github.com/google/uuid v1.6.0 // indirect
@@ -85,10 +97,12 @@ require (
 	github.com/huandu/xstrings v1.4.0 // indirect
 	github.com/imdario/mergo v0.3.13 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
 	github.com/jmoiron/sqlx v1.3.5 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/kevinburke/ssh_config v1.2.0 // indirect
 	github.com/klauspost/compress v1.17.2 // indirect
 	github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
 	github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
@@ -120,6 +134,7 @@ require (
 	github.com/opencontainers/image-spec v1.1.0 // indirect
 	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
 	github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
+	github.com/pjbgf/sha1cd v0.3.0 // indirect
 	github.com/prometheus/client_golang v1.18.0 // indirect
 	github.com/prometheus/client_model v0.5.0 // indirect
 	github.com/prometheus/common v0.45.0 // indirect
@@ -128,13 +143,16 @@ require (
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/sagikazarmark/locafero v0.4.0 // indirect
 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+	github.com/sergi/go-diff v1.2.0 // indirect
 	github.com/shopspring/decimal v1.3.1 // indirect
 	github.com/sirupsen/logrus v1.9.3 // indirect
+	github.com/skeema/knownhosts v1.2.1 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/spf13/afero v1.11.0 // indirect
 	github.com/spf13/cast v1.6.0 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
+	github.com/xanzy/ssh-agent v0.3.3 // indirect
 	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
 	github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
 	github.com/xeipuuv/gojsonschema v1.2.0 // indirect
@@ -145,11 +163,11 @@ require (
 	go.opentelemetry.io/otel/trace v1.24.0 // indirect
 	go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
 	go.uber.org/multierr v1.11.0 // indirect
+	go.uber.org/zap v1.26.0 // indirect
 	golang.org/x/crypto v0.22.0 // indirect
 	golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
 	golang.org/x/mod v0.17.0 // indirect
 	golang.org/x/net v0.24.0 // indirect
-	golang.org/x/oauth2 v0.21.0 // indirect
 	golang.org/x/sys v0.19.0 // indirect
 	golang.org/x/term v0.19.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
@@ -161,6 +179,7 @@ require (
 	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/warnings.v0 v0.1.2 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	k8s.io/api v0.30.1 // indirect
diff --git a/release/cli/go.sum b/release/cli/go.sum
index c8151e027646..91998c812d81 100644
--- a/release/cli/go.sum
+++ b/release/cli/go.sum
@@ -1,22 +1,13 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
 github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
 github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
 github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
 github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
 github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
@@ -32,44 +23,37 @@ github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj
 github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
 github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
 github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
+github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
 github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
 github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
 github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
 github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
-github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
+github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
 github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
 github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
+github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
-github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
 github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/aws/aws-sdk-go v1.38.40/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
 github.com/aws/aws-sdk-go v1.54.12 h1:xPDB+GSBZq0rJbmDZF+EyfMbnWRyfEPcn7PZ7bJjXSw=
 github.com/aws/aws-sdk-go v1.54.12/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
 github.com/aws/aws-sdk-go-v2 v1.30.1 h1:4y/5Dvfrhd1MxRDD77SrfsDaj8kUkkljU7XE83NPV+o=
 github.com/aws/aws-sdk-go-v2 v1.30.1/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
-github.com/aws/eks-distro-build-tooling/release v0.0.0-20211103003257-a7e2379eae5e h1:GB6Cn9yKEt31mDF7RrVWyM9WoppNkGYth8zBPIJGJ+w=
-github.com/aws/eks-distro-build-tooling/release v0.0.0-20211103003257-a7e2379eae5e/go.mod h1:p/KHVJAMv3kofnUnShkZ6pUnZYzm+LK2G7bIi8nnTKA=
+github.com/aws/eks-anywhere-build-tooling/tools/version-tracker v0.0.0-20240815210949-837386fac62f h1:B1a0y5GJfqPdwphOgmeLIZxkfgV+fUPRcBi0AgPdhCk=
+github.com/aws/eks-anywhere-build-tooling/tools/version-tracker v0.0.0-20240815210949-837386fac62f/go.mod h1:Cz5iit1QmzfRJqsIOC5SBjwdaIzgRVQN9O/du+FSmIU=
+github.com/aws/eks-distro-build-tooling/release v0.0.0-20240513204929-c69ded04ed10 h1:tHMJTH65peauXPtaF/NRhgxhQU8gIOcbEpmLlv3l5EI=
+github.com/aws/eks-distro-build-tooling/release v0.0.0-20240513204929-c69ded04ed10/go.mod h1:NzE2uGUGDDkCIcZh+xxbq1SBHsEu1AR9QT3lpKPZXRc=
 github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE=
 github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=
 github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
 github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng=
@@ -78,6 +62,7 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembj
 github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
 github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o=
 github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
+github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -87,7 +72,9 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
+github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
+github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
 github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
 github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
 github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
@@ -96,29 +83,16 @@ github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG
 github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
 github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
 github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
-github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
 github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
 github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
-github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc=
 github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI=
 github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
@@ -127,7 +101,6 @@ github.com/docker/cli v27.0.3+incompatible h1:usGs0/BoBW8MWxGeEtqPMkzOY56jZ6kYlS
 github.com/docker/cli v27.0.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
 github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
 github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1byg2QSXzBxBGg=
 github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
@@ -138,32 +111,24 @@ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ
 github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
 github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
 github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
-github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4=
 github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
+github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
 github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
+github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
 github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
 github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
 github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM=
 github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
 github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
@@ -172,81 +137,42 @@ github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6
 github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4=
 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/fsouza/go-dockerclient v1.11.0 h1:4ZAk6W7rPAtPXm7198EFqA5S68rwnNQORxlOA5OurCA=
 github.com/fsouza/go-dockerclient v1.11.0/go.mod h1:0I3TQCRseuPTzqlY4Y3ajfsg2VAdMQoazrkxJTiJg8s=
-github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
+github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
 github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
 github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
+github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
+github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
+github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
+github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
+github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
+github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
 github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
 github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
 github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
 github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
 github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
-github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
-github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
-github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
-github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
 github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
-github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
 github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
 github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk=
-github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
-github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
 github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
 github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
@@ -262,18 +188,12 @@ github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXs
 github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -287,8 +207,6 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k=
 github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
@@ -299,33 +217,28 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
+github.com/google/go-github/v62 v62.0.0 h1:/6mGCaRywZz9MuHyw9gD1CwsbmBX8GWsbFkwMmHdhl4=
+github.com/google/go-github/v62 v62.0.0/go.mod h1:EMxeUqGJq2xRu9DYBMwel/mr7kZrzUOfQmmpYrZn2a4=
+github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg=
 github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
-github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
 github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
 github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
 github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
 github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -333,53 +246,42 @@ github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY=
 github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
 github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
 github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
 github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
 github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
-github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
 github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
 github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
 github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
-github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
 github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
-github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
+github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
@@ -391,7 +293,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
@@ -404,15 +305,8 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
 github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI=
@@ -421,14 +315,11 @@ github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY
 github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI=
 github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI=
 github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
 github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
@@ -446,7 +337,6 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
 github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
-github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
 github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
@@ -469,7 +359,6 @@ github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
@@ -478,48 +367,35 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/
 github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
 github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
 github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
-github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g=
 github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
 github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
 github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
 github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
 github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
 github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
 github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
+github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
+github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY=
 github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg=
-github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
@@ -539,61 +415,46 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
 github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
 github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
 github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
-github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
 github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0=
 github.com/rubenv/sql-migrate v1.5.2/go.mod h1:H38GW8Vqf8F0Su5XignRyaRcbXbJunSWxs+kmzlg0Is=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
 github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
 github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
 github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
 github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
 github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
 github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
+github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
 github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
 github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
-github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
 github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
-github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
 github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
 github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
 github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
-github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
 github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
 github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
-github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -607,11 +468,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
+github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
+github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -619,10 +477,8 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
 github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
-github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
 github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -632,12 +488,6 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMzt
 github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY=
 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
-go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
@@ -650,103 +500,77 @@ go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y
 go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
 go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY=
 go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
 go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
+golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
+golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
 golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
 golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
 golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
 golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
 golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -754,74 +578,57 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
 golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
 golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
 golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
-golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=
 golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU=
 gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
 gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
-gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
-gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
-gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
 google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
@@ -837,20 +644,15 @@ google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGm
 google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
-gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -862,61 +664,38 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
 gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
 helm.sh/helm/v3 v3.15.1 h1:22ztacHz4gMqhXNqCQ9NAg6BFWoRUryNLvnkz6OVyw0=
 helm.sh/helm/v3 v3.15.1/go.mod h1:fvfoRcB8UKRUV5jrIfOTaN/pG1TPhuqSb56fjYdTKXg=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4=
 k8s.io/api v0.30.1 h1:kCm/6mADMdbAxmIh0LBjS54nQBE+U4KmbCfIkF5CpJY=
 k8s.io/api v0.30.1/go.mod h1:ddbN2C0+0DIiPntan/bye3SW3PdwLa11/0yqwvuRrJM=
-k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs=
 k8s.io/apiextensions-apiserver v0.30.1 h1:4fAJZ9985BmpJG6PkoxVRpXv9vmPUOVzl614xarePws=
 k8s.io/apiextensions-apiserver v0.30.1/go.mod h1:R4GuSrlhgq43oRY9sF2IToFh7PVlF1JjfWdoG3pixk4=
-k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
 k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg=
 k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
-k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo=
 k8s.io/apiserver v0.30.1 h1:BEWEe8bzS12nMtDKXzCF5Q5ovp6LjjYkSp8qOPk8LZ8=
 k8s.io/apiserver v0.30.1/go.mod h1:i87ZnQ+/PGAmSbD/iEKM68bm1D5reX8fO4Ito4B01mo=
 k8s.io/cli-runtime v0.30.0 h1:0vn6/XhOvn1RJ2KJOC6IRR2CGqrpT6QQF4+8pYpWQ48=
 k8s.io/cli-runtime v0.30.0/go.mod h1:vATpDMATVTMA79sZ0YUCzlMelf6rUjoBzlp+RnoM+cg=
-k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI=
 k8s.io/client-go v0.30.1 h1:uC/Ir6A3R46wdkgCV3vbLyNOYyCJ8oZnjtJGKfytl/Q=
 k8s.io/client-go v0.30.1/go.mod h1:wrAqLNs2trwiCH/wxxmT/x3hKVH9PuV0GGW0oDoHVqc=
-k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s=
-k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs=
 k8s.io/component-base v0.30.1 h1:bvAtlPh1UrdaZL20D9+sWxsJljMi0QZ3Lmw+kmZAaxQ=
 k8s.io/component-base v0.30.1/go.mod h1:e/X9kDiOebwlI41AvBHuWdqFriSRrX50CdwA9TFaHLI=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/helm v2.17.0+incompatible h1:Bpn6o1wKLYqKM3+Osh8e+1/K2g/GsQJ4F4yNF2+deao=
 k8s.io/helm v2.17.0+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI=
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
 k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
 k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
 k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
 k8s.io/kubectl v0.30.0 h1:xbPvzagbJ6RNYVMVuiHArC1grrV5vSmmIcSZuCdzRyk=
 k8s.io/kubectl v0.30.0/go.mod h1:zgolRw2MQXLPwmic2l/+iHs239L49fhSeICuMhQQXTI=
-k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
 k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
-modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
-modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
-modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
-modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
 oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo=
 oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo=
-sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKGhb2sCtAXiT8=
 sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw=
 sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
@@ -925,10 +704,7 @@ sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKU
 sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY=
 sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
-sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18=
 sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
 sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

From 4c4a633a66b91d27dac5bd50ec04674d224293ad Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:16:13 -0700
Subject: [PATCH 02/21] Update go-build-binary.yml

---
 .../buildspecs/eks-a-releaser-buildspec/go-build-binary.yml   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 162bf085951c..1120d70ff624 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -10,5 +10,5 @@ phases:
     - make dev-release -C release
 
   artifacts:
-  files:
-    - release/bin/eks-anywhere-release
\ No newline at end of file
+    files:
+      - release/bin/eks-anywhere-release

From 98146b4635b0fd429cddbae531547a3d6f40450f Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:17:44 -0700
Subject: [PATCH 03/21] Update go-build-binary.yml

---
 .../eks-a-releaser-buildspec/go-build-binary.yml          | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 1120d70ff624..54f6a05d2754 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -1,14 +1,12 @@
+---
 version: 0.2
-
 phases:
   pre_build:
     commands:
-    - ./release/scripts/setup.sh
-
+      - ./release/scripts/setup.sh
   build:
     commands:
-    - make dev-release -C release
-
+      - make dev-release -C release
   artifacts:
     files:
       - release/bin/eks-anywhere-release

From ea696d0b4aea47b15a844fda5c53e8c3fa0e273c Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:19:02 -0700
Subject: [PATCH 04/21] Update go-build-binary.yml

---
 .../eks-a-releaser-buildspec/go-build-binary.yml       | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 54f6a05d2754..1ea636309d48 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -1,12 +1,14 @@
----
 version: 0.2
+
 phases:
   pre_build:
     commands:
       - ./release/scripts/setup.sh
+
   build:
     commands:
       - make dev-release -C release
-  artifacts:
-    files:
-      - release/bin/eks-anywhere-release
+
+artifacts:
+  files:
+    - release/bin/eks-anywhere-release

From 99cc20811774fbef73fb31546eccda41be7209f7 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:32:06 -0700
Subject: [PATCH 05/21] Update create-branch.go

---
 release/cli/cmd/create-branch.go | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/release/cli/cmd/create-branch.go b/release/cli/cmd/create-branch.go
index 76c295caeea0..eb3467233118 100644
--- a/release/cli/cmd/create-branch.go
+++ b/release/cli/cmd/create-branch.go
@@ -16,6 +16,7 @@ package cmd
 import (
 	"context"
 	"fmt"
+	"log"
 	"os"
 
 	"github.com/google/go-github/v62/github"
@@ -25,6 +26,11 @@ import (
 var (
 	buildToolingRepoName = "eks-anywhere-build-tooling"
 	upStreamRepoOwner    = "testerIbix" // will eventually be replaced by actual upstream owner, aws
+	latestRelease        = os.Getenv("LATEST_RELEASE")
+	RELEASE_TYPE         = os.Getenv("RELEASE_TYPE")
+	latestVersion        = os.Getenv("LATEST_VERSION")
+	releaseNumber        = os.Getenv("RELEASE_NUMBER")
+	accessToken          = os.Getenv("SECRET_PAT")
 )
 
 // createBranchCmd represents the createBranch command
@@ -38,33 +44,32 @@ and usage of using your command.`,
 
 		err := releaseDecision()
 		if err != nil {
-			fmt.Printf("error creating branch %s", err)
+			log.Printf("error creating branch %s", err)
 		}
 	},
 }
 
 func releaseDecision() error {
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
 
 	if RELEASE_TYPE == "minor" {
 		err := createMinorBranches()
 		if err != nil {
-			fmt.Printf("error calling createMinorBranches %s", err)
+			log.Printf("error calling createMinorBranches %s", err)
+			return err
 		}
 		return nil
 	}
 	// else
 	err := createPatchBranch()
 	if err != nil {
-		fmt.Printf("error calling createPatchBranch %s", err)
+		log.Printf("error calling createPatchBranch %s", err)
+		return err
 	}
 	return nil
 }
 
 func createMinorBranches() error {
 
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	//create client
 	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
@@ -92,7 +97,7 @@ func createMinorBranches() error {
 	}
 
 	// branch created upstream
-	fmt.Printf("New release branch '%s' created upstream successfully\n", *newBranchRef.Ref)
+	log.Printf("New release branch '%s' created upstream successfully\n", *newBranchRef.Ref)
 
 	// create branch in forked repo based off upstream
 	ref = "refs/heads/" + latestRelease
@@ -116,7 +121,7 @@ func createMinorBranches() error {
 	}
 
 	// branch created upstream
-	fmt.Printf("New user fork branch '%s' created successfully\n", *newBranchRef.Ref)
+	log.Printf("New user fork branch '%s' created successfully\n", *newBranchRef.Ref)
 
 	// create branch in upstream build tooling repo based off main branch
 	ref = "refs/heads/" + latestRelease
@@ -140,15 +145,13 @@ func createMinorBranches() error {
 	}
 
 	// branch created upstream
-	fmt.Printf("New build tooling branch '%s' created successfully\n", *newBranchRef.Ref)
+	log.Printf("New build tooling branch '%s' created successfully\n", *newBranchRef.Ref)
 
 	return nil
 }
 
 func createPatchBranch() error {
 
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	//create client
 	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
@@ -176,7 +179,7 @@ func createPatchBranch() error {
 	}
 
 	// branch created upstream
-	fmt.Printf("New branch '%s' created successfully\n", *newBranchRef.Ref)
+	log.Printf("New branch '%s' created successfully\n", *newBranchRef.Ref)
 
 	return nil
 }

From af7bc6882c121609a02c175dc21fb160b237c06c Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:32:53 -0700
Subject: [PATCH 06/21] Update create-release.go

---
 release/cli/cmd/create-release.go | 61 ++++++++++++-------------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/release/cli/cmd/create-release.go b/release/cli/cmd/create-release.go
index e02c88afd842..9c9dce4a5b46 100644
--- a/release/cli/cmd/create-release.go
+++ b/release/cli/cmd/create-release.go
@@ -10,9 +10,7 @@ package cmd
 
 import (
 	"context"
-	"fmt"
 	"log"
-	"os"
 
 	"github.com/google/go-github/v62/github"
 	"github.com/spf13/cobra"
@@ -22,9 +20,9 @@ import (
 // createReleaseCmd represents the createRelease command
 var createReleaseCmd = &cobra.Command{
 	Use:   "create-release",
-	Short: "A brief description of your command",
-	Long: `A longer description that spans multiple lines and likely contains examples
-and usage of using your command.`,
+	Short: "this command is responsible for creating a release tag with the commit hash that triggered the prod CLI release",
+	Long: `this command is responsible for creating a release tag with the commit hash that triggered the prod CLI release
+	depending on release type, either minor or patch branch will be checked to retrieve commit hash.`,
 
 	Run: func(cmd *cobra.Command, args []string) {
 		runBothTag()
@@ -33,10 +31,11 @@ and usage of using your command.`,
 
 func runBothTag() {
 
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
-
 	//retrieve commit hash
-	commitHash := retrieveLatestProdCLIHash(RELEASE_TYPE)
+	commitHash, HashErr := retrieveLatestProdCLIHash(RELEASE_TYPE)
+	if HashErr != nil {
+		log.Panic(HashErr)
+	} 
 
 	//create tag with commit hash
 	tag, errOne := createTag(commitHash)
@@ -49,20 +48,14 @@ func runBothTag() {
 		log.Panic(errTwo)
 	}
 
-	//print release object
-	fmt.Print(rel)
+	//log release object
+	log.Print(rel)
 }
 
 // creates tag using retrieved commit hash
 func createTag(commitHash string) (*github.RepositoryRelease, error) {
 
-	// retrieve tag name "v0.0.00"
-	latestVersionValue := os.Getenv("LATEST_VERSION")
-
-	//create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
-
 	// Create a new GitHub client instance with the token type set to "Bearer"
 	ts := oauth2.StaticTokenSource(&oauth2.Token{
 		AccessToken: accessToken,
@@ -71,8 +64,8 @@ func createTag(commitHash string) (*github.RepositoryRelease, error) {
 	tc := oauth2.NewClient(ctx, ts)
 	client := github.NewClient(tc)
 
-	releaseName := latestVersionValue
-	releaseDesc := latestVersionValue //"EKS-Anywhere " + latestVersionValue + " release"
+	releaseName := latestVersion
+	releaseDesc := latestVersion //"EKS-Anywhere " + latestVersionValue + " release"
 	commitSHA := commitHash
 	release := &github.RepositoryRelease{
 		TagName:         github.String(releaseName),
@@ -83,20 +76,18 @@ func createTag(commitHash string) (*github.RepositoryRelease, error) {
 
 	rel, _, err := client.Repositories.CreateRelease(ctx, upStreamRepoOwner, EKSAnyrepoName, release)
 	if err != nil {
-		fmt.Printf("error creating release: %v", err)
+		log.Printf("error creating release: %v", err)
 	}
 
-	fmt.Printf("Release tag %s created successfully!\n", rel.GetTagName())
+	log.Printf("Release tag %s created successfully!\n", rel.GetTagName())
 	return rel, nil
 }
 
-func retrieveLatestProdCLIHash(releaseType string) string {
-	latestRelease := os.Getenv("LATEST_RELEASE")
+func retrieveLatestProdCLIHash(releaseType string) (string, error) {
 
 	if releaseType == "minor" {
 
 		//create client
-		accessToken := os.Getenv("SECRET_PAT")
 		ctx := context.Background()
 		client := github.NewClient(nil).WithAuthToken(accessToken)
 
@@ -107,21 +98,20 @@ func retrieveLatestProdCLIHash(releaseType string) string {
 
 		commits, _, err := client.Repositories.ListCommits(ctx, usersForkedRepoAccount, EKSAnyrepoName, opts)
 		if err != nil {
-			return "error fetching commits list"
+			return "error fetching commits list: ", err
 		}
 
 		if len(commits) > 0 {
 			latestCommit := commits[0]
-			return latestCommit.GetSHA()
+			return latestCommit.GetSHA(), nil
 		}
 
-		return "no commits found for file"
+		return "no commits found for file", nil
 
 	}
 
 	// else
 	//create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
@@ -132,36 +122,33 @@ func retrieveLatestProdCLIHash(releaseType string) string {
 
 	commits, _, err := client.Repositories.ListCommits(ctx, usersForkedRepoAccount, EKSAnyrepoName, opts)
 	if err != nil {
-		return "error fetching commits list"
+		return "error fetching commits list: ", err
 	}
 
 	if len(commits) > 0 {
 		latestCommit := commits[0]
-		return latestCommit.GetSHA()
+		return latestCommit.GetSHA(), nil
 	}
 
-	return "no commits found for file"
+	return "no commits found for file", nil
 
 }
 
 func createGitHubRelease(releaseTag *github.RepositoryRelease) (*github.RepositoryRelease, error) {
 
-	latestVersionValue := os.Getenv("LATEST_VERSION")
-
 	//create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
-	release, _, err := client.Repositories.GetReleaseByTag(ctx, upStreamRepoOwner, EKSAnyrepoName, latestVersionValue)
-	if err == nil {
-		fmt.Printf("Release %s already exists!\n", latestVersionValue)
+	release, _, err := client.Repositories.GetReleaseByTag(ctx, upStreamRepoOwner, EKSAnyrepoName, latestVersion)
+	if err != nil {
+		log.Printf("Release %s already exists!\n", latestVersion)
 		return release, nil
 	}
 
 	release = &github.RepositoryRelease{
 		TagName: releaseTag.TagName,
-		Name:    &latestVersionValue,
+		Name:    &latestVersion,
 		Body:    releaseTag.Body,
 	}
 

From a8de66427b339fcff998ac302a78bce0c458aaac Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:33:37 -0700
Subject: [PATCH 07/21] Update prod-bundle.go

---
 release/cli/cmd/prod-bundle.go | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/release/cli/cmd/prod-bundle.go b/release/cli/cmd/prod-bundle.go
index 4498a6d7cc0e..9c242209f564 100644
--- a/release/cli/cmd/prod-bundle.go
+++ b/release/cli/cmd/prod-bundle.go
@@ -42,7 +42,6 @@ var prodBundleCmd = &cobra.Command{
 }
 
 func updateAllProdBundleFiles() error {
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
 
 	_, err := updateProdBundleFiles(RELEASE_TYPE)
 	if err != nil {
@@ -58,13 +57,11 @@ func updateAllProdBundleFiles() error {
 }
 
 func updateProdBundleFiles(releaseType string) (string, error) {
-	accessToken := os.Getenv("SECRET_PAT")
+
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
 	bundleNumber := os.Getenv("RELEASE_NUMBER")
-	latestVersion := os.Getenv("LATEST_VERSION")
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	// Get the latest commit SHA from the appropriate branch
 	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
@@ -116,10 +113,8 @@ func updateProdBundleFiles(releaseType string) (string, error) {
 }
 
 func createProdBundlePullRequest(releaseType string) error {
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 

From 3af8b06bb147fcd0c2adda02fbca74d842ab2465 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:34:08 -0700
Subject: [PATCH 08/21] Update prod-cli.go

---
 release/cli/cmd/prod-cli.go | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/release/cli/cmd/prod-cli.go b/release/cli/cmd/prod-cli.go
index c512af0378d0..e363fe52fadc 100644
--- a/release/cli/cmd/prod-cli.go
+++ b/release/cli/cmd/prod-cli.go
@@ -13,7 +13,6 @@ import (
 	"context"
 	"fmt"
 	"log"
-	"os"
 	"strings"
 
 	"github.com/google/go-github/v62/github"
@@ -39,7 +38,6 @@ var prodCliCmd = &cobra.Command{
 
 // runs both updates functions
 func updateAllProdCliFiles() {
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
 
 	_, err := updateProdCliFiles(RELEASE_TYPE)
 	if err != nil {
@@ -53,14 +51,10 @@ func updateAllProdCliFiles() {
 }
 
 func updateProdCliFiles(releaseType string) (string, error) {
-	accessToken := os.Getenv("SECRET_PAT")
+
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
-	releaseNumber := os.Getenv("RELEASE_NUMBER")
-	latestVersion := os.Getenv("LATEST_VERSION")
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	// Get the latest commit SHA from the appropriate branch
 	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
 	if err != nil {
@@ -81,7 +75,7 @@ func updateProdCliFiles(releaseType string) (string, error) {
 
 	// Create a new commit with all the changes
 	author := &github.CommitAuthor{
-		Name:  github.String("ibix16"),
+		Name:  github.String("eks-a-releaser"),
 		Email: github.String("fake@wtv.com"),
 	}
 
@@ -110,10 +104,8 @@ func updateProdCliFiles(releaseType string) (string, error) {
 }
 
 func createProdCliPullRequest(releaseType string) error {
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 

From 96e94b1b9d9341af32bf5d695ad78697c27fe212 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:34:41 -0700
Subject: [PATCH 09/21] Update stage-bundle.go

---
 release/cli/cmd/stage-bundle.go | 31 ++++++++++---------------------
 1 file changed, 10 insertions(+), 21 deletions(-)

diff --git a/release/cli/cmd/stage-bundle.go b/release/cli/cmd/stage-bundle.go
index e7b7663a36ff..02bfb9e15dc8 100644
--- a/release/cli/cmd/stage-bundle.go
+++ b/release/cli/cmd/stage-bundle.go
@@ -28,8 +28,7 @@ var (
 	bundleNumPath     = "release/triggers/bundle-release/development/BUNDLE_NUMBER"
 	cliMaxVersionPath = "release/triggers/bundle-release/development/CLI_MAX_VERSION"
 	cliMinVersionPath = "release/triggers/bundle-release/development/CLI_MIN_VERSION"
-	//triggerFilePath         = "release/triggers/eks-a-releaser-trigger"
-	usersForkedRepoAccount = getAuthenticatedUsername()
+	usersForkedRepoAccount, _ = getAuthenticatedUsername()
 )
 
 // stageBundleCmd represents the stageBundle command
@@ -50,8 +49,6 @@ var stageBundleCmd = &cobra.Command{
 
 func runAllStagebundle() error {
 
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
-
 	commitSHA, err := updateFilesStageBundle(RELEASE_TYPE)
 	if err != nil {
 		return err
@@ -69,15 +66,9 @@ func runAllStagebundle() error {
 func updateFilesStageBundle(releaseType string) (string, error) {
 
 	// create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
-	// env variables
-	bundleNumber := os.Getenv("RELEASE_NUMBER")
-	latestVersion := os.Getenv("LATEST_VERSION")
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	// Get the latest commit SHA from the appropriate branch, patch vs minor
 	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
 	if err != nil {
@@ -86,7 +77,7 @@ func updateFilesStageBundle(releaseType string) (string, error) {
 	latestCommitSha := ref.Object.GetSHA()
 
 	entries := []*github.TreeEntry{}
-	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(bundleNumPath, "/")), Type: github.String("blob"), Content: github.String(string(bundleNumber)), Mode: github.String("100644")})
+	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(bundleNumPath, "/")), Type: github.String("blob"), Content: github.String(string(releaseNumber)), Mode: github.String("100644")})
 	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliMaxVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
 	entries = append(entries, &github.TreeEntry{Path: github.String(strings.TrimPrefix(cliMinVersionPath, "/")), Type: github.String("blob"), Content: github.String(string(latestVersion)), Mode: github.String("100644")})
 
@@ -99,7 +90,7 @@ func updateFilesStageBundle(releaseType string) (string, error) {
 
 	// Create a new commit with all the changes
 	author := &github.CommitAuthor{
-		Name:  github.String("ibix16"),
+		Name:  github.String("eks-a-releaser"),
 		Email: github.String("fake@wtv.com"),
 	}
 
@@ -128,10 +119,8 @@ func updateFilesStageBundle(releaseType string) (string, error) {
 }
 
 func createPullRequestStageBundleTwo(releaseType string) error {
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
@@ -200,7 +189,7 @@ type User struct {
 	UpdatedAt         string `json:"updated_at"`
 }
 
-func getAuthenticatedUsername() string {
+func getAuthenticatedUsername() (string, error) {
 
 	// username is fetched using gh PAT
 	accessToken := os.Getenv("SECRET_PAT")
@@ -212,7 +201,7 @@ func getAuthenticatedUsername() string {
 	// Create a new HTTP request
 	req, err := http.NewRequest("GET", "https://api.github.com/user", nil)
 	if err != nil {
-		return "error creating HTTP request"
+		return "", fmt.Errorf("error creating HTTP requests: %v", err)
 	}
 
 	// Set the authorization header with the personal access token
@@ -221,28 +210,28 @@ func getAuthenticatedUsername() string {
 	// Send the HTTP request
 	resp, err := client.Do(req)
 	if err != nil {
-		return "error sending HTTP request"
+		return "", fmt.Errorf("error sending HTTP requests: %v", err)
 	}
 	defer resp.Body.Close()
 
 	// Read the response body
 	body, err := ioutil.ReadAll(resp.Body)
 	if err != nil {
-		return "error reading response body"
+		return "", fmt.Errorf("error reading response body: %v", err)
 	}
 
 	// Check if the request was successful
 	if resp.StatusCode != http.StatusOK {
-		return "failed to retrieve user information"
+		return "failed to retrieve user information", nil
 	}
 
 	// Unmarshal the response body into a User struct
 	var user User
 	err = json.Unmarshal(body, &user)
 	if err != nil {
-		return "error unmarshalling"
+		return "", fmt.Errorf("error unmarshalling: %v", err)
 	}
 
 	stringUser := user.Login
-	return stringUser
+	return stringUser, nil
 }

From 77274ecd6bb3b40510c9ce622de1dd84e2a7c4ff Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:35:04 -0700
Subject: [PATCH 10/21] Update stage-cli.go

---
 release/cli/cmd/stage-cli.go | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/release/cli/cmd/stage-cli.go b/release/cli/cmd/stage-cli.go
index b7ef7ec27681..d9e77d28eea1 100644
--- a/release/cli/cmd/stage-cli.go
+++ b/release/cli/cmd/stage-cli.go
@@ -13,7 +13,6 @@ import (
 	"context"
 	"fmt"
 	"log"
-	"os"
 	"strings"
 
 	"github.com/google/go-github/v62/github"
@@ -39,7 +38,6 @@ var stageCliCmd = &cobra.Command{
 
 // runs both update functions
 func updateAllStageCliFiles() {
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
 
 	commitSHA, err := updateFilesStageCli(RELEASE_TYPE)
 	if err != nil {
@@ -54,14 +52,10 @@ func updateAllStageCliFiles() {
 }
 
 func updateFilesStageCli(releaseType string) (string, error) {
-	accessToken := os.Getenv("SECRET_PAT")
+
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
-	releaseNumber := os.Getenv("RELEASE_NUMBER")
-	latestVersion := os.Getenv("LATEST_VERSION")
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	// Get the latest commit SHA from the appropriate branch
 	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
 	if err != nil {
@@ -82,7 +76,7 @@ func updateFilesStageCli(releaseType string) (string, error) {
 
 	// Create a new commit with all the changes
 	author := &github.CommitAuthor{
-		Name:  github.String("ibix16"),
+		Name:  github.String("eks-a-releaser"),
 		Email: github.String("fake@wtv.com"),
 	}
 
@@ -111,10 +105,8 @@ func updateFilesStageCli(releaseType string) (string, error) {
 }
 
 func createPullRequestStageCli(releaseType string) error {
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
+	
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 

From 35093a120abb4b538f70825328ca5a5f2650341e Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:35:23 -0700
Subject: [PATCH 11/21] Update update-homebrew.go

---
 release/cli/cmd/update-homebrew.go | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/release/cli/cmd/update-homebrew.go b/release/cli/cmd/update-homebrew.go
index c9d1bcaf36c1..df0c269d4c26 100644
--- a/release/cli/cmd/update-homebrew.go
+++ b/release/cli/cmd/update-homebrew.go
@@ -13,7 +13,6 @@ import (
 	"context"
 	"fmt"
 	"log"
-	"os"
 	"strings"
 
 	"github.com/google/go-github/v62/github"
@@ -37,8 +36,7 @@ and usage of using your command.`,
 }
 
 func runAllHomebrew() {
-	RELEASE_TYPE := os.Getenv("RELEASE_TYPE")
-
+	
 	_, err := updateHomebrew(RELEASE_TYPE)
 	if err != nil {
 		log.Panic(err)
@@ -52,12 +50,7 @@ func runAllHomebrew() {
 
 func updateHomebrew(releaseType string) (string, error) {
 
-	// env variables
-	latestVersionValue := os.Getenv("LATEST_VERSION")
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
@@ -68,17 +61,17 @@ func updateHomebrew(releaseType string) (string, error) {
 	// Access homebrew file
 	FileContentBundleNumber, _, _, err := client.Repositories.GetContents(ctx, usersForkedRepoAccount, EKSAnyrepoName, homebrewPath, opts)
 	if err != nil {
-		fmt.Print("first breakpoint", err)
+		return "", fmt.Errorf("error accessing homebrew file %s", err)
 	}
 
 	// Holds content of homebrew cli version file
 	content, err := FileContentBundleNumber.GetContent()
 	if err != nil {
-		fmt.Print("second breakpoint", err)
+		return "", fmt.Errorf("error fetching file contents %s", err)
 	}
 
 	// Update instances of previous release with new
-	updatedFile := strings.ReplaceAll(content, content, latestVersionValue)
+	updatedFile := strings.ReplaceAll(content, content, latestVersion)
 
 	// Get the latest commit SHA from the appropriate branch
 	ref, _, err := client.Git.GetRef(ctx, usersForkedRepoAccount, EKSAnyrepoName, "heads/"+getBranchName(releaseType, latestRelease))
@@ -98,7 +91,7 @@ func updateHomebrew(releaseType string) (string, error) {
 
 	// Create a new commit
 	author := &github.CommitAuthor{
-		Name:  github.String("ibix16"),
+		Name:  github.String("eks-a-releaser"),
 		Email: github.String("fake@wtv.com"),
 	}
 
@@ -127,10 +120,8 @@ func updateHomebrew(releaseType string) (string, error) {
 }
 
 func createPullRequestHomebrew(releaseType string) error {
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	// Create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 

From 0e734dea840612f632fa91e932711d1a11cdcc0f Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:35:52 -0700
Subject: [PATCH 12/21] Update update-makefile.go

---
 release/cli/cmd/update-makefile.go | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/release/cli/cmd/update-makefile.go b/release/cli/cmd/update-makefile.go
index 4641076879a1..18fc7e7820b0 100644
--- a/release/cli/cmd/update-makefile.go
+++ b/release/cli/cmd/update-makefile.go
@@ -14,7 +14,6 @@ import (
 	"context"
 	"fmt"
 	"log"
-	"os"
 	"strings"
 
 	"github.com/google/go-github/v62/github"
@@ -41,12 +40,9 @@ var updateMakefileCmd = &cobra.Command{
 func updateMakefile() error {
 
 	// create client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
-	// string variable holding latest release from env "release-0.xx"
-	latestRelease := os.Getenv("LATEST_RELEASE")
 
 	opts := &github.RepositoryContentGetOptions{
 		Ref: "main", // branch that will be accessed
@@ -55,12 +51,12 @@ func updateMakefile() error {
 	// access makefile in forked repo and retrieve entire file contents
 	triggerFileContentBundleNumber, _, _, err := client.Repositories.GetContents(ctx, usersForkedRepoAccount, EKSAnyrepoName, makeFilePath, opts)
 	if err != nil {
-		fmt.Print("first breakpoint", err)
+		return fmt.Errorf("error accessing file : %s", err)
 	}
 	// holds makefile
 	content, err := triggerFileContentBundleNumber.GetContent()
 	if err != nil {
-		fmt.Print("second breakpoint", err)
+		return fmt.Errorf("error fetching file content : %s", err)
 	}
 
 	// stores entire updated Makefile as a string
@@ -85,7 +81,7 @@ func updateMakefile() error {
 
 	// create new commit, update email address
 	author := &github.CommitAuthor{
-		Name:  github.String("ibix16"),
+		Name:  github.String("eks-a-releaser"),
 		Email: github.String("fake@wtv.com"),
 	}
 

From 78e712631d22d380d1bd0d31ba30be27eec7194c Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 13:36:10 -0700
Subject: [PATCH 13/21] Update update-prow.go

---
 release/cli/cmd/update-prow.go | 34 ++++++++++++++--------------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/release/cli/cmd/update-prow.go b/release/cli/cmd/update-prow.go
index 86b7b94f3422..e9c488c4b6da 100644
--- a/release/cli/cmd/update-prow.go
+++ b/release/cli/cmd/update-prow.go
@@ -51,19 +51,17 @@ var updateProwCmd = &cobra.Command{
 
 func updateProw() {
 
-	latestRelease := os.Getenv("LATEST_RELEASE")
-
 	// Step 1: Create a folder on the user's desktop
 	homeDir, err := os.UserHomeDir()
 	if err != nil {
-		fmt.Printf("error getting user home directory: %v", err)
+		log.Printf("error getting user home directory: %v", err)
 		return
 	}
 	desktopPath := filepath.Join(homeDir, "Desktop")
 	newFolderPath := filepath.Join(desktopPath, "ProwJobsRepo")
 	err = os.Mkdir(newFolderPath, 0755)
 	if err != nil {
-		fmt.Println("Error creating folder:", err)
+		log.Println("Error creating folder:", err)
 		return
 	}
 	fmt.Println("Folder created successfully at:", newFolderPath)
@@ -72,19 +70,19 @@ func updateProw() {
 	clonedRepoDestination := filepath.Join(homeDir, "Desktop", "ProwJobsRepo")
 	repo, err := cloneRepo("https://github.com/ibix16/eks-anywhere-prow-jobs", clonedRepoDestination)
 	if err != nil {
-		fmt.Printf("error cloning repo: %v", err)
+		log.Printf("error cloning repo: %v", err)
 		return
 	}
 
 	// Step 2: Rename the file with the latest version
 	originalFilePath, err := retrieveFilePath(clonedRepoDestination + "/templater/jobs/periodic/eks-anywhere-build-tooling")
 	if err != nil {
-		fmt.Printf("error fetching path to file on cloned repo: %v", err)
+		log.Printf("error fetching path to file on cloned repo: %v", err)
 	}
 	newFilePath := clonedRepoDestination + "/templater/jobs/periodic/eks-anywhere-build-tooling/eks-anywhere-attribution-periodics-" + latestRelease + ".yaml"
 	err = os.Rename(originalFilePath, newFilePath)
 	if err != nil {
-		fmt.Printf("error renaming file: %v", err)
+		log.Printf("error renaming file: %v", err)
 		return
 	}
 
@@ -102,12 +100,12 @@ func updateProw() {
 	if err != nil {
 		log.Fatalf("Failed to write file: %v", err)
 	}
-	fmt.Println("File updated successfully.")
+	log.Println("File updated successfully.")
 
 	// Execute make command
 	err = makeCommand()
 	if err != nil {
-		fmt.Printf("error running make command: %v", err)
+		log.Printf("error running make command: %v", err)
 		return
 	}
 	fmt.Println("Make command executed successfully.")
@@ -115,14 +113,14 @@ func updateProw() {
 	// Create a branch in the user's forked repo
 	err = createProwBranch(usersForkedRepoAccount, prowRepo)
 	if err != nil {
-		fmt.Printf("error creating branch: %v", err)
+		log.Printf("error creating branch: %v", err)
 		return
 	}
 
 	// Commit and push changes to the branch
 	err = commitAndPushChanges(repo, latestRelease+"-releaser")
 	if err != nil {
-		fmt.Printf("error pushing changes to branch: %v", err)
+		log.Printf("error pushing changes to branch: %v", err)
 		return
 	}
 	fmt.Println("Changes pushed successfully.")
@@ -130,17 +128,17 @@ func updateProw() {
 	// Create PR
 	err = createProwPr()
 	if err != nil {
-		fmt.Printf("error creating PR: %v", err)
+		log.Printf("error creating PR: %v", err)
 		return
 	}
 
 	// delete folder
 	err = os.RemoveAll(clonedRepoDestination)
 	if err != nil {
-		fmt.Printf("error deleting folder: %s", err)
+		log.Printf("error deleting folder: %s", err)
 	}
 
-	fmt.Println("Folder deleted successfully from desktop.")
+	log.Println("Folder deleted successfully from desktop.")
 
 }
 
@@ -190,7 +188,7 @@ func cloneRepo(cloneURL, destination string) (*git.Repository, error) {
 func makeCommand() error {
 	desktopPath, err := os.UserHomeDir()
 	if err != nil {
-		fmt.Printf("error getting user home directory: %v", err)
+		log.Printf("error getting user home directory: %v", err)
 		return nil
 	}
 	clonedRepoPath := filepath.Join(desktopPath, "Desktop", "ProwJobsRepo")
@@ -206,8 +204,6 @@ func makeCommand() error {
 
 func createProwBranch(owner, repo string) error {
 
-	latestRelease := os.Getenv("LATEST_RELEASE")
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
@@ -278,10 +274,8 @@ func commitAndPushChanges(repo *git.Repository, branchName string) error {
 
 // Function to create the PR
 func createProwPr() error {
-
-	latestRelease := os.Getenv("LATEST_RELEASE")
+	
 	// Create a GitHub client
-	accessToken := os.Getenv("SECRET_PAT")
 	ctx := context.Background()
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 

From ab6cc3db238474b19634cb9ccbd2ddaba7dd1c35 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:01:29 -0700
Subject: [PATCH 14/21] Update go.mod

---
 release/cli/go.mod | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/release/cli/go.mod b/release/cli/go.mod
index 46c77faf7533..dc510dba126f 100644
--- a/release/cli/go.mod
+++ b/release/cli/go.mod
@@ -1,6 +1,6 @@
 module github.com/aws/eks-anywhere/release/cli
 
-go 1.22.4
+go 1.22
 
 require (
 	github.com/aws/aws-sdk-go v1.54.12

From 86bfcf74b312d1843a6623256c839041afe01394 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:10:56 -0700
Subject: [PATCH 15/21] Update go-build-binary.yml

---
 release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 1ea636309d48..615f4b600e9b 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -7,7 +7,7 @@ phases:
 
   build:
     commands:
-      - make dev-release -C release
+      - make build -C release
 
 artifacts:
   files:

From 779b0f6069190e868e3faad80358c612b2a2f64e Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:20:16 -0700
Subject: [PATCH 16/21] Update go-build-binary.yml

---
 .../buildspecs/eks-a-releaser-buildspec/go-build-binary.yml   | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 615f4b600e9b..056c8fe7dfe2 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -1,5 +1,7 @@
 version: 0.2
-
+env: 
+  variables:
+    GOLANG_VERSION: "1.22"
 phases:
   pre_build:
     commands:

From 6da1f675f313421b8d3d3efeddc0ee1543fff780 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:28:31 -0700
Subject: [PATCH 17/21] Update go.mod

---
 release/cli/go.mod | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/release/cli/go.mod b/release/cli/go.mod
index dc510dba126f..46c77faf7533 100644
--- a/release/cli/go.mod
+++ b/release/cli/go.mod
@@ -1,6 +1,6 @@
 module github.com/aws/eks-anywhere/release/cli
 
-go 1.22
+go 1.22.4
 
 require (
 	github.com/aws/aws-sdk-go v1.54.12

From 7f16939d2372224a81d5e85e91b70dda016643dd Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:28:50 -0700
Subject: [PATCH 18/21] Update go-build-binary.yml

---
 .../buildspecs/eks-a-releaser-buildspec/go-build-binary.yml   | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 056c8fe7dfe2..615f4b600e9b 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -1,7 +1,5 @@
 version: 0.2
-env: 
-  variables:
-    GOLANG_VERSION: "1.22"
+
 phases:
   pre_build:
     commands:

From 8f8e575e1208e865474f058a3eac4fedd418f902 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 15:41:53 -0700
Subject: [PATCH 19/21] Update go-build-binary.yml

---
 .../buildspecs/eks-a-releaser-buildspec/go-build-binary.yml   | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index 615f4b600e9b..a57dbf3819fe 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -1,14 +1,12 @@
+---
 version: 0.2
-
 phases:
   pre_build:
     commands:
       - ./release/scripts/setup.sh
-
   build:
     commands:
       - make build -C release
-
 artifacts:
   files:
     - release/bin/eks-anywhere-release

From 3636b7ac0b45f2b4e0a234675892cd4be8acadf5 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Mon, 19 Aug 2024 17:18:41 -0700
Subject: [PATCH 20/21] Update go-build-binary.yml

---
 release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
index a57dbf3819fe..c2e945721981 100644
--- a/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
+++ b/release/buildspecs/eks-a-releaser-buildspec/go-build-binary.yml
@@ -10,3 +10,4 @@ phases:
 artifacts:
   files:
     - release/bin/eks-anywhere-release
+    - release/buildspecs/**/*

From 1d8bb125ff9803d07a6e85802bbdb4bccda32c12 Mon Sep 17 00:00:00 2001
From: Ivan Rivera <ibixrivera16@gmail.com>
Date: Tue, 20 Aug 2024 13:56:58 -0700
Subject: [PATCH 21/21] Update create-release.go

---
 release/cli/cmd/create-release.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/release/cli/cmd/create-release.go b/release/cli/cmd/create-release.go
index 9c9dce4a5b46..2b3ef857c49e 100644
--- a/release/cli/cmd/create-release.go
+++ b/release/cli/cmd/create-release.go
@@ -141,7 +141,7 @@ func createGitHubRelease(releaseTag *github.RepositoryRelease) (*github.Reposito
 	client := github.NewClient(nil).WithAuthToken(accessToken)
 
 	release, _, err := client.Repositories.GetReleaseByTag(ctx, upStreamRepoOwner, EKSAnyrepoName, latestVersion)
-	if err != nil {
+	if err == nil {
 		log.Printf("Release %s already exists!\n", latestVersion)
 		return release, nil
 	}