From f31cf436d0368194b20a18c5eb74da11f967b918 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Thu, 1 May 2025 14:39:19 -0400 Subject: [PATCH 1/5] added more things --- cmd/bundle.go | 2 +- cmd/cloud.go | 13 +++++++++---- internal/deployer/metadata.go | 20 +++++++++++++++----- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/cmd/bundle.go b/cmd/bundle.go index 442e2c10..768ec66e 100644 --- a/cmd/bundle.go +++ b/cmd/bundle.go @@ -106,6 +106,6 @@ func init() { bundleCmd.Flags().Bool("deploy", false, "Whether to deploy after bundling") bundleCmd.Flags().String("deploymentId", "", "Used to track a specific deployment") bundleCmd.Flags().MarkHidden("deploymentId") - bundleCmd.Flags().Bool("ci", false, "Used to track a specific CI job") + bundleCmd.Flags().String("ci", "", "Used to track a specific CI job") bundleCmd.Flags().MarkHidden("ci") } diff --git a/cmd/cloud.go b/cmd/cloud.go index c8fb650e..cf92cdd1 100644 --- a/cmd/cloud.go +++ b/cmd/cloud.go @@ -353,14 +353,19 @@ Examples: deploymentId = "/" + deploymentId } - gitInfo, err := deployer.GetGitInfo(dir) - if err != nil { - logger.Error("error getting git info: %s", err) - } + var gitInfo deployer.GitInfo var originType string if ci { originType = "ci" + if err := json.Unmarshal([]byte("{}"), &gitInfo); err != nil { + logger.Debug("Failed to get git info: %v", err) + } } else { + info, err := deployer.GetGitInfo(logger, dir) + if err != nil { + logger.Debug("Failed to get git info: %v", err) + } + gitInfo = *info originType = "cli" } diff --git a/internal/deployer/metadata.go b/internal/deployer/metadata.go index 55ea6d09..dabdc181 100644 --- a/internal/deployer/metadata.go +++ b/internal/deployer/metadata.go @@ -5,15 +5,18 @@ import ( "runtime" "strings" + "github.com/agentuity/go-common/logger" "github.com/go-git/go-git/v5" ) // GitInfo contains basic git repository information type GitInfo struct { - RemoteURL string `json:"remoteUrl"` - Branch string `json:"branch"` - Commit string `json:"commit"` - IsRepo bool `json:"isRepo"` + RemoteURL string `json:"remoteUrl"` + Branch string `json:"branch"` + Commit string `json:"commit"` + CommitMessage string `json:"commitMessage"` + IsRepo bool `json:"isRepo"` + Host *string } type MetadataOrigin struct { @@ -54,7 +57,7 @@ func GetMachineInfo() *MachineInfo { } // GetGitInfo extracts git information from a directory -func GetGitInfo(dir string) (*GitInfo, error) { +func GetGitInfo(logger logger.Logger, dir string) (*GitInfo, error) { info := &GitInfo{} repo, err := git.PlainOpen(dir) @@ -82,6 +85,13 @@ func GetGitInfo(dir string) (*GitInfo, error) { info.Branch = head.Name().Short() info.Commit = head.Hash().String() info.IsRepo = true + commit, err := repo.CommitObject(head.Hash()) + if err == nil { + info.CommitMessage = strings.TrimSpace(commit.Message) + } + } + if err != nil { + logger.Trace(err.Error()) } return info, nil From 451cdd580114e6962ca657e5ca698553b32c2d93 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Thu, 1 May 2025 14:56:28 -0400 Subject: [PATCH 2/5] switch to a flag per item --- cmd/cloud.go | 75 +++++++++++++++++++++++++++++++++-- internal/deployer/metadata.go | 35 ++++++++-------- 2 files changed, 91 insertions(+), 19 deletions(-) diff --git a/cmd/cloud.go b/cmd/cloud.go index cf92cdd1..6cb493c3 100644 --- a/cmd/cloud.go +++ b/cmd/cloud.go @@ -146,6 +146,11 @@ Examples: transportUrl := context.TransportURL token := context.Token ci, _ := cmd.Flags().GetBool("ci") + ciRemoteUrl, _ := cmd.Flags().GetString("ci-remote-url") + ciBranch, _ := cmd.Flags().GetString("ci-branch") + ciCommit, _ := cmd.Flags().GetString("ci-commit") + ciMessage, _ := cmd.Flags().GetString("ci-message") + ciGitProvider, _ := cmd.Flags().GetString("ci-git-provider") deploymentConfig := project.NewDeploymentConfig() client := util.NewAPIClient(ctx, logger, apiUrl, token) @@ -355,10 +360,16 @@ Examples: var gitInfo deployer.GitInfo var originType string - if ci { + isOverwritingGitInfo := ciRemoteUrl != "" || ciBranch != "" || ciCommit != "" || ciMessage != "" || ciGitProvider != "" + if ci && isOverwritingGitInfo { originType = "ci" - if err := json.Unmarshal([]byte("{}"), &gitInfo); err != nil { - logger.Debug("Failed to get git info: %v", err) + gitInfo = deployer.GitInfo{ + RemoteURL: &ciRemoteUrl, + Branch: &ciBranch, + Commit: &ciCommit, + CommitMessage: &ciMessage, + GitProvider: &ciGitProvider, + IsRepo: true, } } else { info, err := deployer.GetGitInfo(logger, dir) @@ -618,6 +629,43 @@ Examples: }, } +var cloudDeployTestCmd = &cobra.Command{ + Use: "deploy-test", + Short: "Test deploy flags and print git info as JSON", + Run: func(cmd *cobra.Command, args []string) { + logger := env.NewLogger(cmd) + dir, _ := cmd.Flags().GetString("dir") + ci, _ := cmd.Flags().GetBool("ci") + ciRemoteUrl, _ := cmd.Flags().GetString("ci-remote-url") + ciBranch, _ := cmd.Flags().GetString("ci-branch") + ciCommit, _ := cmd.Flags().GetString("ci-commit") + ciMessage, _ := cmd.Flags().GetString("ci-message") + ciGitProvider, _ := cmd.Flags().GetString("ci-git-provider") + + var gitInfo deployer.GitInfo + isOverwritingGitInfo := ciRemoteUrl != "" || ciBranch != "" || ciCommit != "" || ciMessage != "" || ciGitProvider != "" + if ci && isOverwritingGitInfo { + gitInfo = deployer.GitInfo{ + RemoteURL: &ciRemoteUrl, + Branch: &ciBranch, + Commit: &ciCommit, + CommitMessage: &ciMessage, + GitProvider: &ciGitProvider, + IsRepo: true, + } + } else { + info, err := deployer.GetGitInfo(logger, dir) + if err != nil { + logger.Debug("Failed to get git info: %v", err) + } + gitInfo = *info + } + enc := json.NewEncoder(os.Stdout) + enc.SetIndent("", " ") + enc.Encode(gitInfo) + }, +} + func updateDeploymentStatus(logger logger.Logger, apiUrl, token, deploymentId, status string) error { client := util.NewAPIClient(context.Background(), logger, apiUrl, token) payload := map[string]string{"state": status} @@ -637,9 +685,30 @@ func init() { cloudDeployCmd.Flags().StringP("dir", "d", ".", "The directory to the project to deploy") cloudDeployCmd.Flags().String("deploymentId", "", "Used to track a specific deployment") cloudDeployCmd.Flags().Bool("ci", false, "Used to track a specific CI job") + cloudDeployCmd.Flags().String("ci-remote-url", "", "Used to set the remote repository URL for your deployment metadata") + cloudDeployCmd.Flags().String("ci-branch", "", "Used to set the branch name for your deployment metadata") + cloudDeployCmd.Flags().String("ci-commit", "", "Used to set the commit hash for your deployment metadata") + cloudDeployCmd.Flags().String("ci-message", "", "Used to set the commit message for your deployment metadata") + cloudDeployCmd.Flags().String("ci-git-provider", "", "Used to set the git provider for your deployment metadata") + cloudDeployCmd.Flags().MarkHidden("deploymentId") cloudDeployCmd.Flags().MarkHidden("ci") + cloudDeployCmd.Flags().MarkHidden("ci-remote-url") + cloudDeployCmd.Flags().MarkHidden("ci-branch") + cloudDeployCmd.Flags().MarkHidden("ci-commit") + cloudDeployCmd.Flags().MarkHidden("ci-messsage") + cloudDeployCmd.Flags().MarkHidden("ci-git-provider") + cloudDeployCmd.Flags().String("format", "text", "The output format to use for results which can be either 'text' or 'json'") cloudDeployCmd.Flags().String("org-id", "", "The organization to create the project in") cloudDeployCmd.Flags().String("templates-dir", "", "The directory to load the templates. Defaults to loading them from the github.com/agentuity/templates repository") + + cloudCmd.AddCommand(cloudDeployTestCmd) + cloudDeployTestCmd.Flags().StringP("dir", "d", ".", "The directory to the project to deploy") + cloudDeployTestCmd.Flags().Bool("ci", false, "Used to track a specific CI job") + cloudDeployTestCmd.Flags().String("ci-remote-url", "", "Used to set the remote repository URL for your deployment metadata") + cloudDeployTestCmd.Flags().String("ci-branch", "", "Used to set the branch name for your deployment metadata") + cloudDeployTestCmd.Flags().String("ci-commit", "", "Used to set the commit hash for your deployment metadata") + cloudDeployTestCmd.Flags().String("ci-message", "", "Used to set the commit message for your deployment metadata") + cloudDeployTestCmd.Flags().String("ci-git-provider", "", "Used to set the git provider for your deployment metadata") } diff --git a/internal/deployer/metadata.go b/internal/deployer/metadata.go index dabdc181..3bb18127 100644 --- a/internal/deployer/metadata.go +++ b/internal/deployer/metadata.go @@ -11,12 +11,12 @@ import ( // GitInfo contains basic git repository information type GitInfo struct { - RemoteURL string `json:"remoteUrl"` - Branch string `json:"branch"` - Commit string `json:"commit"` - CommitMessage string `json:"commitMessage"` - IsRepo bool `json:"isRepo"` - Host *string + RemoteURL *string `json:"remoteUrl"` + Branch *string `json:"branch"` + Commit *string `json:"commit"` + CommitMessage *string `json:"commitMessage"` + IsRepo bool `json:"isRepo"` + GitProvider *string } type MetadataOrigin struct { @@ -67,27 +67,30 @@ func GetGitInfo(logger logger.Logger, dir string) (*GitInfo, error) { // Get remote URL remote, err := repo.Remote("origin") - if err == nil { - info.RemoteURL = remote.Config().URLs[0] + if err == nil && len(remote.Config().URLs) > 0 { + remoteURL := remote.Config().URLs[0] // re-write the github url to be https so they display correctly in the UI - // git@github.com:agentuity/agent-changelog.git - if strings.HasPrefix(info.RemoteURL, "git@github.com:") { - info.RemoteURL = strings.Replace(info.RemoteURL, "git@github.com:", "https://github.com/", 1) - if strings.HasSuffix(info.RemoteURL, ".git") { - info.RemoteURL = strings.TrimSuffix(info.RemoteURL, ".git") + if strings.HasPrefix(remoteURL, "git@github.com:") { + remoteURL = strings.Replace(remoteURL, "git@github.com:", "https://github.com/", 1) + if strings.HasSuffix(remoteURL, ".git") { + remoteURL = strings.TrimSuffix(remoteURL, ".git") } } + info.RemoteURL = &remoteURL } // Get current branch and commit head, err := repo.Head() if err == nil { - info.Branch = head.Name().Short() - info.Commit = head.Hash().String() + branch := head.Name().Short() + commitHash := head.Hash().String() + info.Branch = &branch + info.Commit = &commitHash info.IsRepo = true commit, err := repo.CommitObject(head.Hash()) if err == nil { - info.CommitMessage = strings.TrimSpace(commit.Message) + msg := strings.TrimSpace(commit.Message) + info.CommitMessage = &msg } } if err != nil { From 0ef3011ea67ce37d22eabc69d3c2e7b3be73b773 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Thu, 1 May 2025 15:04:20 -0400 Subject: [PATCH 3/5] remove cmd --- cmd/cloud.go | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) diff --git a/cmd/cloud.go b/cmd/cloud.go index 6cb493c3..c0df9e46 100644 --- a/cmd/cloud.go +++ b/cmd/cloud.go @@ -629,43 +629,6 @@ Examples: }, } -var cloudDeployTestCmd = &cobra.Command{ - Use: "deploy-test", - Short: "Test deploy flags and print git info as JSON", - Run: func(cmd *cobra.Command, args []string) { - logger := env.NewLogger(cmd) - dir, _ := cmd.Flags().GetString("dir") - ci, _ := cmd.Flags().GetBool("ci") - ciRemoteUrl, _ := cmd.Flags().GetString("ci-remote-url") - ciBranch, _ := cmd.Flags().GetString("ci-branch") - ciCommit, _ := cmd.Flags().GetString("ci-commit") - ciMessage, _ := cmd.Flags().GetString("ci-message") - ciGitProvider, _ := cmd.Flags().GetString("ci-git-provider") - - var gitInfo deployer.GitInfo - isOverwritingGitInfo := ciRemoteUrl != "" || ciBranch != "" || ciCommit != "" || ciMessage != "" || ciGitProvider != "" - if ci && isOverwritingGitInfo { - gitInfo = deployer.GitInfo{ - RemoteURL: &ciRemoteUrl, - Branch: &ciBranch, - Commit: &ciCommit, - CommitMessage: &ciMessage, - GitProvider: &ciGitProvider, - IsRepo: true, - } - } else { - info, err := deployer.GetGitInfo(logger, dir) - if err != nil { - logger.Debug("Failed to get git info: %v", err) - } - gitInfo = *info - } - enc := json.NewEncoder(os.Stdout) - enc.SetIndent("", " ") - enc.Encode(gitInfo) - }, -} - func updateDeploymentStatus(logger logger.Logger, apiUrl, token, deploymentId, status string) error { client := util.NewAPIClient(context.Background(), logger, apiUrl, token) payload := map[string]string{"state": status} @@ -702,13 +665,4 @@ func init() { cloudDeployCmd.Flags().String("format", "text", "The output format to use for results which can be either 'text' or 'json'") cloudDeployCmd.Flags().String("org-id", "", "The organization to create the project in") cloudDeployCmd.Flags().String("templates-dir", "", "The directory to load the templates. Defaults to loading them from the github.com/agentuity/templates repository") - - cloudCmd.AddCommand(cloudDeployTestCmd) - cloudDeployTestCmd.Flags().StringP("dir", "d", ".", "The directory to the project to deploy") - cloudDeployTestCmd.Flags().Bool("ci", false, "Used to track a specific CI job") - cloudDeployTestCmd.Flags().String("ci-remote-url", "", "Used to set the remote repository URL for your deployment metadata") - cloudDeployTestCmd.Flags().String("ci-branch", "", "Used to set the branch name for your deployment metadata") - cloudDeployTestCmd.Flags().String("ci-commit", "", "Used to set the commit hash for your deployment metadata") - cloudDeployTestCmd.Flags().String("ci-message", "", "Used to set the commit message for your deployment metadata") - cloudDeployTestCmd.Flags().String("ci-git-provider", "", "Used to set the git provider for your deployment metadata") } From ed55a852e7463bd9812aecbf79fdb3d5b0a09d83 Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Thu, 1 May 2025 15:15:28 -0400 Subject: [PATCH 4/5] works for bundle too now --- cmd/bundle.go | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/cmd/bundle.go b/cmd/bundle.go index 768ec66e..b7b08f1e 100644 --- a/cmd/bundle.go +++ b/cmd/bundle.go @@ -69,13 +69,28 @@ Examples: if deploymentId != "" { args = append(args, "--deploymentId", deploymentId) } - flags := []string{"log-level", "api-url", "api-key", "dir", "ci"} + flags := []string{"log-level", "api-url", "api-key", "dir"} for _, flag := range flags { if cmd.Flags().Changed(flag) { val, _ := cmd.Flags().GetString(flag) args = append(args, "--"+flag, val) } } + // Handle bool flags + if cmd.Flags().Changed("ci") { + ciVal, _ := cmd.Flags().GetBool("ci") + if ciVal { + args = append(args, "--ci") + } + } + // Pass through CI metadata flags if set + ciFlags := []string{"ci-remote-url", "ci-branch", "ci-commit", "ci-message", "ci-git-provider"} + for _, flag := range ciFlags { + if cmd.Flags().Changed(flag) { + val, _ := cmd.Flags().GetString(flag) + args = append(args, "--"+flag, val) + } + } started = time.Now() projectContext.Logger.Trace("deploying to cloud with %s and args: %v", bin, args) cwd, err := os.Getwd() @@ -106,6 +121,20 @@ func init() { bundleCmd.Flags().Bool("deploy", false, "Whether to deploy after bundling") bundleCmd.Flags().String("deploymentId", "", "Used to track a specific deployment") bundleCmd.Flags().MarkHidden("deploymentId") - bundleCmd.Flags().String("ci", "", "Used to track a specific CI job") + bundleCmd.Flags().Bool("ci", false, "Used to track a specific CI job") bundleCmd.Flags().MarkHidden("ci") + bundleCmd.Flags().String("ci-remote-url", "", "Used to set the remote repository URL for your deployment metadata") + bundleCmd.Flags().String("ci-branch", "", "Used to set the branch name for your deployment metadata") + bundleCmd.Flags().String("ci-commit", "", "Used to set the commit hash for your deployment metadata") + bundleCmd.Flags().String("ci-message", "", "Used to set the commit message for your deployment metadata") + bundleCmd.Flags().String("ci-git-provider", "", "Used to set the git provider for your deployment metadata") + + bundleCmd.Flags().MarkHidden("deploymentId") + bundleCmd.Flags().MarkHidden("ci") + bundleCmd.Flags().MarkHidden("ci-remote-url") + bundleCmd.Flags().MarkHidden("ci-branch") + bundleCmd.Flags().MarkHidden("ci-commit") + bundleCmd.Flags().MarkHidden("ci-messsage") + bundleCmd.Flags().MarkHidden("ci-git-provider") + } From b066bab38a4ef9ddb3c0c2aaeb2d8c8d71b4d3ea Mon Sep 17 00:00:00 2001 From: Bobby Christopher Date: Thu, 1 May 2025 15:22:03 -0400 Subject: [PATCH 5/5] clean up --- cmd/bundle.go | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/cmd/bundle.go b/cmd/bundle.go index b7b08f1e..e9b54e98 100644 --- a/cmd/bundle.go +++ b/cmd/bundle.go @@ -69,28 +69,13 @@ Examples: if deploymentId != "" { args = append(args, "--deploymentId", deploymentId) } - flags := []string{"log-level", "api-url", "api-key", "dir"} + flags := []string{"log-level", "api-url", "api-key", "dir", "ci"} for _, flag := range flags { if cmd.Flags().Changed(flag) { val, _ := cmd.Flags().GetString(flag) args = append(args, "--"+flag, val) } } - // Handle bool flags - if cmd.Flags().Changed("ci") { - ciVal, _ := cmd.Flags().GetBool("ci") - if ciVal { - args = append(args, "--ci") - } - } - // Pass through CI metadata flags if set - ciFlags := []string{"ci-remote-url", "ci-branch", "ci-commit", "ci-message", "ci-git-provider"} - for _, flag := range ciFlags { - if cmd.Flags().Changed(flag) { - val, _ := cmd.Flags().GetString(flag) - args = append(args, "--"+flag, val) - } - } started = time.Now() projectContext.Logger.Trace("deploying to cloud with %s and args: %v", bin, args) cwd, err := os.Getwd() @@ -129,8 +114,6 @@ func init() { bundleCmd.Flags().String("ci-message", "", "Used to set the commit message for your deployment metadata") bundleCmd.Flags().String("ci-git-provider", "", "Used to set the git provider for your deployment metadata") - bundleCmd.Flags().MarkHidden("deploymentId") - bundleCmd.Flags().MarkHidden("ci") bundleCmd.Flags().MarkHidden("ci-remote-url") bundleCmd.Flags().MarkHidden("ci-branch") bundleCmd.Flags().MarkHidden("ci-commit")