From 5f965ece680eb959ad9acfe0e882f2e2b48f992b Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 18:52:00 +1000 Subject: [PATCH 01/22] Adds linting --- .github/workflows/golangci-lint.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/golangci-lint.yml diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 0000000..4e1d3a7 --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,26 @@ +name: golangci-lint + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + + - name: golangci-lint + uses: golangci/golangci-lint-action@v8 + with: + version: v2.1 From 0d9ae0a22d7060d629d0cb6c66ab016eba54215f Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 18:59:13 +1000 Subject: [PATCH 02/22] Fix build --- internal/command/v1/mysql/image/pull/command.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/command/v1/mysql/image/pull/command.go b/internal/command/v1/mysql/image/pull/command.go index 2f7e6d6..df4f813 100644 --- a/internal/command/v1/mysql/image/pull/command.go +++ b/internal/command/v1/mysql/image/pull/command.go @@ -54,7 +54,7 @@ func (cmd *Command) Run() error { }) if err != nil { logger.Info("Using backwards compatibility command to pull image.") - return cmd.runBackwardsCompat(c) + return cmd.runBackwardsCompat() } creds, err := client.CredentialsProvider.Retrieve(ctx) From 3083b9142d5e0b23bb334b7019393bea9f6691b1 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:20:20 +1000 Subject: [PATCH 03/22] Adds config --- golangci-lint.yaml | 7 +++++++ internal/client/ssh/utils.go | 26 -------------------------- 2 files changed, 7 insertions(+), 26 deletions(-) create mode 100644 golangci-lint.yaml diff --git a/golangci-lint.yaml b/golangci-lint.yaml new file mode 100644 index 0000000..4a1a66e --- /dev/null +++ b/golangci-lint.yaml @@ -0,0 +1,7 @@ +version: 2 + +linters: + settings: + errcheck: + exclude-functions: + - fmt.Fprintf diff --git a/internal/client/ssh/utils.go b/internal/client/ssh/utils.go index ed8ec0a..96d6670 100644 --- a/internal/client/ssh/utils.go +++ b/internal/client/ssh/utils.go @@ -1,13 +1,5 @@ package ssh -import ( - "fmt" - "io" - "strings" - - "github.com/gliderlabs/ssh" -) - // Separator used for distinquishing between a namespace and exec object name. const ( // UsernameSeparator separates a project from the environment. @@ -15,21 +7,3 @@ const ( // PasswordSeparator separates credentials for access. PasswordSeparator = ":" ) - -// Helper function to return errors back to the user. -func printError(s ssh.Session, err error) { - io.WriteString(s, err.Error()) - s.Exit(1) -} - -// Helper function to extract namespace and name from a user. -func extractFromUser(user string) (string, string, error) { - sl := strings.Split(user, UsernameSeparator) - - if len(sl) == 2 { - // Translate this - return sl[0], sl[1], nil - } - - return "", "", fmt.Errorf("failed to marshal string: %s", user) -} From f79b2fe12a9b23789df46a72fbf07fa3868721c1 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:25:20 +1000 Subject: [PATCH 04/22] Adds config --- golangci-lint.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/golangci-lint.yaml b/golangci-lint.yaml index 4a1a66e..bac0575 100644 --- a/golangci-lint.yaml +++ b/golangci-lint.yaml @@ -1,7 +1,6 @@ version: 2 -linters: - settings: - errcheck: - exclude-functions: - - fmt.Fprintf +linters-settings: + errcheck: + exclude-functions: + - fmt.Fprintf \ No newline at end of file From f14685f4a04938ddb0d8bff2b721390c63eeb4cd Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:29:13 +1000 Subject: [PATCH 05/22] Adds config --- golangci-lint.yaml => .golangci.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename golangci-lint.yaml => .golangci.yml (100%) diff --git a/golangci-lint.yaml b/.golangci.yml similarity index 100% rename from golangci-lint.yaml rename to .golangci.yml From 617b5129dcbe3909a8de246a8643dab7e4c3cea7 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:30:08 +1000 Subject: [PATCH 06/22] Adds config --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index bac0575..3a6d031 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,4 +1,4 @@ -version: 2 +version: "2" linters-settings: errcheck: From 726ecdcd3a2108ed20cecf0dcb387a059c774f52 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:34:32 +1000 Subject: [PATCH 07/22] Adds config --- .golangci.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 3a6d031..9a6fd6f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,7 @@ version: "2" -linters-settings: - errcheck: - exclude-functions: - - fmt.Fprintf \ No newline at end of file +linters: + settings: + errcheck: + exclude-functions: + - fmt.Fprintf From 9ef91dd7482b9efd9cce4b6b994d1ff7b50bfcaa Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:39:50 +1000 Subject: [PATCH 08/22] More fixes --- .golangci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index 9a6fd6f..31a4c12 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -5,3 +5,6 @@ linters: errcheck: exclude-functions: - fmt.Fprintf + - fmt.Fprintln + - (golang.org/x/crypto/ssh.Session).WindowChange + - (golang.org/x/crypto/ssh/terminal).Restore From 9bcffa3291646a11fb3723709ac987291bd3edfe Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:47:38 +1000 Subject: [PATCH 09/22] Fixes --- .../client/config/command/aliases/aliases.go | 3 +-- internal/client/config/project/proto.go | 8 ++------ internal/color/status.go | 16 ++++++++-------- internal/command/v1/validate/command.go | 4 ++-- internal/list/list.go | 2 +- internal/log/log.go | 8 ++++---- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/internal/client/config/command/aliases/aliases.go b/internal/client/config/command/aliases/aliases.go index f1f9dbe..94463e5 100644 --- a/internal/client/config/command/aliases/aliases.go +++ b/internal/client/config/command/aliases/aliases.go @@ -34,8 +34,7 @@ func Expand(args []string, aliases command.Aliases) (bool, []string, error) { return found, []string{}, err } - var newArgs []string - newArgs = strings.Split(expansion, " ") + var newArgs []string = strings.Split(expansion, " ") expanded := append(newArgs, extraArgs...) return found, expanded, nil diff --git a/internal/client/config/project/proto.go b/internal/client/config/project/proto.go index 568c3bb..8d3ce21 100644 --- a/internal/client/config/project/proto.go +++ b/internal/client/config/project/proto.go @@ -202,15 +202,11 @@ func protoSanitize(mysql *DatabaseSanitize) *pb.SanitizationPolicy { var wheres []*pb.SanitizationWhere if len(mysql.Rules.NoData) > 0 { - for _, value := range mysql.Rules.NoData { - nodatas = append(nodatas, value) - } + nodatas = append(nodatas, mysql.Rules.NoData...) } if len(mysql.Rules.Ignore) > 0 { - for _, value := range mysql.Rules.Ignore { - ignores = append(ignores, value) - } + ignores = append(ignores, mysql.Rules.Ignore...) } if len(mysql.Rules.Rewrite) > 0 { diff --git a/internal/color/status.go b/internal/color/status.go index 35cf353..7553f48 100644 --- a/internal/color/status.go +++ b/internal/color/status.go @@ -8,22 +8,22 @@ import ( func ApplyColorToString(orig string) string { switch orig { case "Deployed": - return gchalk.WithHex(HexGreen).Sprintf(orig) + return gchalk.WithHex(HexGreen).Sprintf("%s", orig) case "Completed": - return gchalk.WithHex(HexGreen).Sprintf(orig) + return gchalk.WithHex(HexGreen).Sprintf("%s", orig) case "InProgress": - return gchalk.WithHex(HexYellow).Sprintf(orig) + return gchalk.WithHex(HexYellow).Sprintf("%s", orig) case "Failed": - return gchalk.WithHex(HexRed).Sprintf(orig) + return gchalk.WithHex(HexRed).Sprintf("%s", orig) case "Unknown": - return gchalk.WithHex(HexRed).Sprintf(orig) + return gchalk.WithHex(HexRed).Sprintf("%s", orig) // Config types. case "User": - return gchalk.WithHex(HexBlue).Sprintf(orig) + return gchalk.WithHex(HexBlue).Sprintf("%s", orig) case "System": - return gchalk.WithHex(HexGreen).Sprintf(orig) + return gchalk.WithHex(HexGreen).Sprintf("%s", orig) case "Overridden": - return gchalk.WithHex(HexYellow).Sprintf(orig) + return gchalk.WithHex(HexYellow).Sprintf("%s", orig) } return orig diff --git a/internal/command/v1/validate/command.go b/internal/command/v1/validate/command.go index 706c367..46c2352 100644 --- a/internal/command/v1/validate/command.go +++ b/internal/command/v1/validate/command.go @@ -86,9 +86,9 @@ func PrintTable(ctx context.Context, w io.Writer, client *wfclient.Client, proto switch finding.Type { case pb.EnvironmentValidateFinding_Violation: violationCount++ - row = append(row, color.New(color.FgRed).Sprintf(finding.Type.String())) + row = append(row, color.New(color.FgRed).Sprintf("%s", finding.Type.String())) case pb.EnvironmentValidateFinding_Warning: - row = append(row, color.New(color.FgBlue).Sprintf(finding.Type.String())) + row = append(row, color.New(color.FgBlue).Sprintf("%s", finding.Type.String())) } rows = append(rows, row) diff --git a/internal/list/list.go b/internal/list/list.go index 05e905f..7866711 100644 --- a/internal/list/list.go +++ b/internal/list/list.go @@ -10,7 +10,7 @@ func Print(data []string) (string, error) { var dashed []string for _, item := range data { - dashed = append(dashed, fmt.Sprintf("%s", item)) + dashed = append(dashed, item) } return strings.Join(dashed, "\n"), nil diff --git a/internal/log/log.go b/internal/log/log.go index fbc180d..a825ee3 100644 --- a/internal/log/log.go +++ b/internal/log/log.go @@ -68,13 +68,13 @@ func (h *Handler) Handle(ctx context.Context, r slog.Record) error { switch r.Level { case slog.LevelDebug: - level = gchalk.WithHex(color.HexBlue).Sprintf(level) + level = gchalk.WithHex(color.HexBlue).Sprintf("%s", level) case slog.LevelInfo: - level = gchalk.WithHex(color.HexBlue).Sprintf(level) + level = gchalk.WithHex(color.HexBlue).Sprintf("%s", level) case slog.LevelWarn: - level = gchalk.WithHex(color.HexYellow).Sprintf(level) + level = gchalk.WithHex(color.HexYellow).Sprintf("%s", level) case slog.LevelError: - level = gchalk.WithHex(color.HexRed).Sprintf(level) + level = gchalk.WithHex(color.HexRed).Sprintf("%s", level) } // @todo, Add attribute handling. From f1d6ff7e092cb53d29ba2f39c7f944429b7a18a7 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:51:13 +1000 Subject: [PATCH 10/22] Fixes --- internal/list/list.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/list/list.go b/internal/list/list.go index 7866711..56351de 100644 --- a/internal/list/list.go +++ b/internal/list/list.go @@ -1,7 +1,6 @@ package list import ( - "fmt" "strings" ) From 93605acf19f9cc76f82af5f76757a8e99b6fa245 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:55:40 +1000 Subject: [PATCH 11/22] More excludes --- .golangci.yml | 2 ++ internal/client/config/clusters/clusters.go | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 31a4c12..b911588 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,5 +6,7 @@ linters: exclude-functions: - fmt.Fprintf - fmt.Fprintln + - (os.File).Close - (golang.org/x/crypto/ssh.Session).WindowChange - (golang.org/x/crypto/ssh/terminal).Restore + - (golang.org/x/crypto/ssh.Client).Close diff --git a/internal/client/config/clusters/clusters.go b/internal/client/config/clusters/clusters.go index fba83a5..2cc0f8f 100644 --- a/internal/client/config/clusters/clusters.go +++ b/internal/client/config/clusters/clusters.go @@ -66,7 +66,10 @@ func LoadFromFile(file, name string) (Cluster, error) { // If the cluster is specified, let's use that. if _, ok := clusters[name]; ok { - mergo.Merge(&cluster, clusters[name], mergo.WithOverride) + err = mergo.Merge(&cluster, clusters[name], mergo.WithOverride) + if err != nil { + return cluster, errors.Wrap(err, "failed to merge config") + } } err = cluster.Validate() From f6511ea74a5ef2cbcd03776db93f607851a87ef7 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 19:58:45 +1000 Subject: [PATCH 12/22] Testing rules --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index b911588..5ad7a5f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,7 +6,7 @@ linters: exclude-functions: - fmt.Fprintf - fmt.Fprintln - - (os.File).Close + - (io.Closer).Close - (golang.org/x/crypto/ssh.Session).WindowChange - (golang.org/x/crypto/ssh/terminal).Restore - (golang.org/x/crypto/ssh.Client).Close From d35a7ed75e06338f0c339d523eec8f922a9e6ca9 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 20:02:12 +1000 Subject: [PATCH 13/22] Testing rules --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 5ad7a5f..9db8297 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,7 +6,7 @@ linters: exclude-functions: - fmt.Fprintf - fmt.Fprintln - - (io.Closer).Close + - (*os.File).Close - (golang.org/x/crypto/ssh.Session).WindowChange - (golang.org/x/crypto/ssh/terminal).Restore - (golang.org/x/crypto/ssh.Client).Close From f1f168ec80fa116e14e1addf6dcbd60ddff4822a Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 20:05:38 +1000 Subject: [PATCH 14/22] Testing rules --- .golangci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 9db8297..56bd6e5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -7,6 +7,6 @@ linters: - fmt.Fprintf - fmt.Fprintln - (*os.File).Close - - (golang.org/x/crypto/ssh.Session).WindowChange - - (golang.org/x/crypto/ssh/terminal).Restore - - (golang.org/x/crypto/ssh.Client).Close + - (*golang.org/x/crypto/ssh.Session).WindowChange + - (*golang.org/x/crypto/ssh/terminal).Restore + - (*golang.org/x/crypto/ssh.Client).Close From 609e4cf4505bf57eca283866bd4a5cb703ebabb8 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 20:09:31 +1000 Subject: [PATCH 15/22] Testing rules --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 56bd6e5..6f9fa97 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -9,4 +9,4 @@ linters: - (*os.File).Close - (*golang.org/x/crypto/ssh.Session).WindowChange - (*golang.org/x/crypto/ssh/terminal).Restore - - (*golang.org/x/crypto/ssh.Client).Close + - (*ssh.Client).Close From 1a6bab4ba1ecc298b95853ae0679181641a9f074 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 20:11:10 +1000 Subject: [PATCH 16/22] Testing rules --- .golangci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.golangci.yml b/.golangci.yml index 6f9fa97..1cfb1df 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -10,3 +10,4 @@ linters: - (*golang.org/x/crypto/ssh.Session).WindowChange - (*golang.org/x/crypto/ssh/terminal).Restore - (*ssh.Client).Close + - (io.Closer).Close From 6f3efe2215bba1aeeb83a5469c4f0618db73c03d Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 29 Aug 2025 20:19:50 +1000 Subject: [PATCH 17/22] Testing rules --- .golangci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 1cfb1df..f87875f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -7,7 +7,7 @@ linters: - fmt.Fprintf - fmt.Fprintln - (*os.File).Close - - (*golang.org/x/crypto/ssh.Session).WindowChange - - (*golang.org/x/crypto/ssh/terminal).Restore + - (*ssh.Session).WindowChange + - (*terminal).Restore - (*ssh.Client).Close - (io.Closer).Close From c1d7b93e3826b07cb3110b622ca7fc2c00adc13c Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 31 Aug 2025 20:43:05 +1000 Subject: [PATCH 18/22] More testing --- .golangci.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index f87875f..84882af 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -3,11 +3,5 @@ version: "2" linters: settings: errcheck: - exclude-functions: - - fmt.Fprintf - - fmt.Fprintln - - (*os.File).Close - - (*ssh.Session).WindowChange - - (*terminal).Restore - - (*ssh.Client).Close - - (io.Closer).Close + exclude: + - \.Close \ No newline at end of file From c75b31471413b6c21c42656a1f7ca16e4374cd5f Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 31 Aug 2025 20:46:51 +1000 Subject: [PATCH 19/22] More testing --- .golangci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 84882af..3cd8bbe 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,7 +1,6 @@ version: "2" linters: - settings: - errcheck: - exclude: - - \.Close \ No newline at end of file + disable: + # We check error as part of our PR process. + - errcheck From 4bc5fe1bbb111cc6814444c87f18a393437587ce Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 31 Aug 2025 21:02:56 +1000 Subject: [PATCH 20/22] Fixes --- go.mod | 6 ++-- go.sum | 31 ------------------- internal/client/client.go | 6 ++-- .../client/config/command/aliases/aliases.go | 2 +- internal/client/config/command/config.go | 3 +- .../client/config/credentials/cache/cache.go | 6 +--- internal/client/config/credentials/config.go | 3 +- .../client/config/project/initializer_test.go | 1 + internal/client/ssh/error.go | 30 ------------------ internal/client/ssh/exec.go | 2 +- internal/client/ssh/shell.go | 8 ++--- internal/command/v1/cron/suspend/command.go | 2 +- .../command/v1/mysql/image/pull/command.go | 5 --- .../command/v1/mysql/image/pull/tag_test.go | 2 +- internal/command/v1/package/command.go | 2 +- internal/list/list.go | 6 +--- 16 files changed, 19 insertions(+), 96 deletions(-) delete mode 100644 internal/client/ssh/error.go diff --git a/go.mod b/go.mod index 03f508f..91b518a 100644 --- a/go.mod +++ b/go.mod @@ -15,10 +15,10 @@ require ( github.com/aws/aws-sdk-go-v2/service/signer v1.31.1 github.com/aws/aws-signer-notation-plugin v1.0.2292 github.com/charmbracelet/fang v0.3.0 + github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2 github.com/egym-playground/go-prefix-writer v0.0.0-20180609083313-7326ea162eca github.com/fatih/color v1.18.0 github.com/fsouza/go-dockerclient v1.12.2 - github.com/gliderlabs/ssh v0.3.8 github.com/go-test/deep v1.1.1 github.com/gorilla/mux v1.8.1 github.com/gosuri/uilive v0.0.4 @@ -40,6 +40,7 @@ require ( golang.org/x/crypto v0.41.0 golang.org/x/oauth2 v0.30.0 golang.org/x/sync v0.16.0 + golang.org/x/term v0.34.0 google.golang.org/grpc v1.66.0 gopkg.in/yaml.v2 v2.4.0 oras.land/oras-go/v2 v2.6.0 @@ -49,7 +50,6 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.5 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.5 // indirect @@ -61,7 +61,6 @@ require ( github.com/aws/aws-sdk-go-v2/service/sts v1.38.1 // indirect github.com/aws/smithy-go v1.23.0 // indirect github.com/charmbracelet/colorprofile v0.3.1 // indirect - github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2 // indirect github.com/charmbracelet/x/ansi v0.8.0 // indirect github.com/charmbracelet/x/cellbuf v0.0.13 // indirect github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 // indirect @@ -111,7 +110,6 @@ require ( github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect golang.org/x/net v0.42.0 // indirect golang.org/x/sys v0.35.0 // indirect - golang.org/x/term v0.34.0 // indirect golang.org/x/text v0.28.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 // indirect google.golang.org/protobuf v1.36.8 // indirect diff --git a/go.sum b/go.sum index b12ce4e..1583cb5 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2 h1:ZBbLwSJqkH github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2/go.mod h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= -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/aquasecurity/table v1.11.0 h1:SzgCAv7dZcv/gyAyzxorS6OgEk7w/WU5iT2pStIkpl4= github.com/aquasecurity/table v1.11.0/go.mod h1:eqOmvjjB7AhXFgFqpJUEE/ietg7RrMSJZXyTN8E/wZw= github.com/aws/aws-sdk-go-v2 v1.38.2 h1:QUkLO1aTW0yqW95pVzZS0LGFanL71hJ0a49w4TJLMyM= @@ -93,16 +91,10 @@ github.com/fsouza/go-dockerclient v1.12.2 h1:+pbP/SacoHfqaVZuiudvcdYGd9jzU7y9Ecg github.com/fsouza/go-dockerclient v1.12.2/go.mod h1:ZGCkAsnBGjnTRG9wV6QaICPJ5ig2KlaxTccDQy5WQ38= github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= -github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-asn1-ber/asn1-ber v1.5.7 h1:DTX+lbVTWaTw1hQ+PbZPlnDZPEIs0SS/GCZAl535dDk= github.com/go-asn1-ber/asn1-ber v1.5.7/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-ldap/ldap/v3 v3.4.10 h1:ot/iwPOhfpNVgB1o+AVXljizWZ9JTp7YF5oeyONmcJU= github.com/go-ldap/ldap/v3 v3.4.10/go.mod h1:JXh4Uxgi40P6E9rdsYqpUtbW46D9UTjJ9QSwGRznplY= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/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-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -111,9 +103,6 @@ github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXe github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -228,8 +217,6 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skpr/api v1.0.0 h1:qkSSu2UHJc8q9zx31Yt0dO1hnMBVGfEnWHbs3SP7I/g= github.com/skpr/api v1.0.0/go.mod h1:LUk85PpDn7rf8Vqx9nTzmVfrK+GZikfZkKAy9o76zPI= -github.com/skpr/api v1.1.3 h1:4keYcAC6sdkImcmCULLwm00j9LTAUXubbCi5muJ2nFw= -github.com/skpr/api v1.1.3/go.mod h1:8B6c7H8DP4pw+yzcvKLJmR7As7snTlF+kgTz/IiADYU= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= @@ -259,18 +246,6 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJu 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= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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= @@ -380,16 +355,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T 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= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 h1:MAKi5q709QWfnkkpNQ0M12hYJ1+e8qYVDyowc4U1XZM= google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= -google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= -google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= -google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/internal/client/client.go b/internal/client/client.go index 7409ee4..4db99d2 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -7,10 +7,10 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" "github.com/skpr/api/pb" - "github.com/skpr/cli/internal/client/config/clusters" skprcredentials "github.com/skpr/cli/internal/client/config/credentials" skprdiscovery "github.com/skpr/cli/internal/client/config/discovery" @@ -71,10 +71,10 @@ func Dial(api clusters.API) (*grpc.ClientConn, error) { server := fmt.Sprintf("%s:%d", api.Host, api.Port) if api.Insecure { - return grpc.Dial(server, grpc.WithInsecure()) + return grpc.NewClient(server, grpc.WithTransportCredentials(insecure.NewCredentials())) } - return grpc.Dial(server, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, ""))) + return grpc.NewClient(server, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, ""))) } // NewFromFile loads a file and uses that configuration to return a client. diff --git a/internal/client/config/command/aliases/aliases.go b/internal/client/config/command/aliases/aliases.go index 94463e5..ef6d82d 100644 --- a/internal/client/config/command/aliases/aliases.go +++ b/internal/client/config/command/aliases/aliases.go @@ -34,7 +34,7 @@ func Expand(args []string, aliases command.Aliases) (bool, []string, error) { return found, []string{}, err } - var newArgs []string = strings.Split(expansion, " ") + var newArgs = strings.Split(expansion, " ") expanded := append(newArgs, extraArgs...) return found, expanded, nil diff --git a/internal/client/config/command/config.go b/internal/client/config/command/config.go index 5cc35d5..da83220 100644 --- a/internal/client/config/command/config.go +++ b/internal/client/config/command/config.go @@ -2,7 +2,6 @@ package command import ( "fmt" - "io/ioutil" "os" "path/filepath" @@ -72,7 +71,7 @@ func (c *ConfigFile) Write(config Config) error { } } - err = ioutil.WriteFile(c.Filename, data, 0600) + err = os.WriteFile(c.Filename, data, 0600) if err != nil { return fmt.Errorf("failed to write command config to file: %w", err) } diff --git a/internal/client/config/credentials/cache/cache.go b/internal/client/config/credentials/cache/cache.go index f9712cc..44fd62b 100644 --- a/internal/client/config/credentials/cache/cache.go +++ b/internal/client/config/credentials/cache/cache.go @@ -46,11 +46,7 @@ func Exists(clusterName string) bool { } _, err = os.Stat(path) - if err != nil { - return false - } - - return true + return err == nil } // Delete a credentials cache file for a cluster. diff --git a/internal/client/config/credentials/config.go b/internal/client/config/credentials/config.go index abaf59a..79a3410 100644 --- a/internal/client/config/credentials/config.go +++ b/internal/client/config/credentials/config.go @@ -3,7 +3,6 @@ package credentials import ( "errors" "fmt" - "io/ioutil" "os" "path/filepath" @@ -110,7 +109,7 @@ func (c *Config) Write(clusters Clusters) error { } } - err = ioutil.WriteFile(c.file, data, 0600) + err = os.WriteFile(c.file, data, 0600) if err != nil { return fmt.Errorf("failed to write clusters to file: %w", err) } diff --git a/internal/client/config/project/initializer_test.go b/internal/client/config/project/initializer_test.go index 8d9f254..3a03274 100644 --- a/internal/client/config/project/initializer_test.go +++ b/internal/client/config/project/initializer_test.go @@ -19,6 +19,7 @@ func TestInitialize(t *testing.T) { assert.NoError(err) sub, err := fs.Sub(resources, "resources") + assert.NoError(err) f, err := sub.Open("config.yml") assert.NoError(err) diff --git a/internal/client/ssh/error.go b/internal/client/ssh/error.go deleted file mode 100644 index d14c637..0000000 --- a/internal/client/ssh/error.go +++ /dev/null @@ -1,30 +0,0 @@ -package ssh - -import ( - "errors" - "fmt" -) - -var ( - // ErrProjectNotFound is returned when the project is not accessible. - ErrProjectNotFound = errors.New("project not found") - // ErrEnvironmentNotFound is returned when the environment is not accessible. - ErrEnvironmentNotFound = errors.New("environment not found") -) - -// Helper function to handle SSH server related errors. -func handleError(project, environment string, err error) error { - if errors.Is(err, ErrProjectNotFound) { - fmt.Printf("Project '%s' could not be found.\n", project) - fmt.Println("Contact your Skpr support team to help determine if this is an access or misconfiguration issue") - return nil - } - - if errors.Is(err, ErrEnvironmentNotFound) { - fmt.Printf("Environment '%s' could not be found.\n", environment) - fmt.Printf("You may have to create it. You can create it using `skpr create %s `.\n", environment) - return nil - } - - return err -} diff --git a/internal/client/ssh/exec.go b/internal/client/ssh/exec.go index 787d527..d68e412 100644 --- a/internal/client/ssh/exec.go +++ b/internal/client/ssh/exec.go @@ -13,7 +13,7 @@ import ( // Exec a command in the remote environment. func (c Client) Exec(params ExecParams) error { if len(params.Command) == 0 { - return errors.New("Command was not provided") + return errors.New("command was not provided") } awsCreds, err := c.CredentialsProvider.Retrieve(context.TODO()) diff --git a/internal/client/ssh/shell.go b/internal/client/ssh/shell.go index 5104c3a..7b2332b 100644 --- a/internal/client/ssh/shell.go +++ b/internal/client/ssh/shell.go @@ -8,7 +8,7 @@ import ( "github.com/olekukonko/ts" "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" ) // Shell creates a long lived "shell" session for the user. @@ -62,13 +62,13 @@ func (c Client) Shell(params ShellParams) error { termHeight = 24 ) - if terminal.IsTerminal(fd) { - oldState, err := terminal.MakeRaw(fd) + if term.IsTerminal(fd) { + oldState, err := term.MakeRaw(fd) if err != nil { return err } - defer terminal.Restore(fd, oldState) + defer term.Restore(fd, oldState) size, err := ts.GetSize() if err == nil { diff --git a/internal/command/v1/cron/suspend/command.go b/internal/command/v1/cron/suspend/command.go index fd83b27..322a010 100644 --- a/internal/command/v1/cron/suspend/command.go +++ b/internal/command/v1/cron/suspend/command.go @@ -56,7 +56,7 @@ func (cmd *Command) Run() error { for _, cron := range resp.List { if cron.Phase == pb.CronJobDetail_Running { *status = true - fmt.Fprintln(os.Stderr, fmt.Sprintf("Still waiting for '%v' to finish (%v)", cron.Name, cron.Duration)) + fmt.Fprint(os.Stderr, fmt.Sprintf("Still waiting for '%v' to finish (%v)\n", cron.Name, cron.Duration)) } } diff --git a/internal/command/v1/mysql/image/pull/command.go b/internal/command/v1/mysql/image/pull/command.go index df4f813..f823c60 100644 --- a/internal/command/v1/mysql/image/pull/command.go +++ b/internal/command/v1/mysql/image/pull/command.go @@ -83,16 +83,11 @@ func (cmd *Command) Run() error { writer := uilive.New() writer.Start() - var images []string - for _, database := range cmd.Params.Databases { tag := fmt.Sprintf("%s-%s", database, DefaultTagSuffix) imageName := fmt.Sprintf("%s:%s", getRepositoryResp.Repository, tag) - // Keep for later so we can inform the developer on which images they can use. - images = append(images, imageName) - logger.Info(fmt.Sprintf("Pulling: %s", imageName)) // Lookup the ID of the current image so we can delete it after we pull the image one. diff --git a/internal/command/v1/mysql/image/pull/tag_test.go b/internal/command/v1/mysql/image/pull/tag_test.go index 0370021..4d7c8e2 100644 --- a/internal/command/v1/mysql/image/pull/tag_test.go +++ b/internal/command/v1/mysql/image/pull/tag_test.go @@ -35,7 +35,7 @@ func TestGetTag(t *testing.T) { assert.Equal(t, "test-tag", tag) // Test that we return an error when a tag does not exist. - tag, err = getTag(context.TODO(), client, "default", Params{ID: "foo"}) + _, err = getTag(context.TODO(), client, "default", Params{ID: "foo"}) assert.Error(t, err) // Test that we return an error when a tag does not exist. diff --git a/internal/command/v1/package/command.go b/internal/command/v1/package/command.go index a478031..5788d71 100644 --- a/internal/command/v1/package/command.go +++ b/internal/command/v1/package/command.go @@ -141,7 +141,7 @@ func (cmd *Command) Run() error { plugin := awsplugin.NewAWSSigner(awssigner.NewFromConfig(cfg)) - sigSigner, err := notarysigner.NewFromPlugin(plugin, signerInfo.Identifier, map[string]string{}) + sigSigner, err := notarysigner.NewPluginSigner(plugin, signerInfo.Identifier, map[string]string{}) if err != nil { return err } diff --git a/internal/list/list.go b/internal/list/list.go index 56351de..d1acc96 100644 --- a/internal/list/list.go +++ b/internal/list/list.go @@ -7,10 +7,6 @@ import ( // Print a list with dots. func Print(data []string) (string, error) { var dashed []string - - for _, item := range data { - dashed = append(dashed, item) - } - + dashed = append(dashed, data...) return strings.Join(dashed, "\n"), nil } From 13d775f2986be9ebedbe3ea5d13fe8963130f91b Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 31 Aug 2025 21:06:10 +1000 Subject: [PATCH 21/22] Fixes --- internal/command/v1/cron/suspend/command.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/command/v1/cron/suspend/command.go b/internal/command/v1/cron/suspend/command.go index 322a010..95c0a86 100644 --- a/internal/command/v1/cron/suspend/command.go +++ b/internal/command/v1/cron/suspend/command.go @@ -56,7 +56,7 @@ func (cmd *Command) Run() error { for _, cron := range resp.List { if cron.Phase == pb.CronJobDetail_Running { *status = true - fmt.Fprint(os.Stderr, fmt.Sprintf("Still waiting for '%v' to finish (%v)\n", cron.Name, cron.Duration)) + fmt.Fprintf(os.Stderr, fmt.Sprintf("Still waiting for '%v' to finish (%v)\n", cron.Name, cron.Duration)) } } From e2449ad0c1ee01521fd5972ea03ee915fee40d93 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 31 Aug 2025 21:08:43 +1000 Subject: [PATCH 22/22] Fixes --- internal/command/v1/cron/suspend/command.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/command/v1/cron/suspend/command.go b/internal/command/v1/cron/suspend/command.go index 95c0a86..caca437 100644 --- a/internal/command/v1/cron/suspend/command.go +++ b/internal/command/v1/cron/suspend/command.go @@ -56,7 +56,7 @@ func (cmd *Command) Run() error { for _, cron := range resp.List { if cron.Phase == pb.CronJobDetail_Running { *status = true - fmt.Fprintf(os.Stderr, fmt.Sprintf("Still waiting for '%v' to finish (%v)\n", cron.Name, cron.Duration)) + fmt.Fprintf(os.Stderr, "Still waiting for '%v' to finish (%v)\n", cron.Name, cron.Duration) } }