diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a3e8d1..dcd2171 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.21 + go-version: stable - name: Build run: go build -v ./... diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..660f2a1 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,32 @@ +name: Release + +on: + push: + tags: + - "*" + +permissions: + contents: write + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Checkout + run: git fetch --force --tags + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: stable + + - name: Release + uses: goreleaser/goreleaser-action@v5 + with: + distribution: goreleaser + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b59f9ff --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +all: build + @: + +clean: + go clean + rm -f ./codemaker-sdk-go + +compile: + go build ./... + +test: + go test ./... + +build: clean compile test + @: \ No newline at end of file diff --git a/README.md b/README.md index 250d646..333e9dc 100644 --- a/README.md +++ b/README.md @@ -11,20 +11,23 @@ CodeMaker AI offers tools and automation for software developers for writing, te Fallowing operations are supported: * Context-aware source code generation. -* Generating unit tests. -* Migrating the programming language syntax. * Generating source code documentation. -* Refactoring and renaming local variables. +* Fixing syntax. ## Supported languages Following programming languages are supported: -* JavaScript & JSX -* TypeScript & TSX +* C +* C++ +* PHP * Java +* JavaScript & JSX +* CSharp * Go * Kotlin +* TypeScript & TSX +* Rust More language support is coming soon. diff --git a/cli/cli.go b/cli/cli.go index b73251f..1603f2c 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -3,6 +3,7 @@ package cli import ( + "context" "flag" "fmt" "github.com/codemakerai/codemaker-sdk-go/client" @@ -11,7 +12,6 @@ import ( "go.uber.org/zap/zapcore" "os" "path/filepath" - "strings" "time" ) @@ -48,11 +48,8 @@ func (c *Cli) parseArgs() { case "generate": c.parseGenerateArgs() break - case "migrate": - c.parseMigrateArgs() - break - case "refactor": - c.parseRefactorArgs() + case "fix": + c.parseFixArgs() break case "configure": c.configure() @@ -73,33 +70,41 @@ func (c *Cli) parseGenerateArgs() { switch os.Args[2] { case "code": - generateDocsCmd := flag.NewFlagSet("generateCode", flag.ExitOnError) - lang := generateDocsCmd.String("language", "", "Programming language: JavaScript, Java, Kotlin") - replace := generateDocsCmd.Bool("replace", false, "Determines if the existing code is replaced") - codePath := generateDocsCmd.String("codepath", "", "The codepath to match.") - - err := generateDocsCmd.Parse(os.Args[3:]) + generateCodeCmd := flag.NewFlagSet("generateCode", flag.ExitOnError) + lang := generateCodeCmd.String("language", "", "Programming language: JavaScript, Java, Kotlin") + replace := generateCodeCmd.Bool("replace", false, "Determines if the existing code is replaced") + codePath := generateCodeCmd.String("codepath", "", "The codepath to match.") + model := generateCodeCmd.String("model", "", "The fine-tuned model name.") + endpoint := generateCodeCmd.String("endpoint", "", "The endpoint name.") + failFast := generateCodeCmd.Bool("fail-fast", true, "Whether to stop on error.") + + err := generateCodeCmd.Parse(os.Args[3:]) if err != nil { c.logger.Errorf("Could not parse args %v", err) os.Exit(1) } - if len(generateDocsCmd.Args()) == 0 { + if len(generateCodeCmd.Args()) == 0 { c.logger.Errorf("Expected file input") fmt.Printf("Usage: codemaker generate code \n") os.Exit(1) } - config, err := createConfig() + config, err := createConfig(endpoint) if err != nil { c.logger.Errorf("No valid api key found: %v", err) os.Exit(1) } - cl := c.createClient(*config) - files := generateDocsCmd.Args()[0:] + cl, err := c.createClient(*config) + if err != nil { + c.logger.Errorf("Can not create client: %v", err) + os.Exit(1) + } - if err := c.generateCode(cl, lang, replace, codePath, files); err != nil { + files := generateCodeCmd.Args()[0:] + + if err := c.generateCode(cl, lang, replace, codePath, model, failFast, files); err != nil { c.logger.Errorf("Could not generate the code %v", err) } break @@ -108,6 +113,10 @@ func (c *Cli) parseGenerateArgs() { lang := generateDocsCmd.String("language", "", "Programming language: JavaScript, Java, Kotlin") replace := generateDocsCmd.Bool("replace", false, "Determines if the existing documentations are replaced") codePath := generateDocsCmd.String("codepath", "", "The codepath to match.") + visibility := generateDocsCmd.String("visibility", "", "Visibility.") + minimalLinesLength := generateDocsCmd.Int("minimal-lines-length", 0, "The minimal lines complexity.") + endpoint := generateDocsCmd.String("endpoint", "", "The endpoint name.") + failFast := generateDocsCmd.Bool("fail-fast", true, "Whether to stop on error.") err := generateDocsCmd.Parse(os.Args[3:]) if err != nil { @@ -121,47 +130,22 @@ func (c *Cli) parseGenerateArgs() { os.Exit(1) } - config, err := createConfig() + config, err := createConfig(endpoint) if err != nil { c.logger.Errorf("No valid api key found: %v", err) os.Exit(1) } - cl := c.createClient(*config) - files := generateDocsCmd.Args()[0:] - - if err := c.generateDocumentation(cl, lang, replace, codePath, files); err != nil { - c.logger.Errorf("Could not generate the documentation %v", err) - } - break - case "unit-tests": - generateTestsCmd := flag.NewFlagSet("generateUnitTests", flag.ExitOnError) - lang := generateTestsCmd.String("language", "", "Programming language: JavaScript, Java, Kotlin") - outputDir := generateTestsCmd.String("output-dir", "", "The output directory") - - err := generateTestsCmd.Parse(os.Args[3:]) - if err != nil { - c.logger.Error("Could not parse args %v", err) - os.Exit(1) - } - - if len(generateTestsCmd.Args()) == 0 { - c.logger.Errorf("Expected file input") - fmt.Printf("Usage: codemaker generate tests ") - os.Exit(1) - } - - config, err := createConfig() + cl, err := c.createClient(*config) if err != nil { - c.logger.Error("No valid api key found %v", err) + c.logger.Errorf("Can not create client: %v", err) os.Exit(1) } - cl := c.createClient(*config) - input := generateTestsCmd.Args()[0:] + files := generateDocsCmd.Args()[0:] - if err := c.generateTests(cl, lang, input, outputDir); err != nil { - c.logger.Errorf("Could not generate the test %v", err) + if err := c.generateDocumentation(cl, lang, replace, codePath, visibility, minimalLinesLength, failFast, files); err != nil { + c.logger.Errorf("Could not generate the documentation %v", err) } break default: @@ -170,94 +154,63 @@ func (c *Cli) parseGenerateArgs() { } } -func (c *Cli) parseMigrateArgs() { +func (c *Cli) parseFixArgs() { if len(os.Args) < 3 { fmt.Printf("No command specified") - c.printMigrateHelp() + c.printRefactorHelp() } switch os.Args[2] { case "syntax": - migrateSyntaxCmd := flag.NewFlagSet("migrateSyntax", flag.ExitOnError) - lang := migrateSyntaxCmd.String("language", "", "Programming language: Java") - langVer := migrateSyntaxCmd.String("language-version", "", "Programming language version") + correctSyntaxCmd := flag.NewFlagSet("fixSyntax", flag.ExitOnError) + lang := correctSyntaxCmd.String("language", "", "Programming language: JavaScript, Java, Kotlin") + endpoint := correctSyntaxCmd.String("endpoint", "", "The endpoint name.") + failFast := correctSyntaxCmd.Bool("fail-fast", true, "Whether to stop on error.") - err := migrateSyntaxCmd.Parse(os.Args[3:]) + err := correctSyntaxCmd.Parse(os.Args[3:]) if err != nil { c.logger.Errorf("Could not parse args %v", err) } - if len(migrateSyntaxCmd.Args()) == 0 { + if len(correctSyntaxCmd.Args()) == 0 { c.logger.Errorf("Expected file input") - fmt.Printf("Usage: codemaker migrate syntax ") + fmt.Printf("Usage: codemaker fix syntax ") os.Exit(1) } - config, err := createConfig() + config, err := createConfig(endpoint) if err != nil { c.logger.Errorf("No valid api key found %v", err) os.Exit(1) } - cl := c.createClient(*config) - input := migrateSyntaxCmd.Args()[0:] - - if err := c.migrateSyntax(cl, lang, langVer, input); err != nil { - c.logger.Errorf("Could not migrate the syntax %v", err) - } - break - default: - fmt.Printf("Unknown command %s\n", os.Args[2]) - c.printMigrateHelp() - } -} - -func (c *Cli) parseRefactorArgs() { - if len(os.Args) < 3 { - fmt.Printf("No command specified") - c.printRefactorHelp() - } - - switch os.Args[2] { - case "naming": - refactorNaming := flag.NewFlagSet("refactorNaming", flag.ExitOnError) - lang := refactorNaming.String("language", "", "Programming language: JavaScript, Java, Kotlin") - - err := refactorNaming.Parse(os.Args[3:]) - if err != nil { - c.logger.Errorf("Could not parse args %v", err) - } - - if len(refactorNaming.Args()) == 0 { - c.logger.Errorf("Expected file input") - fmt.Printf("Usage: codemaker refactor naming ") - os.Exit(1) - } - - config, err := createConfig() + cl, err := c.createClient(*config) if err != nil { - c.logger.Errorf("No valid api key found %v", err) + c.logger.Errorf("Can not create client: %v", err) os.Exit(1) } - cl := c.createClient(*config) - input := refactorNaming.Args()[0:] + input := correctSyntaxCmd.Args()[0:] - if err := c.refactorNaming(cl, lang, input); err != nil { - c.logger.Errorf("Could not rename variables %v", err) + if err := c.fixSyntax(cl, lang, failFast, input); err != nil { + c.logger.Errorf("Could not fix syntax %v", err) } break default: fmt.Printf("Unknown command %s\n", os.Args[2]) - c.printRefactorHelp() + c.printFixHelp() } } -func (c *Cli) generateCode(cl client.Client, lang *string, replace *bool, codePath *string, files []string) error { +func (c *Cli) generateCode(cl client.Client, lang *string, replace *bool, codePath *string, model *string, failFast *bool, files []string) error { return c.walkPath(files, func(file string) error { if lang == nil || len(*lang) == 0 { actLang, err := languageFromExtension(filepath.Ext(file)) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("Could not generate the code %v", err) + return nil + } return err } lang = &actLang @@ -266,15 +219,27 @@ func (c *Cli) generateCode(cl client.Client, lang *string, replace *bool, codePa c.logger.Infof("Generating code in file %s", file) source, err := c.readFile(file) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be read %v", file, err) + return nil + } return err } - output, err := c.process(cl, client.ModeCode, *lang, *replace, codePath, "", source) + output, err := c.process(cl, client.ModeCode, *lang, *replace, codePath, nil, nil, &file, model, source) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("Failed to process file %s %v", file, err) + return nil + } return err } if err := c.writeFile(file, *output); err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be written %v", file, err) + return nil + } return err } @@ -282,11 +247,15 @@ func (c *Cli) generateCode(cl client.Client, lang *string, replace *bool, codePa }) } -func (c *Cli) generateDocumentation(cl client.Client, lang *string, replace *bool, codePath *string, files []string) error { +func (c *Cli) generateDocumentation(cl client.Client, lang *string, replace *bool, codePath *string, visibility *string, minimalLinesLength *int, failFast *bool, files []string) error { return c.walkPath(files, func(file string) error { if lang == nil || len(*lang) == 0 { actLang, err := languageFromExtension(filepath.Ext(file)) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("Could not generate the documentation %v", err) + return nil + } return err } lang = &actLang @@ -295,136 +264,81 @@ func (c *Cli) generateDocumentation(cl client.Client, lang *string, replace *boo c.logger.Infof("Generating documentation in file %s", file) source, err := c.readFile(file) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be read %v", file, err) + return nil + } return err } - output, err := c.process(cl, client.ModeDocument, *lang, *replace, codePath, "", source) + output, err := c.process(cl, client.ModeDocument, *lang, *replace, codePath, visibility, minimalLinesLength, nil, nil, source) if err != nil { + if !c.isFailFast(failFast) { + c.logger.Errorf("Failed to process file %s %v", file, err) + return nil + } return err } if err := c.writeFile(file, *output); err != nil { - return err - } - - return nil - }) -} - -func (c *Cli) generateTests(cl client.Client, lang *string, files []string, outputDir *string) error { - return c.walkPath(files, func(file string) error { - if lang == nil || len(*lang) == 0 { - actLang, err := languageFromExtension(filepath.Ext(file)) - if err != nil { - c.logger.Errorf("skipping unsupported file %s", file) - return err + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be written %v", file, err) + return nil } - lang = &actLang - } - - c.logger.Infof("Generating tests for file %s", file) - source, err := c.readFile(file) - if err != nil { - c.logger.Errorf("failed to read file %s %v", file, err) return err } - output, err := c.process(cl, client.ModeUnitTest, *lang, false, nil, "", source) - if err != nil { - c.logger.Errorf("failed to generate documentation for file %s %v", file, err) - return err - } - - suffix, err := testFileSuffix(*lang) - if err != nil { - c.logger.Errorf("could not get suffix for file %s %v", file, err) - return err - } - - var outputFile string - if outputDir != nil && len(*outputDir) > 0 { - err := os.MkdirAll(*outputDir, 0755) - if err != nil { - c.logger.Errorf("could not create directory %s", *outputDir) - return err - } - outputFile = filepath.Join(*outputDir, strings.TrimSuffix(filepath.Base(file), filepath.Ext(file))+suffix) - } else { - outputFile = strings.TrimSuffix(file, filepath.Ext(file)) + suffix - } - if err := c.writeFile(outputFile, *output); err != nil { - c.logger.Errorf("failed to write file %s %v", file, err) - return err - } return nil }) } -func (c *Cli) migrateSyntax(cl client.Client, lang *string, langVer *string, files []string) error { +func (c *Cli) fixSyntax(cl client.Client, lang *string, failFast *bool, files []string) error { return c.walkPath(files, func(file string) error { if lang == nil || len(*lang) == 0 { actLang, err := languageFromExtension(filepath.Ext(file)) if err != nil { - c.logger.Errorf("skipping unsupported file %s", file) + if !c.isFailFast(failFast) { + c.logger.Errorf("Could not fix syntax %v", err) + return nil + } return nil } lang = &actLang } - c.logger.Infof("Migrating syntax in file %s", file) + c.logger.Infof("Fixing syntax in file %s", file) source, err := c.readFile(file) if err != nil { - c.logger.Errorf("failed to read file %s %v", file, err) - return nil - } - - output, err := c.process(cl, client.ModeMigrateSyntax, *lang, false, nil, *langVer, source) - if err != nil { - c.logger.Errorf("failed to migrate syntax in file %s %v", file, err) - return nil - } - - if err := c.writeFile(file, *output); err != nil { - c.logger.Errorf("failed to write file %s %v", file, err) - return nil - } - return nil - }) -} - -func (c *Cli) refactorNaming(cl client.Client, lang *string, files []string) error { - return c.walkPath(files, func(file string) error { - if lang == nil || len(*lang) == 0 { - actLang, err := languageFromExtension(filepath.Ext(file)) - if err != nil { - c.logger.Errorf("skipping unsupported file %s", file) + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be read %v", file, err) return nil } - lang = &actLang - } - - c.logger.Infof("Renaming local variables in file %s", file) - source, err := c.readFile(file) - if err != nil { - c.logger.Errorf("failed to read file %s %v", file, err) return nil } - output, err := c.process(cl, client.ModeRefactorNaming, *lang, false, nil, "", source) + output, err := c.process(cl, client.ModeFixSyntax, *lang, false, nil, nil, nil, nil, nil, source) if err != nil { - c.logger.Errorf("failed to rename variables in file %s %v", file, err) + if !c.isFailFast(failFast) { + c.logger.Errorf("Failed to process file %s %v", file, err) + return nil + } return nil } if err := c.writeFile(file, *output); err != nil { - c.logger.Errorf("failed to write file %s %v", file, err) + if !c.isFailFast(failFast) { + c.logger.Errorf("File %s could not be written %v", file, err) + return nil + } return nil } return nil }) } -func (c *Cli) process(cl client.Client, mode string, lang string, replace bool, codePath *string, langVer string, source string) (*string, error) { +func (c *Cli) process(cl client.Client, mode string, lang string, replace bool, codePath *string, visibility *string, minimalLinesLength *int, path *string, model *string, source string) (*string, error) { + ctx := context.Background() + modify := client.ModifyNone if replace { modify = client.ModifyReplace @@ -434,57 +348,32 @@ func (c *Cli) process(cl client.Client, mode string, lang string, replace bool, codePath = nil } - process, err := cl.CreateProcess(&client.CreateProcessRequest{ - Process: client.Process{ - Mode: mode, - Language: lang, - Input: client.Input{ - Source: source, - }, - Options: &client.Options{ - LanguageVersion: &langVer, - Modify: &modify, - CodePath: codePath, - }, - }, - }) - if err != nil { - return nil, err + var optMinimalLinesLength *int32 = nil + if minimalLinesLength != nil && *minimalLinesLength != 0 { + val := int32(*minimalLinesLength) + optMinimalLinesLength = &val } - retry := 0 - timeout := time.After(processTimeout) - for { - status, err := cl.GetProcessStatus(&client.GetProcessStatusRequest{ - Id: process.Id, - }) - if err != nil { - return nil, err - } - - if c.isCompleted(status) { - break - } else if c.isFailed(status) { - return nil, fmt.Errorf("the task processing has failed") - } - - select { - case <-timeout: - return nil, fmt.Errorf("the task processing had timed out") - default: - c.backoff(retry) - retry++ - } - } - - output, err := cl.GetProcessOutput(&client.GetProcessOutputRequest{ - Id: process.Id, + process, err := cl.Process(ctx, &client.ProcessRequest{ + Mode: mode, + Language: lang, + Input: client.Input{ + Source: source, + }, + Path: path, + Options: &client.Options{ + Modify: &modify, + CodePath: codePath, + Model: model, + Visibility: visibility, + MinimalLinesLength: optMinimalLinesLength, + }, }) if err != nil { return nil, err } - return &output.Output.Source, nil + return &process.Source, nil } func (c *Cli) configure() error { @@ -523,15 +412,6 @@ func (c *Cli) printVersion() { c.logger.Infof("CodeMaker CLI version %s (Build %s)", Version, Build) } -func (c *Cli) isCompleted(status *client.GetProcessStatusResponse) bool { - return status.Status == client.StatusCompleted -} - -func (c *Cli) isFailed(status *client.GetProcessStatusResponse) bool { - return status.Status == client.StatusFailed || - status.Status == client.StatusTimedOut -} - func (c *Cli) backoff(retry int) { retry -= nonExponentRetries if retry < 0 { @@ -550,13 +430,17 @@ func (c *Cli) backoff(retry int) { time.Sleep(retryDelay) } +func (c *Cli) isFailFast(failFast *bool) bool { + return failFast != nil && *failFast +} + func (c *Cli) printHelp() { fmt.Printf("Usage: codemaker \n") fmt.Printf("\n") fmt.Printf("Commands:\n") fmt.Printf(" * generate\n") - fmt.Printf(" * migrate\n") fmt.Printf(" * refactor\n") + fmt.Printf(" * fix\n") fmt.Printf(" * configure\n") fmt.Printf(" * version\n") os.Exit(1) @@ -572,19 +456,19 @@ func (c *Cli) printGenerateHelp() { os.Exit(1) } -func (c *Cli) printMigrateHelp() { - fmt.Printf("Usage: codemaker migrate \n") +func (c *Cli) printRefactorHelp() { + fmt.Printf("Usage: codemaker refactor \n") fmt.Printf("\n") fmt.Printf("Commands:\n") - fmt.Printf(" * syntax\n") + fmt.Printf(" * naming\n") os.Exit(1) } -func (c *Cli) printRefactorHelp() { - fmt.Printf("Usage: codemaker refactor \n") +func (c *Cli) printFixHelp() { + fmt.Printf("Usage: codemaker fix \n") fmt.Printf("\n") fmt.Printf("Commands:\n") - fmt.Printf(" * naming\n") + fmt.Printf(" * syntax\n") os.Exit(1) } @@ -610,7 +494,7 @@ func (c *Cli) writeFile(file string, source string) error { return os.WriteFile(file, []byte(source), 0644) } -func (c *Cli) createClient(config client.Config) client.Client { +func (c *Cli) createClient(config client.Config) (client.Client, error) { return client.NewClient(config) } diff --git a/cli/config.go b/cli/config.go index c25ce8e..2cc7e1a 100644 --- a/cli/config.go +++ b/cli/config.go @@ -12,9 +12,15 @@ import ( const ( apiKeyEnvironmentVariable = "CODEMAKER_API_KEY" + defaultMaxRetries = 10 ) -func createConfig() (*client.Config, error) { +func createConfig(endpoint *string) (*client.Config, error) { + var serviceEndpoint *string = nil + if endpoint != nil && len(*endpoint) > 0 { + serviceEndpoint = endpoint + } + apiKey := os.Getenv(apiKeyEnvironmentVariable) if len(apiKey) == 0 { @@ -35,7 +41,11 @@ func createConfig() (*client.Config, error) { return nil, fmt.Errorf("failed to resolve CODEMAKER_API_KEY") } + maxRetries := defaultMaxRetries + return &client.Config{ - ApiKey: apiKey, + Endpoint: serviceEndpoint, + ApiKey: apiKey, + MaxRetries: &maxRetries, }, nil } diff --git a/cli/language.go b/cli/language.go index 6d86cf3..9c58685 100644 --- a/cli/language.go +++ b/cli/language.go @@ -8,14 +8,21 @@ import ( ) var fileExtensions = map[string]string{ + ".c": client.LanguageC, + ".cpp": client.LanguageCPP, + ".cxx": client.LanguageCPP, + ".cc": client.LanguageCPP, + ".py": client.LanguagePython, ".js": client.LanguageJavaScript, ".jsx": client.LanguageJavaScript, - ".ts": client.LanguageTypeScript, - ".tsx": client.LanguageTypeScript, ".java": client.LanguageJava, - ".kt": client.LanguageKotlin, + ".php": client.LanguagePHP, ".cs": client.LanguageCSharp, ".go": client.LanguageGo, + ".kt": client.LanguageKotlin, + ".ts": client.LanguageTypeScript, + ".tsx": client.LanguageTypeScript, + ".rs": client.LanguageRust, } var testFileSuffixes = map[string]string{ diff --git a/cli/version.go b/cli/version.go index 743b3a3..7986813 100644 --- a/cli/version.go +++ b/cli/version.go @@ -3,6 +3,6 @@ package cli var ( - Version string = "0.0.14" - Build string = "20230815" + Version string = "1.6.0" + Build string = "20240701" ) diff --git a/go.mod b/go.mod index b630cbb..311ea1b 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,17 @@ module github.com/codemakerai/codemaker-cli go 1.21 require ( - github.com/codemakerai/codemaker-sdk-go v0.0.12 + github.com/codemakerai/codemaker-sdk-go v1.7.0 github.com/joho/godotenv v1.5.1 - go.uber.org/zap v1.24.0 + go.uber.org/zap v1.27.0 ) require ( - go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect ) diff --git a/go.sum b/go.sum index 4585e17..b4e6a4c 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +1,40 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/codemakerai/codemaker-sdk-go v0.0.12 h1:Tl8yxPZI5gTekR3H4Qiop0qwYKIsWumgHZn7LLr5R6k= -github.com/codemakerai/codemaker-sdk-go v0.0.12/go.mod h1:drvi/xHywQnOgWWGw3dOWZ4CV0NesAdNNuAtsVdZW2E= +github.com/codemakerai/codemaker-sdk-go v1.3.0 h1:URdgelgs9B/JvqUrD1ZN88JKnjSusuic5AbXbHiIDR0= +github.com/codemakerai/codemaker-sdk-go v1.3.0/go.mod h1:9ocNCMuJt5S+NBTuEWMlDxHPqhucY6gKV2QLXsZjJCI= +github.com/codemakerai/codemaker-sdk-go v1.4.0 h1:Xk9nc7ACq+jCv1yPq5eTVHZGE6IdT2xnuSTtMgVZmuI= +github.com/codemakerai/codemaker-sdk-go v1.4.0/go.mod h1:dtYvr+1Fv4snMK/jqf96RfhsuTkSpuljTKSX+36not0= +github.com/codemakerai/codemaker-sdk-go v1.5.0 h1:nhBeBn9kFaWSl9zOkcy1TIY439A2M5gFRK42OttMgTQ= +github.com/codemakerai/codemaker-sdk-go v1.5.0/go.mod h1:dtYvr+1Fv4snMK/jqf96RfhsuTkSpuljTKSX+36not0= +github.com/codemakerai/codemaker-sdk-go v1.6.0 h1:ylxkYe9JZspWiz4C6haTaJPYYDpfP9gfbJB30lksMyM= +github.com/codemakerai/codemaker-sdk-go v1.6.0/go.mod h1:dtYvr+1Fv4snMK/jqf96RfhsuTkSpuljTKSX+36not0= +github.com/codemakerai/codemaker-sdk-go v1.7.0 h1:wFTA7L+dh67KutjsN36NKgbruINcZeuZOpazfOQ1lYQ= +github.com/codemakerai/codemaker-sdk-go v1.7.0/go.mod h1:dtYvr+1Fv4snMK/jqf96RfhsuTkSpuljTKSX+36not0= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +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.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 h1:Di6ANFilr+S60a4S61ZM00vLdw0IrQOSMS2/6mrnOU0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=