
- Add comprehensive Git workflow automation tools - Include branch management utilities - Add commit helpers with conventional commit support - Implement GitHub integration for PR management - Add configuration management system - Include comprehensive test coverage - Add professional documentation and examples
107 lines
3.7 KiB
Go
107 lines
3.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"github.com/spf13/cobra"
|
|
"github.com/iwasforcedtobehere/git-automation-cli/internal/config"
|
|
)
|
|
|
|
var configCmd = &cobra.Command{
|
|
Use: "config",
|
|
Short: "Manage configuration settings",
|
|
Long: `View and modify configuration settings for gitauto.
|
|
Settings can be stored in the configuration file or as environment variables.`,
|
|
}
|
|
|
|
var configGetCmd = &cobra.Command{
|
|
Use: "get [key]",
|
|
Short: "Get a configuration value",
|
|
Args: cobra.MaximumNArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if len(args) == 0 {
|
|
// Show all config values
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Configuration file: %s\n\n", config.GetConfigFile())
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Default Remote: %s\n", config.GlobalConfig.DefaultRemote)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Default Branch: %s\n", config.GlobalConfig.DefaultBranch)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "GitHub URL: %s\n", config.GlobalConfig.GitHubURL)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Auto Cleanup: %t\n", config.GlobalConfig.AutoCleanup)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Confirm Destructive: %t\n", config.GlobalConfig.ConfirmDestructive)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Dry Run: %t\n", config.GlobalConfig.DryRun)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Verbose: %t\n", config.GlobalConfig.Verbose)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Branch Prefix: %s\n", config.GlobalConfig.BranchPrefix)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Feature Prefix: %s\n", config.GlobalConfig.FeaturePrefix)
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Hotfix Prefix: %s\n", config.GlobalConfig.HotfixPrefix)
|
|
if config.GlobalConfig.GitHubToken != "" {
|
|
fmt.Fprintf(cmd.OutOrStdout(), "GitHub Token: %s\n", maskToken(config.GlobalConfig.GitHubToken))
|
|
}
|
|
} else {
|
|
// Show specific config value
|
|
key := args[0]
|
|
value := config.Get(key)
|
|
if value == nil {
|
|
fmt.Fprintf(cmd.ErrOrStderr(), "Configuration key '%s' not found\n", key)
|
|
cmd.SilenceUsage = true
|
|
return fmt.Errorf("configuration key '%s' not found", key)
|
|
}
|
|
|
|
// Mask sensitive values
|
|
if strings.Contains(key, "token") || strings.Contains(key, "password") {
|
|
fmt.Fprintf(cmd.OutOrStdout(), "%s: %s\n", key, maskToken(fmt.Sprintf("%v", value)))
|
|
} else {
|
|
fmt.Fprintf(cmd.OutOrStdout(), "%s: %v\n", key, value)
|
|
}
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var configSetCmd = &cobra.Command{
|
|
Use: "set [key] [value]",
|
|
Short: "Set a configuration value",
|
|
Args: cobra.ExactArgs(2),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
key := args[0]
|
|
value := args[1]
|
|
|
|
config.Set(key, value)
|
|
if err := config.Save(); err != nil {
|
|
fmt.Fprintf(cmd.ErrOrStderr(), "Error saving configuration: %v\n", err)
|
|
return fmt.Errorf("error saving configuration: %v", err)
|
|
}
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Set %s = %v\n", key, value)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var configInitCmd = &cobra.Command{
|
|
Use: "init",
|
|
Short: "Initialize configuration file",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if err := config.Save(); err != nil {
|
|
fmt.Fprintf(cmd.ErrOrStderr(), "Error creating configuration file: %v\n", err)
|
|
return fmt.Errorf("error creating configuration file: %v", err)
|
|
}
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Configuration file created at: %s\n", config.GetConfigFile())
|
|
return nil
|
|
},
|
|
}
|
|
|
|
func maskToken(token string) string {
|
|
if len(token) <= 8 {
|
|
return strings.Repeat("*", len(token))
|
|
}
|
|
// For GitHub tokens, use a standard masking format
|
|
if strings.HasPrefix(token, "ghp_") {
|
|
return token[:4] + strings.Repeat("*", 28) + token[len(token)-4:]
|
|
}
|
|
// For other tokens, use the original logic
|
|
return token[:4] + strings.Repeat("*", len(token)-8) + token[len(token)-4:]
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(configCmd)
|
|
configCmd.AddCommand(configGetCmd)
|
|
configCmd.AddCommand(configSetCmd)
|
|
configCmd.AddCommand(configInitCmd)
|
|
} |