From b63be2d6f5b0ee4251ae026bf2561af5498d08ec Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Sun, 8 Dec 2024 19:09:40 +0100 Subject: [PATCH 01/30] all --- bundle/config/mutator/initialize_urls.go | 4 +- .../mutator/resolve_resource_references.go | 4 +- bundle/deploy/state_pull.go | 10 ++++- bundle/libraries/upload_test.go | 12 +++--- bundle/render/render_text_output.go | 8 +++- cmd/auth/describe.go | 4 +- cmd/bundle/debug/terraform.go | 10 ++++- cmd/bundle/deploy.go | 8 +++- cmd/bundle/run.go | 8 +++- cmd/configure/flags.go | 5 ++- cmd/root/auth.go | 4 +- cmd/root/bundle.go | 12 ++++-- cmd/root/io.go | 4 +- cmd/root/logger.go | 40 ++++++++++++++----- cmd/root/progress_logger.go | 8 +++- libs/auth/callback.go | 6 ++- libs/cmdio/logger.go | 24 ++++++++--- libs/cmdio/render.go | 4 +- libs/dyn/convert/from_typed.go | 8 +++- libs/dyn/convert/normalize.go | 15 +++++-- libs/dyn/jsonloader/json.go | 4 +- libs/dyn/mapping.go | 8 +++- libs/dyn/merge/merge.go | 8 +++- libs/dyn/pattern.go | 4 +- libs/dyn/visit.go | 4 +- libs/dyn/visit_map.go | 4 +- libs/dyn/visit_set.go | 4 +- libs/dyn/walk.go | 4 +- libs/dyn/yamlloader/loader.go | 4 +- libs/env/loader.go | 4 +- libs/git/config.go | 8 +++- libs/process/stub.go | 12 ++++-- libs/sync/output.go | 15 +++++-- 33 files changed, 211 insertions(+), 70 deletions(-) diff --git a/bundle/config/mutator/initialize_urls.go b/bundle/config/mutator/initialize_urls.go index 3193059121..d6a92da4c3 100644 --- a/bundle/config/mutator/initialize_urls.go +++ b/bundle/config/mutator/initialize_urls.go @@ -32,7 +32,9 @@ func (m *initializeURLs) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagn } orgId := strconv.FormatInt(workspaceId, 10) host := b.WorkspaceClient().Config.CanonicalHostName() - initializeForWorkspace(b, orgId, host) + if err := initializeForWorkspace(b, orgId, host); err != nil { + return diag.FromErr(err) + } return nil } diff --git a/bundle/config/mutator/resolve_resource_references.go b/bundle/config/mutator/resolve_resource_references.go index 89eaa346c6..cb4c8223c4 100644 --- a/bundle/config/mutator/resolve_resource_references.go +++ b/bundle/config/mutator/resolve_resource_references.go @@ -36,7 +36,9 @@ func (m *resolveResourceReferences) Apply(ctx context.Context, b *bundle.Bundle) return fmt.Errorf("failed to resolve %s, err: %w", v.Lookup, err) } - v.Set(id) + if err := v.Set(id); err != nil { + return err + } return nil }) } diff --git a/bundle/deploy/state_pull.go b/bundle/deploy/state_pull.go index 5e301a6f35..96f138e9d3 100644 --- a/bundle/deploy/state_pull.go +++ b/bundle/deploy/state_pull.go @@ -62,8 +62,14 @@ func (s *statePull) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostic } // Truncating the file before writing - local.Truncate(0) - local.Seek(0, 0) + err = local.Truncate(0) + if err != nil { + return diag.FromErr(err) + } + _, err = local.Seek(0, 0) + if err != nil { + return diag.FromErr(err) + } // Write file to disk. log.Infof(ctx, "Writing remote deployment state file to local cache directory") diff --git a/bundle/libraries/upload_test.go b/bundle/libraries/upload_test.go index 493785bf50..4d777adfc8 100644 --- a/bundle/libraries/upload_test.go +++ b/bundle/libraries/upload_test.go @@ -23,7 +23,7 @@ func TestArtifactUploadForWorkspace(t *testing.T) { tmpDir := t.TempDir() whlFolder := filepath.Join(tmpDir, "whl") testutil.Touch(t, whlFolder, "source.whl") - whlLocalPath := filepath.Join(whlFolder, "source.whl") + _ = filepath.Join(whlFolder, "source.whl") b := &bundle.Bundle{ SyncRootPath: tmpDir, @@ -32,10 +32,10 @@ func TestArtifactUploadForWorkspace(t *testing.T) { ArtifactPath: "/foo/bar/artifacts", }, Artifacts: config.Artifacts{ - "whl": { + "whl": &config.Artifact{ Type: config.ArtifactPythonWheel, Files: []config.ArtifactFile{ - {Source: whlLocalPath}, + {Source: filepath.Join(whlFolder, "source.whl")}, }, }, }, @@ -111,7 +111,7 @@ func TestArtifactUploadForVolumes(t *testing.T) { tmpDir := t.TempDir() whlFolder := filepath.Join(tmpDir, "whl") testutil.Touch(t, whlFolder, "source.whl") - whlLocalPath := filepath.Join(whlFolder, "source.whl") + _ = filepath.Join(whlFolder, "source.whl") b := &bundle.Bundle{ SyncRootPath: tmpDir, @@ -120,10 +120,10 @@ func TestArtifactUploadForVolumes(t *testing.T) { ArtifactPath: "/Volumes/foo/bar/artifacts", }, Artifacts: config.Artifacts{ - "whl": { + "whl": &config.Artifact{ Type: config.ArtifactPythonWheel, Files: []config.ArtifactFile{ - {Source: whlLocalPath}, + {Source: filepath.Join(whlFolder, "source.whl")}, }, }, }, diff --git a/bundle/render/render_text_output.go b/bundle/render/render_text_output.go index 92dacb4488..af437d9bee 100644 --- a/bundle/render/render_text_output.go +++ b/bundle/render/render_text_output.go @@ -171,10 +171,14 @@ func RenderDiagnostics(out io.Writer, b *bundle.Bundle, diags diag.Diagnostics, if err != nil { return fmt.Errorf("failed to render summary: %w", err) } - io.WriteString(out, "\n") + if _, err := io.WriteString(out, "\n"); err != nil { + return err + } } trailer := buildTrailer(diags) - io.WriteString(out, trailer) + if _, err := io.WriteString(out, trailer); err != nil { + return err + } } return nil diff --git a/cmd/auth/describe.go b/cmd/auth/describe.go index 3a6e3d5d77..16c5fe466d 100644 --- a/cmd/auth/describe.go +++ b/cmd/auth/describe.go @@ -141,7 +141,9 @@ func render(ctx context.Context, cmd *cobra.Command, status *authStatus, templat if err != nil { return err } - cmd.OutOrStdout().Write(buf) + if _, err := cmd.OutOrStdout().Write(buf); err != nil { + return err + } default: return fmt.Errorf("unknown output type %s", root.OutputType(cmd)) } diff --git a/cmd/bundle/debug/terraform.go b/cmd/bundle/debug/terraform.go index 843ecac4ec..c2b4e8f7a6 100644 --- a/cmd/bundle/debug/terraform.go +++ b/cmd/bundle/debug/terraform.go @@ -60,13 +60,19 @@ For more information about filesystem mirrors, see the Terraform documentation: } switch root.OutputType(cmd) { case flags.OutputText: - cmdio.Render(cmd.Context(), dependencies.Terraform) + err := cmdio.Render(cmd.Context(), dependencies.Terraform) + if err != nil { + return err + } case flags.OutputJSON: buf, err := json.MarshalIndent(dependencies, "", " ") if err != nil { return err } - cmd.OutOrStdout().Write(buf) + _, err = cmd.OutOrStdout().Write(buf) + if err != nil { + return err + } default: return fmt.Errorf("unknown output type %s", root.OutputType(cmd)) } diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index a25e02f6c1..1ada765312 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -33,10 +33,14 @@ func newDeployCommand() *cobra.Command { cmd.Flags().StringVar(&clusterId, "compute-id", "", "Override cluster in the deployment with the given compute ID.") cmd.Flags().StringVarP(&clusterId, "cluster-id", "c", "", "Override cluster in the deployment with the given cluster ID.") cmd.Flags().BoolVar(&autoApprove, "auto-approve", false, "Skip interactive approvals that might be required for deployment.") - cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") + if err := cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead"); err != nil { + return nil + } cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension - cmd.Flags().MarkHidden("verbose") + if err := cmd.Flags().MarkHidden("verbose"); err != nil { + return nil + } cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() diff --git a/cmd/bundle/run.go b/cmd/bundle/run.go index 7a92766d90..41068ef527 100644 --- a/cmd/bundle/run.go +++ b/cmd/bundle/run.go @@ -159,13 +159,17 @@ task or a Python wheel task, the second example applies. if err != nil { return err } - cmd.OutOrStdout().Write([]byte(resultString)) + if _, err := cmd.OutOrStdout().Write([]byte(resultString)); err != nil { + return err + } case flags.OutputJSON: b, err := json.MarshalIndent(output, "", " ") if err != nil { return err } - cmd.OutOrStdout().Write(b) + if _, err := cmd.OutOrStdout().Write(b); err != nil { + return err + } default: return fmt.Errorf("unknown output type %s", root.OutputType(cmd)) } diff --git a/cmd/configure/flags.go b/cmd/configure/flags.go index 80e6502689..911dce2458 100644 --- a/cmd/configure/flags.go +++ b/cmd/configure/flags.go @@ -21,5 +21,8 @@ func (f *configureFlags) Register(cmd *cobra.Command) { // Include token flag for compatibility with the legacy CLI. // It doesn't actually do anything because we always use PATs. cmd.Flags().Bool("token", true, "Configure using Databricks Personal Access Token") - cmd.Flags().MarkHidden("token") + err := cmd.Flags().MarkHidden("token") + if err != nil { + panic(err) + } } diff --git a/cmd/root/auth.go b/cmd/root/auth.go index 107679105b..4a5a9eb883 100644 --- a/cmd/root/auth.go +++ b/cmd/root/auth.go @@ -37,7 +37,9 @@ func (e ErrNoAccountProfiles) Error() string { func initProfileFlag(cmd *cobra.Command) { cmd.PersistentFlags().StringP("profile", "p", "", "~/.databrickscfg profile") - cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion) + if err := cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion); err != nil { + panic(err) + } } func profileFlagValue(cmd *cobra.Command) (string, bool) { diff --git a/cmd/root/bundle.go b/cmd/root/bundle.go index 8b98f2cf20..ec72e3b676 100644 --- a/cmd/root/bundle.go +++ b/cmd/root/bundle.go @@ -146,13 +146,19 @@ func targetCompletion(cmd *cobra.Command, args []string, toComplete string) ([]s func initTargetFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "target" parameter. cmd.PersistentFlags().StringP("target", "t", "", "bundle target to use (if applicable)") - cmd.RegisterFlagCompletionFunc("target", targetCompletion) + if err := cmd.RegisterFlagCompletionFunc("target", targetCompletion); err != nil { + panic(err) + } } // DEPRECATED flag func initEnvironmentFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "environment" parameter. cmd.PersistentFlags().StringP("environment", "e", "", "bundle target to use (if applicable)") - cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead") - cmd.RegisterFlagCompletionFunc("environment", targetCompletion) + if err := cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead"); err != nil { + panic(err) + } + if err := cmd.RegisterFlagCompletionFunc("environment", targetCompletion); err != nil { + panic(err) + } } diff --git a/cmd/root/io.go b/cmd/root/io.go index b224bbb27a..1c03ce70f1 100644 --- a/cmd/root/io.go +++ b/cmd/root/io.go @@ -21,7 +21,9 @@ func initOutputFlag(cmd *cobra.Command) *outputFlag { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envOutputFormat); ok { - f.output.Set(v) + if err := f.output.Set(v); err != nil { + panic(err) + } } cmd.PersistentFlags().VarP(&f.output, "output", "o", "output type: text or json") diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 48cb99a370..a2c2cc49ab 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -45,7 +45,9 @@ func (f *logFlags) makeLogHandler(opts slog.HandlerOptions) (slog.Handler, error func (f *logFlags) initializeContext(ctx context.Context) (context.Context, error) { if f.debug { - f.level.Set("debug") + if err := f.level.Set("debug"); err != nil { + panic(err) + } } opts := slog.HandlerOptions{} @@ -81,13 +83,19 @@ func initLogFlags(cmd *cobra.Command) *logFlags { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envLogFile); ok { - f.file.Set(v) + if err := f.file.Set(v); err != nil { + panic(err) + } } if v, ok := env.Lookup(cmd.Context(), envLogLevel); ok { - f.level.Set(v) + if err := f.level.Set(v); err != nil { + panic(err) + } } if v, ok := env.Lookup(cmd.Context(), envLogFormat); ok { - f.output.Set(v) + if err := f.output.Set(v); err != nil { + panic(err) + } } flags := cmd.PersistentFlags() @@ -97,12 +105,24 @@ func initLogFlags(cmd *cobra.Command) *logFlags { flags.Var(&f.output, "log-format", "log output format (text or json)") // mark fine-grained flags hidden from global --help - flags.MarkHidden("log-file") - flags.MarkHidden("log-level") - flags.MarkHidden("log-format") + if err := flags.MarkHidden("log-file"); err != nil { + panic(err) + } + if err := flags.MarkHidden("log-level"); err != nil { + panic(err) + } + if err := flags.MarkHidden("log-format"); err != nil { + panic(err) + } - cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete) - cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete) - cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete) + if err := cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete); err != nil { + panic(err) + } + if err := cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete); err != nil { + panic(err) + } + if err := cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete); err != nil { + panic(err) + } return &f } diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index 7d6a1fa46d..4d30bf4257 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -59,12 +59,16 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envProgressFormat); ok { - f.Set(v) + if err := f.ProgressLogFormat.Set(v); err != nil { + panic(err) + } } flags := cmd.PersistentFlags() flags.Var(&f.ProgressLogFormat, "progress-format", "format for progress logs (append, inplace, json)") - flags.MarkHidden("progress-format") + if err := flags.MarkHidden("progress-format"); err != nil { + panic(err) + } cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) return &f } diff --git a/libs/auth/callback.go b/libs/auth/callback.go index 5a24006978..852e1f1b8c 100644 --- a/libs/auth/callback.go +++ b/libs/auth/callback.go @@ -53,7 +53,11 @@ func newCallback(ctx context.Context, a *PersistentAuth) (*callbackServer, error a: a, } cb.srv.Handler = cb - go cb.srv.Serve(cb.ln) + go func() { + if err := cb.srv.Serve(cb.ln); err != http.ErrServerClosed { + panic(err) + } + }() return cb, nil } diff --git a/libs/cmdio/logger.go b/libs/cmdio/logger.go index 45b1883ce8..405533dee2 100644 --- a/libs/cmdio/logger.go +++ b/libs/cmdio/logger.go @@ -188,23 +188,35 @@ func (l *Logger) writeJson(event Event) { // we panic because there we cannot catch this in jobs.RunNowAndWait panic(err) } - l.Writer.Write([]byte(b)) - l.Writer.Write([]byte("\n")) + if _, err := l.Writer.Write([]byte(b)); err != nil { + panic(err) + } + if _, err := l.Writer.Write([]byte("\n")); err != nil { + panic(err) + } } func (l *Logger) writeAppend(event Event) { - l.Writer.Write([]byte(event.String())) - l.Writer.Write([]byte("\n")) + if _, err := l.Writer.Write([]byte(event.String())); err != nil { + panic(err) + } + if _, err := l.Writer.Write([]byte("\n")); err != nil { + panic(err) + } } func (l *Logger) writeInplace(event Event) { if l.isFirstEvent { // save cursor location - l.Writer.Write([]byte("\033[s")) + if _, err := l.Writer.Write([]byte("\033[s")); err != nil { + panic(err) + } } // move cursor to saved location - l.Writer.Write([]byte("\033[u")) + if _, err := l.Writer.Write([]byte("\033[u")); err != nil { + panic(err) + } // clear from cursor to end of screen l.Writer.Write([]byte("\033[0J")) diff --git a/libs/cmdio/render.go b/libs/cmdio/render.go index c68ddca0df..1529274a3c 100644 --- a/libs/cmdio/render.go +++ b/libs/cmdio/render.go @@ -361,7 +361,9 @@ func renderUsingTemplate(ctx context.Context, r templateRenderer, w io.Writer, h if err != nil { return err } - tw.Write([]byte("\n")) + if _, err := tw.Write([]byte("\n")); err != nil { + return err + } // Do not flush here. Instead, allow the first 100 resources to determine the initial spacing of the header columns. } t, err := base.Parse(tmpl) diff --git a/libs/dyn/convert/from_typed.go b/libs/dyn/convert/from_typed.go index cd92ad0eb2..3d54e9d5d8 100644 --- a/libs/dyn/convert/from_typed.go +++ b/libs/dyn/convert/from_typed.go @@ -126,7 +126,9 @@ func fromTypedStruct(src reflect.Value, ref dyn.Value, options ...fromTypedOptio // Either if the key was set in the reference or the field is not zero-valued, we include it. if ok || nv.Kind() != dyn.KindNil { - out.Set(refk, nv) + if err := out.Set(refk, nv); err != nil { + return dyn.InvalidValue, err + } } } @@ -184,7 +186,9 @@ func fromTypedMap(src reflect.Value, ref dyn.Value) (dyn.Value, error) { // Every entry is represented, even if it is a nil. // Otherwise, a map with zero-valued structs would yield a nil as well. - out.Set(refk, nv) + if err := out.Set(refk, nv); err != nil { + return dyn.InvalidValue, err + } } return dyn.V(out), nil diff --git a/libs/dyn/convert/normalize.go b/libs/dyn/convert/normalize.go index 106add35df..08b55e7e40 100644 --- a/libs/dyn/convert/normalize.go +++ b/libs/dyn/convert/normalize.go @@ -116,7 +116,12 @@ func (n normalizeOptions) normalizeStruct(typ reflect.Type, src dyn.Value, seen } } - out.Set(pk, nv) + if err := out.Set(pk, nv); err != nil { + return dyn.InvalidValue, diag.Diagnostics{diag.Diagnostic{ + Severity: diag.Error, + Summary: err.Error(), + }} + } } // Return the normalized value if missing fields are not included. @@ -162,7 +167,9 @@ func (n normalizeOptions) normalizeStruct(typ reflect.Type, src dyn.Value, seen continue } if v.IsValid() { - out.Set(dyn.V(k), v) + if err := out.Set(dyn.V(k), v); err != nil { + return dyn.InvalidValue, diag.FromErr(err) + } } } @@ -201,7 +208,9 @@ func (n normalizeOptions) normalizeMap(typ reflect.Type, src dyn.Value, seen []r } } - out.Set(pk, nv) + if err := out.Set(pk, nv); err != nil { + return dyn.InvalidValue, diag.FromErr(err) + } } return dyn.NewValue(out, src.Locations()), diags diff --git a/libs/dyn/jsonloader/json.go b/libs/dyn/jsonloader/json.go index cbf539263a..39d1c51ba3 100644 --- a/libs/dyn/jsonloader/json.go +++ b/libs/dyn/jsonloader/json.go @@ -70,7 +70,9 @@ func decodeValue(decoder *json.Decoder, o *Offset) (dyn.Value, error) { return invalidValueWithLocation(decoder, o), err } - obj.Set(keyVal, val) + if err := obj.Set(keyVal, val); err != nil { + return invalidValueWithLocation(decoder, o), err + } } // Consume the closing '}' if _, err := decoder.Token(); err != nil { diff --git a/libs/dyn/mapping.go b/libs/dyn/mapping.go index f9f2d2e97e..98400f8a3c 100644 --- a/libs/dyn/mapping.go +++ b/libs/dyn/mapping.go @@ -41,7 +41,9 @@ func newMappingWithSize(size int) Mapping { func newMappingFromGoMap(vin map[string]Value) Mapping { m := newMappingWithSize(len(vin)) for k, v := range vin { - m.Set(V(k), v) + if err := m.Set(V(k), v); err != nil { + panic(err) + } } return m } @@ -144,6 +146,8 @@ func (m Mapping) Clone() Mapping { // Merge merges the key-value pairs from another Mapping into the current Mapping. func (m *Mapping) Merge(n Mapping) { for _, p := range n.pairs { - m.Set(p.Key, p.Value) + if err := m.Set(p.Key, p.Value); err != nil { + panic(err) + } } } diff --git a/libs/dyn/merge/merge.go b/libs/dyn/merge/merge.go index 29decd7793..b96d493a1d 100644 --- a/libs/dyn/merge/merge.go +++ b/libs/dyn/merge/merge.go @@ -88,10 +88,14 @@ func mergeMap(a, b dyn.Value) (dyn.Value, error) { if err != nil { return dyn.InvalidValue, err } - out.Set(pk, merged) + if err := out.Set(pk, merged); err != nil { + return dyn.InvalidValue, err + } } else { // Otherwise, just set the value. - out.Set(pk, pv) + if err := out.Set(pk, pv); err != nil { + return dyn.InvalidValue, err + } } } diff --git a/libs/dyn/pattern.go b/libs/dyn/pattern.go index aecdc3ca63..fb9758559b 100644 --- a/libs/dyn/pattern.go +++ b/libs/dyn/pattern.go @@ -69,7 +69,9 @@ func (c anyKeyComponent) visit(v Value, prefix Path, suffix Pattern, opts visitO return InvalidValue, err } - m.Set(pk, nv) + if err := m.Set(pk, nv); err != nil { + panic(err) + } } return NewValue(m, v.Locations()), nil diff --git a/libs/dyn/visit.go b/libs/dyn/visit.go index 38adec24ff..cc2d8619c8 100644 --- a/libs/dyn/visit.go +++ b/libs/dyn/visit.go @@ -122,7 +122,9 @@ func (component pathComponent) visit(v Value, prefix Path, suffix Pattern, opts // Return an updated map value. m = m.Clone() - m.Set(V(component.key), nv) + if err := m.Set(V(component.key), nv); err != nil { + return InvalidValue, err + } return Value{ v: m, k: KindMap, diff --git a/libs/dyn/visit_map.go b/libs/dyn/visit_map.go index 3f0cded03b..cbd1af13d8 100644 --- a/libs/dyn/visit_map.go +++ b/libs/dyn/visit_map.go @@ -25,7 +25,9 @@ func Foreach(fn MapFunc) MapFunc { if err != nil { return InvalidValue, err } - m.Set(pk, nv) + if err := m.Set(pk, nv); err != nil { + return InvalidValue, err + } } return NewValue(m, v.Locations()), nil case KindSequence: diff --git a/libs/dyn/visit_set.go b/libs/dyn/visit_set.go index b086fb8a91..d5a687a02d 100644 --- a/libs/dyn/visit_set.go +++ b/libs/dyn/visit_set.go @@ -41,7 +41,9 @@ func SetByPath(v Value, p Path, nv Value) (Value, error) { // Return an updated map value. m = m.Clone() - m.Set(V(component.key), nv) + if err := m.Set(V(component.key), nv); err != nil { + return InvalidValue, err + } return Value{ v: m, k: KindMap, diff --git a/libs/dyn/walk.go b/libs/dyn/walk.go index c51a11e22c..94e2a36c0d 100644 --- a/libs/dyn/walk.go +++ b/libs/dyn/walk.go @@ -45,7 +45,9 @@ func walk(v Value, p Path, fn func(p Path, v Value) (Value, error)) (Value, erro if err != nil { return InvalidValue, err } - out.Set(pk, nv) + if err := out.Set(pk, nv); err != nil { + panic(err) + } } v.v = out case KindSequence: diff --git a/libs/dyn/yamlloader/loader.go b/libs/dyn/yamlloader/loader.go index a77ee0744a..a8111e6c4d 100644 --- a/libs/dyn/yamlloader/loader.go +++ b/libs/dyn/yamlloader/loader.go @@ -129,7 +129,9 @@ func (d *loader) loadMapping(node *yaml.Node, loc dyn.Location) (dyn.Value, erro return dyn.InvalidValue, err } - acc.Set(k, v) + if err := acc.Set(k, v); err != nil { + return dyn.InvalidValue, err + } } if merge == nil { diff --git a/libs/env/loader.go b/libs/env/loader.go index f441ffa15e..74c54cee8f 100644 --- a/libs/env/loader.go +++ b/libs/env/loader.go @@ -43,7 +43,9 @@ func (le *configLoader) Configure(cfg *config.Config) error { if v == "" { continue } - a.Set(cfg, v) + if err := a.Set(cfg, v); err != nil { + return err + } } } return nil diff --git a/libs/git/config.go b/libs/git/config.go index fafd81bd67..15bffa1538 100644 --- a/libs/git/config.go +++ b/libs/git/config.go @@ -155,8 +155,12 @@ func globalGitConfig() (*config, error) { // > are missing or unreadable they will be ignored. // // We therefore ignore the error return value for the calls below. - config.loadFile(vfs.MustNew(xdgConfigHome), "git/config") - config.loadFile(vfs.MustNew(config.home), ".gitconfig") + if err := config.loadFile(vfs.MustNew(xdgConfigHome), "git/config"); err != nil { + return nil, err + } + if err := config.loadFile(vfs.MustNew(config.home), ".gitconfig"); err != nil { + return nil, err + } return config, nil } diff --git a/libs/process/stub.go b/libs/process/stub.go index 8472f65d5b..422f02b22f 100644 --- a/libs/process/stub.go +++ b/libs/process/stub.go @@ -149,10 +149,14 @@ func (s *processStub) run(cmd *exec.Cmd) error { continue } if resp.stdout != "" { - cmd.Stdout.Write([]byte(resp.stdout)) + if _, err := cmd.Stdout.Write([]byte(resp.stdout)); err != nil { + return err + } } if resp.stderr != "" { - cmd.Stderr.Write([]byte(resp.stderr)) + if _, err := cmd.Stderr.Write([]byte(resp.stderr)); err != nil { + return err + } } return resp.err } @@ -164,7 +168,9 @@ func (s *processStub) run(cmd *exec.Cmd) error { return fmt.Errorf("no default process stub") } if s.reponseStub.stdout != "" { - cmd.Stdout.Write([]byte(s.reponseStub.stdout)) + if _, err := cmd.Stdout.Write([]byte(s.reponseStub.stdout)); err != nil { + return err + } } return s.reponseStub.err } diff --git a/libs/sync/output.go b/libs/sync/output.go index c01b25ef64..5d41635ada 100644 --- a/libs/sync/output.go +++ b/libs/sync/output.go @@ -43,9 +43,18 @@ func TextOutput(ctx context.Context, ch <-chan Event, w io.Writer) { // Log only if something actually happened. // Sync events produce an empty string if nothing happened. if str := e.String(); str != "" { - bw.WriteString(str) - bw.WriteString("\n") - bw.Flush() + _, err := bw.WriteString(str) + if err != nil { + panic(err) + } + _, err = bw.WriteString("\n") + if err != nil { + panic(err) + } + err = bw.Flush() + if err != nil { + panic(err) + } } } } From f94b50db638b42340f3787a5693b630f0f31a02e Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 11:55:25 +0100 Subject: [PATCH 02/30] Enable errcheck everywhere --- .golangci.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 602f126303..f88bffa3c7 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -18,7 +18,3 @@ linters-settings: replacement: 'any' issues: exclude-dirs-use-default: false # recommended by docs https://golangci-lint.run/usage/false-positives/ - exclude-rules: - - path-except: (_test\.go|internal) - linters: - - errcheck From df67c28a052b2e8bbe37f09a847a27dacd8e9ea7 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 11:59:07 +0100 Subject: [PATCH 03/30] silent errcheck --- cmd/bundle/generate/dashboard.go | 6 +++--- cmd/bundle/summary.go | 2 +- cmd/root/progress_logger.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/bundle/generate/dashboard.go b/cmd/bundle/generate/dashboard.go index 4a538a2937..27b4dc9d0e 100644 --- a/cmd/bundle/generate/dashboard.go +++ b/cmd/bundle/generate/dashboard.go @@ -437,8 +437,8 @@ func NewGenerateDashboardCommand() *cobra.Command { // Included for symmetry with the other generate commands, but we prefer the shorter flags. cmd.Flags().StringVar(&d.existingPath, "existing-dashboard-path", "", `workspace path of the dashboard to generate configuration for`) cmd.Flags().StringVar(&d.existingID, "existing-dashboard-id", "", `ID of the dashboard to generate configuration for`) - cmd.Flags().MarkHidden("existing-dashboard-path") - cmd.Flags().MarkHidden("existing-dashboard-id") + _ = cmd.Flags().MarkHidden("existing-dashboard-path") + _ = cmd.Flags().MarkHidden("existing-dashboard-id") // Output flags. cmd.Flags().StringVarP(&d.resourceDir, "resource-dir", "d", "./resources", `directory to write the configuration to`) @@ -460,7 +460,7 @@ func NewGenerateDashboardCommand() *cobra.Command { cmd.MarkFlagsMutuallyExclusive("watch", "existing-id") // Completion for the resource flag. - cmd.RegisterFlagCompletionFunc("resource", dashboardResourceCompletion) + _ = cmd.RegisterFlagCompletionFunc("resource", dashboardResourceCompletion) cmd.RunE = d.RunE return cmd diff --git a/cmd/bundle/summary.go b/cmd/bundle/summary.go index 8c34dd6122..7c669c8454 100644 --- a/cmd/bundle/summary.go +++ b/cmd/bundle/summary.go @@ -73,7 +73,7 @@ func newSummaryCommand() *cobra.Command { if err != nil { return err } - cmd.OutOrStdout().Write(buf) + _, _ = cmd.OutOrStdout().Write(buf) default: return fmt.Errorf("unknown output type %s", root.OutputType(cmd)) } diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index 4d30bf4257..2a749425e1 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -69,6 +69,6 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog if err := flags.MarkHidden("progress-format"); err != nil { panic(err) } - cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) + _ = cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) return &f } From d0af547fa5de1244844467155e3165cd9b6caf56 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 12:01:36 +0100 Subject: [PATCH 04/30] silent more --- cmd/auth/env.go | 2 +- cmd/auth/token.go | 2 +- cmd/bundle/generate/job.go | 2 +- cmd/bundle/generate/pipeline.go | 2 +- cmd/bundle/validate.go | 2 +- libs/cmdio/logger.go | 6 +++--- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/auth/env.go b/cmd/auth/env.go index e72d153998..52b7cbbfdf 100644 --- a/cmd/auth/env.go +++ b/cmd/auth/env.go @@ -138,7 +138,7 @@ func newEnvCommand() *cobra.Command { if err != nil { return err } - cmd.OutOrStdout().Write(raw) + _, _ = cmd.OutOrStdout().Write(raw) return nil } diff --git a/cmd/auth/token.go b/cmd/auth/token.go index 3f9af43fa4..fbf8b68f6e 100644 --- a/cmd/auth/token.go +++ b/cmd/auth/token.go @@ -94,7 +94,7 @@ func newTokenCommand(persistentAuth *auth.PersistentAuth) *cobra.Command { if err != nil { return err } - cmd.OutOrStdout().Write(raw) + _, _ = cmd.OutOrStdout().Write(raw) return nil } diff --git a/cmd/bundle/generate/job.go b/cmd/bundle/generate/job.go index 9ac41e3cb2..5ae14ad7d0 100644 --- a/cmd/bundle/generate/job.go +++ b/cmd/bundle/generate/job.go @@ -30,7 +30,7 @@ func NewGenerateJobCommand() *cobra.Command { } cmd.Flags().Int64Var(&jobId, "existing-job-id", 0, `Job ID of the job to generate config for`) - cmd.MarkFlagRequired("existing-job-id") + _ = cmd.MarkFlagRequired("existing-job-id") wd, err := os.Getwd() if err != nil { diff --git a/cmd/bundle/generate/pipeline.go b/cmd/bundle/generate/pipeline.go index 910baa45f9..1247b77f4e 100644 --- a/cmd/bundle/generate/pipeline.go +++ b/cmd/bundle/generate/pipeline.go @@ -30,7 +30,7 @@ func NewGeneratePipelineCommand() *cobra.Command { } cmd.Flags().StringVar(&pipelineId, "existing-pipeline-id", "", `ID of the pipeline to generate config for`) - cmd.MarkFlagRequired("existing-pipeline-id") + _ = cmd.MarkFlagRequired("existing-pipeline-id") wd, err := os.Getwd() if err != nil { diff --git a/cmd/bundle/validate.go b/cmd/bundle/validate.go index 5331e7e7b1..3b50cc2580 100644 --- a/cmd/bundle/validate.go +++ b/cmd/bundle/validate.go @@ -20,7 +20,7 @@ func renderJsonOutput(cmd *cobra.Command, b *bundle.Bundle, diags diag.Diagnosti if err != nil { return err } - cmd.OutOrStdout().Write(buf) + _, _ = cmd.OutOrStdout().Write(buf) return diags.Error() } diff --git a/libs/cmdio/logger.go b/libs/cmdio/logger.go index 405533dee2..49ad826d4a 100644 --- a/libs/cmdio/logger.go +++ b/libs/cmdio/logger.go @@ -219,10 +219,10 @@ func (l *Logger) writeInplace(event Event) { } // clear from cursor to end of screen - l.Writer.Write([]byte("\033[0J")) + _, _ = l.Writer.Write([]byte("\033[0J")) - l.Writer.Write([]byte(event.String())) - l.Writer.Write([]byte("\n")) + _, _ = l.Writer.Write([]byte(event.String())) + _, _ = l.Writer.Write([]byte("\n")) l.isFirstEvent = false } From d075b6c22e0c16ff4cb395ad19a258e9f3e5d584 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 12:54:53 +0100 Subject: [PATCH 05/30] clean up --- bundle/libraries/upload_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bundle/libraries/upload_test.go b/bundle/libraries/upload_test.go index 4d777adfc8..493785bf50 100644 --- a/bundle/libraries/upload_test.go +++ b/bundle/libraries/upload_test.go @@ -23,7 +23,7 @@ func TestArtifactUploadForWorkspace(t *testing.T) { tmpDir := t.TempDir() whlFolder := filepath.Join(tmpDir, "whl") testutil.Touch(t, whlFolder, "source.whl") - _ = filepath.Join(whlFolder, "source.whl") + whlLocalPath := filepath.Join(whlFolder, "source.whl") b := &bundle.Bundle{ SyncRootPath: tmpDir, @@ -32,10 +32,10 @@ func TestArtifactUploadForWorkspace(t *testing.T) { ArtifactPath: "/foo/bar/artifacts", }, Artifacts: config.Artifacts{ - "whl": &config.Artifact{ + "whl": { Type: config.ArtifactPythonWheel, Files: []config.ArtifactFile{ - {Source: filepath.Join(whlFolder, "source.whl")}, + {Source: whlLocalPath}, }, }, }, @@ -111,7 +111,7 @@ func TestArtifactUploadForVolumes(t *testing.T) { tmpDir := t.TempDir() whlFolder := filepath.Join(tmpDir, "whl") testutil.Touch(t, whlFolder, "source.whl") - _ = filepath.Join(whlFolder, "source.whl") + whlLocalPath := filepath.Join(whlFolder, "source.whl") b := &bundle.Bundle{ SyncRootPath: tmpDir, @@ -120,10 +120,10 @@ func TestArtifactUploadForVolumes(t *testing.T) { ArtifactPath: "/Volumes/foo/bar/artifacts", }, Artifacts: config.Artifacts{ - "whl": &config.Artifact{ + "whl": { Type: config.ArtifactPythonWheel, Files: []config.ArtifactFile{ - {Source: filepath.Join(whlFolder, "source.whl")}, + {Source: whlLocalPath}, }, }, }, From 583f6f2ac1f22c6b66048130f1ab4800be113d28 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 13:12:03 +0100 Subject: [PATCH 06/30] clean up --- bundle/config/mutator/initialize_urls.go | 3 ++- .../config/mutator/resolve_resource_references.go | 5 +---- bundle/render/render_text_output.go | 6 ++++-- cmd/auth/describe.go | 3 ++- cmd/bundle/debug/terraform.go | 10 ++-------- cmd/bundle/run.go | 6 ++++-- cmd/root/auth.go | 4 +--- cmd/root/bundle.go | 12 +++--------- cmd/root/logger.go | 5 +++-- cmd/root/progress_logger.go | 8 ++------ libs/process/stub.go | 13 ++++++++----- libs/sync/output.go | 15 +++------------ 12 files changed, 35 insertions(+), 55 deletions(-) diff --git a/bundle/config/mutator/initialize_urls.go b/bundle/config/mutator/initialize_urls.go index d6a92da4c3..4cf7ed72c0 100644 --- a/bundle/config/mutator/initialize_urls.go +++ b/bundle/config/mutator/initialize_urls.go @@ -32,7 +32,8 @@ func (m *initializeURLs) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagn } orgId := strconv.FormatInt(workspaceId, 10) host := b.WorkspaceClient().Config.CanonicalHostName() - if err := initializeForWorkspace(b, orgId, host); err != nil { + err = initializeForWorkspace(b, orgId, host) + if err != nil { return diag.FromErr(err) } return nil diff --git a/bundle/config/mutator/resolve_resource_references.go b/bundle/config/mutator/resolve_resource_references.go index cb4c8223c4..bf902f9282 100644 --- a/bundle/config/mutator/resolve_resource_references.go +++ b/bundle/config/mutator/resolve_resource_references.go @@ -36,10 +36,7 @@ func (m *resolveResourceReferences) Apply(ctx context.Context, b *bundle.Bundle) return fmt.Errorf("failed to resolve %s, err: %w", v.Lookup, err) } - if err := v.Set(id); err != nil { - return err - } - return nil + return v.Set(id) }) } diff --git a/bundle/render/render_text_output.go b/bundle/render/render_text_output.go index af437d9bee..bf7c9a53a9 100644 --- a/bundle/render/render_text_output.go +++ b/bundle/render/render_text_output.go @@ -171,12 +171,14 @@ func RenderDiagnostics(out io.Writer, b *bundle.Bundle, diags diag.Diagnostics, if err != nil { return fmt.Errorf("failed to render summary: %w", err) } - if _, err := io.WriteString(out, "\n"); err != nil { + _, err = io.WriteString(out, "\n") + if err != nil { return err } } trailer := buildTrailer(diags) - if _, err := io.WriteString(out, trailer); err != nil { + _, err = io.WriteString(out, trailer) + if err != nil { return err } } diff --git a/cmd/auth/describe.go b/cmd/auth/describe.go index 16c5fe466d..c5fa8d26bf 100644 --- a/cmd/auth/describe.go +++ b/cmd/auth/describe.go @@ -141,7 +141,8 @@ func render(ctx context.Context, cmd *cobra.Command, status *authStatus, templat if err != nil { return err } - if _, err := cmd.OutOrStdout().Write(buf); err != nil { + _, err = cmd.OutOrStdout().Write(buf) + if err != nil { return err } default: diff --git a/cmd/bundle/debug/terraform.go b/cmd/bundle/debug/terraform.go index c2b4e8f7a6..c7d49ebb2f 100644 --- a/cmd/bundle/debug/terraform.go +++ b/cmd/bundle/debug/terraform.go @@ -60,19 +60,13 @@ For more information about filesystem mirrors, see the Terraform documentation: } switch root.OutputType(cmd) { case flags.OutputText: - err := cmdio.Render(cmd.Context(), dependencies.Terraform) - if err != nil { - return err - } + _ = cmdio.Render(cmd.Context(), dependencies.Terraform) case flags.OutputJSON: buf, err := json.MarshalIndent(dependencies, "", " ") if err != nil { return err } - _, err = cmd.OutOrStdout().Write(buf) - if err != nil { - return err - } + _, _ = cmd.OutOrStdout().Write(buf) default: return fmt.Errorf("unknown output type %s", root.OutputType(cmd)) } diff --git a/cmd/bundle/run.go b/cmd/bundle/run.go index 41068ef527..3bcebddd59 100644 --- a/cmd/bundle/run.go +++ b/cmd/bundle/run.go @@ -159,7 +159,8 @@ task or a Python wheel task, the second example applies. if err != nil { return err } - if _, err := cmd.OutOrStdout().Write([]byte(resultString)); err != nil { + _, err = cmd.OutOrStdout().Write([]byte(resultString)) + if err != nil { return err } case flags.OutputJSON: @@ -167,7 +168,8 @@ task or a Python wheel task, the second example applies. if err != nil { return err } - if _, err := cmd.OutOrStdout().Write(b); err != nil { + _, err = cmd.OutOrStdout().Write(b) + if err != nil { return err } default: diff --git a/cmd/root/auth.go b/cmd/root/auth.go index 4a5a9eb883..a39ab15e1a 100644 --- a/cmd/root/auth.go +++ b/cmd/root/auth.go @@ -37,9 +37,7 @@ func (e ErrNoAccountProfiles) Error() string { func initProfileFlag(cmd *cobra.Command) { cmd.PersistentFlags().StringP("profile", "p", "", "~/.databrickscfg profile") - if err := cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion); err != nil { - panic(err) - } + _ = cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion) } func profileFlagValue(cmd *cobra.Command) (string, bool) { diff --git a/cmd/root/bundle.go b/cmd/root/bundle.go index ec72e3b676..5d7e8909ee 100644 --- a/cmd/root/bundle.go +++ b/cmd/root/bundle.go @@ -146,19 +146,13 @@ func targetCompletion(cmd *cobra.Command, args []string, toComplete string) ([]s func initTargetFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "target" parameter. cmd.PersistentFlags().StringP("target", "t", "", "bundle target to use (if applicable)") - if err := cmd.RegisterFlagCompletionFunc("target", targetCompletion); err != nil { - panic(err) - } + _ = cmd.RegisterFlagCompletionFunc("target", targetCompletion) } // DEPRECATED flag func initEnvironmentFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "environment" parameter. cmd.PersistentFlags().StringP("environment", "e", "", "bundle target to use (if applicable)") - if err := cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead"); err != nil { - panic(err) - } - if err := cmd.RegisterFlagCompletionFunc("environment", targetCompletion); err != nil { - panic(err) - } + _ = cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead") + _ = cmd.RegisterFlagCompletionFunc("environment", targetCompletion) } diff --git a/cmd/root/logger.go b/cmd/root/logger.go index a2c2cc49ab..7ea090bab1 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -45,8 +45,9 @@ func (f *logFlags) makeLogHandler(opts slog.HandlerOptions) (slog.Handler, error func (f *logFlags) initializeContext(ctx context.Context) (context.Context, error) { if f.debug { - if err := f.level.Set("debug"); err != nil { - panic(err) + err := f.level.Set("debug") + if err != nil { + return nil, err } } diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index 2a749425e1..3d643cadb9 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -59,16 +59,12 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envProgressFormat); ok { - if err := f.ProgressLogFormat.Set(v); err != nil { - panic(err) - } + _ = f.ProgressLogFormat.Set(v) } flags := cmd.PersistentFlags() flags.Var(&f.ProgressLogFormat, "progress-format", "format for progress logs (append, inplace, json)") - if err := flags.MarkHidden("progress-format"); err != nil { - panic(err) - } + _ = flags.MarkHidden("progress-format") _ = cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) return &f } diff --git a/libs/process/stub.go b/libs/process/stub.go index 422f02b22f..3f80a91ba3 100644 --- a/libs/process/stub.go +++ b/libs/process/stub.go @@ -148,17 +148,20 @@ func (s *processStub) run(cmd *exec.Cmd) error { if !re.MatchString(norm) { continue } + err := resp.err if resp.stdout != "" { - if _, err := cmd.Stdout.Write([]byte(resp.stdout)); err != nil { - return err + _, err1 := cmd.Stdout.Write([]byte(resp.stdout)) + if err == nil { + err = err1 } } if resp.stderr != "" { - if _, err := cmd.Stderr.Write([]byte(resp.stderr)); err != nil { - return err + _, err1 := cmd.Stderr.Write([]byte(resp.stderr)) + if err == nil { + err = err1 } } - return resp.err + return err } if s.callback != nil { return s.callback(cmd) diff --git a/libs/sync/output.go b/libs/sync/output.go index 5d41635ada..e6ac8c56c7 100644 --- a/libs/sync/output.go +++ b/libs/sync/output.go @@ -43,18 +43,9 @@ func TextOutput(ctx context.Context, ch <-chan Event, w io.Writer) { // Log only if something actually happened. // Sync events produce an empty string if nothing happened. if str := e.String(); str != "" { - _, err := bw.WriteString(str) - if err != nil { - panic(err) - } - _, err = bw.WriteString("\n") - if err != nil { - panic(err) - } - err = bw.Flush() - if err != nil { - panic(err) - } + _, _ = bw.WriteString(str) + _, _ = bw.WriteString("\n") + _ = bw.Flush() } } } From 9a41b6505bda392040f85bf15d6c13190c406c7f Mon Sep 17 00:00:00 2001 From: "Denis Bilenko (aider)" Date: Mon, 9 Dec 2024 13:15:27 +0100 Subject: [PATCH 07/30] refactor: Ignore error on MarkHidden for verbose flag --- cmd/bundle/deploy.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index 1ada765312..c9d91e6651 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -38,9 +38,7 @@ func newDeployCommand() *cobra.Command { } cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension - if err := cmd.Flags().MarkHidden("verbose"); err != nil { - return nil - } + _ = cmd.Flags().MarkHidden("verbose") cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() From 1c8db2fbc1cb52839db24962985a4bda928bf964 Mon Sep 17 00:00:00 2001 From: "Denis Bilenko (aider)" Date: Mon, 9 Dec 2024 13:16:05 +0100 Subject: [PATCH 08/30] refactor: Ignore errors from MarkHidden flag calls --- cmd/configure/flags.go | 5 +---- cmd/root/logger.go | 12 +++--------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/cmd/configure/flags.go b/cmd/configure/flags.go index 911dce2458..4258db5ed7 100644 --- a/cmd/configure/flags.go +++ b/cmd/configure/flags.go @@ -21,8 +21,5 @@ func (f *configureFlags) Register(cmd *cobra.Command) { // Include token flag for compatibility with the legacy CLI. // It doesn't actually do anything because we always use PATs. cmd.Flags().Bool("token", true, "Configure using Databricks Personal Access Token") - err := cmd.Flags().MarkHidden("token") - if err != nil { - panic(err) - } + _ = cmd.Flags().MarkHidden("token") } diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 7ea090bab1..5eb792029c 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -106,15 +106,9 @@ func initLogFlags(cmd *cobra.Command) *logFlags { flags.Var(&f.output, "log-format", "log output format (text or json)") // mark fine-grained flags hidden from global --help - if err := flags.MarkHidden("log-file"); err != nil { - panic(err) - } - if err := flags.MarkHidden("log-level"); err != nil { - panic(err) - } - if err := flags.MarkHidden("log-format"); err != nil { - panic(err) - } + _ = flags.MarkHidden("log-file") + _ = flags.MarkHidden("log-level") + _ = flags.MarkHidden("log-format") if err := cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete); err != nil { panic(err) From 8cd405e4e7bf4d46e4f76d416de282e5c194592a Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 13:17:33 +0100 Subject: [PATCH 09/30] fmt --- cmd/root/logger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 5eb792029c..5f082e3a87 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -107,7 +107,7 @@ func initLogFlags(cmd *cobra.Command) *logFlags { // mark fine-grained flags hidden from global --help _ = flags.MarkHidden("log-file") - _ = flags.MarkHidden("log-level") + _ = flags.MarkHidden("log-level") _ = flags.MarkHidden("log-format") if err := cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete); err != nil { From b34a1e82da16d2895c2c947c05497880cf4657f4 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 13:19:03 +0100 Subject: [PATCH 10/30] ignore error from MarkDeprecated --- cmd/bundle/deploy.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index c9d91e6651..0ded1b5b50 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -33,9 +33,7 @@ func newDeployCommand() *cobra.Command { cmd.Flags().StringVar(&clusterId, "compute-id", "", "Override cluster in the deployment with the given compute ID.") cmd.Flags().StringVarP(&clusterId, "cluster-id", "c", "", "Override cluster in the deployment with the given cluster ID.") cmd.Flags().BoolVar(&autoApprove, "auto-approve", false, "Skip interactive approvals that might be required for deployment.") - if err := cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead"); err != nil { - return nil - } + _ = cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension _ = cmd.Flags().MarkHidden("verbose") From 5f12b47c6761e6ba82700b17c4ab0062874ec625 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 13:22:02 +0100 Subject: [PATCH 11/30] ignore errors from RegisterCompletionFunc --- cmd/root/logger.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 5f082e3a87..1e89104fee 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -110,14 +110,8 @@ func initLogFlags(cmd *cobra.Command) *logFlags { _ = flags.MarkHidden("log-level") _ = flags.MarkHidden("log-format") - if err := cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete); err != nil { - panic(err) - } - if err := cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete); err != nil { - panic(err) - } - if err := cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete); err != nil { - panic(err) - } + _ = cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete) + _ = cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete) + _ = cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete) return &f } From 1fbe51df6af3f0768f15e02f4ed2fb94e457c239 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 13:25:48 +0100 Subject: [PATCH 12/30] do not panic on write errosr --- libs/cmdio/logger.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/libs/cmdio/logger.go b/libs/cmdio/logger.go index 49ad826d4a..905ec01333 100644 --- a/libs/cmdio/logger.go +++ b/libs/cmdio/logger.go @@ -188,21 +188,13 @@ func (l *Logger) writeJson(event Event) { // we panic because there we cannot catch this in jobs.RunNowAndWait panic(err) } - if _, err := l.Writer.Write([]byte(b)); err != nil { - panic(err) - } - if _, err := l.Writer.Write([]byte("\n")); err != nil { - panic(err) - } + _, _ = l.Writer.Write([]byte(b)) + _, _ = l.Writer.Write([]byte("\n")) } func (l *Logger) writeAppend(event Event) { - if _, err := l.Writer.Write([]byte(event.String())); err != nil { - panic(err) - } - if _, err := l.Writer.Write([]byte("\n")); err != nil { - panic(err) - } + _, _ = l.Writer.Write([]byte(event.String())) + _, _ = l.Writer.Write([]byte("\n")) } func (l *Logger) writeInplace(event Event) { From 3af2a09c1b4ece0837e3303649061333e0877cdd Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:04:55 +0100 Subject: [PATCH 13/30] clean up --- libs/dyn/convert/normalize.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libs/dyn/convert/normalize.go b/libs/dyn/convert/normalize.go index 08b55e7e40..58cd13dfdd 100644 --- a/libs/dyn/convert/normalize.go +++ b/libs/dyn/convert/normalize.go @@ -117,10 +117,7 @@ func (n normalizeOptions) normalizeStruct(typ reflect.Type, src dyn.Value, seen } if err := out.Set(pk, nv); err != nil { - return dyn.InvalidValue, diag.Diagnostics{diag.Diagnostic{ - Severity: diag.Error, - Summary: err.Error(), - }} + return dyn.InvalidValue, diag.FromErr(err) } } From 8e77be3a9ebb9c9848e790458fd8860862da43f2 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:11:49 +0100 Subject: [PATCH 14/30] ignore err where it was intended --- libs/git/config.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libs/git/config.go b/libs/git/config.go index 15bffa1538..f7ff057e1b 100644 --- a/libs/git/config.go +++ b/libs/git/config.go @@ -155,12 +155,8 @@ func globalGitConfig() (*config, error) { // > are missing or unreadable they will be ignored. // // We therefore ignore the error return value for the calls below. - if err := config.loadFile(vfs.MustNew(xdgConfigHome), "git/config"); err != nil { - return nil, err - } - if err := config.loadFile(vfs.MustNew(config.home), ".gitconfig"); err != nil { - return nil, err - } + _ = config.loadFile(vfs.MustNew(xdgConfigHome), "git/config") + _ = config.loadFile(vfs.MustNew(config.home), ".gitconfig") return config, nil } From 207c5fd02ae7aa1f6663766c909c07b9b4eb28c3 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:22:25 +0100 Subject: [PATCH 15/30] rm risky panics --- cmd/root/io.go | 5 ++--- libs/auth/callback.go | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cmd/root/io.go b/cmd/root/io.go index 1c03ce70f1..39af251f87 100644 --- a/cmd/root/io.go +++ b/cmd/root/io.go @@ -21,9 +21,8 @@ func initOutputFlag(cmd *cobra.Command) *outputFlag { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envOutputFormat); ok { - if err := f.output.Set(v); err != nil { - panic(err) - } + // QQQ log the error? + _ = f.output.Set(v) } cmd.PersistentFlags().VarP(&f.output, "output", "o", "output type: text or json") diff --git a/libs/auth/callback.go b/libs/auth/callback.go index 852e1f1b8c..3893a5041a 100644 --- a/libs/auth/callback.go +++ b/libs/auth/callback.go @@ -54,9 +54,7 @@ func newCallback(ctx context.Context, a *PersistentAuth) (*callbackServer, error } cb.srv.Handler = cb go func() { - if err := cb.srv.Serve(cb.ln); err != http.ErrServerClosed { - panic(err) - } + _ = cb.srv.Serve(cb.ln) }() return cb, nil } From 65b4f783311d2599dfeb182506322d8c4f6352e6 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:24:30 +0100 Subject: [PATCH 16/30] rm risky panics --- cmd/root/logger.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 1e89104fee..1cb8f5a6ef 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -84,19 +84,14 @@ func initLogFlags(cmd *cobra.Command) *logFlags { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envLogFile); ok { - if err := f.file.Set(v); err != nil { - panic(err) - } + // QQQ log the error? here and below + _ = f.file.Set(v) } if v, ok := env.Lookup(cmd.Context(), envLogLevel); ok { - if err := f.level.Set(v); err != nil { - panic(err) - } + _ = f.level.Set(v) } if v, ok := env.Lookup(cmd.Context(), envLogFormat); ok { - if err := f.output.Set(v); err != nil { - panic(err) - } + _ = f.output.Set(v) } flags := cmd.PersistentFlags() From 30638351f8e39b60169bc6f8114041adf7923656 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:29:51 +0100 Subject: [PATCH 17/30] clean up --- libs/dyn/pattern.go | 5 +++-- libs/dyn/walk.go | 5 +++-- libs/process/stub.go | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libs/dyn/pattern.go b/libs/dyn/pattern.go index fb9758559b..855d59dfce 100644 --- a/libs/dyn/pattern.go +++ b/libs/dyn/pattern.go @@ -69,8 +69,9 @@ func (c anyKeyComponent) visit(v Value, prefix Path, suffix Pattern, opts visitO return InvalidValue, err } - if err := m.Set(pk, nv); err != nil { - panic(err) + err = m.Set(pk, nv) + if err != nil { + return InvalidValue, err } } diff --git a/libs/dyn/walk.go b/libs/dyn/walk.go index 94e2a36c0d..e61bbb0d9b 100644 --- a/libs/dyn/walk.go +++ b/libs/dyn/walk.go @@ -45,8 +45,9 @@ func walk(v Value, p Path, fn func(p Path, v Value) (Value, error)) (Value, erro if err != nil { return InvalidValue, err } - if err := out.Set(pk, nv); err != nil { - panic(err) + err = out.Set(pk, nv) + if err != nil { + return InvalidValue, err } } v.v = out diff --git a/libs/process/stub.go b/libs/process/stub.go index 3f80a91ba3..8ab6fd705f 100644 --- a/libs/process/stub.go +++ b/libs/process/stub.go @@ -170,10 +170,12 @@ func (s *processStub) run(cmd *exec.Cmd) error { if s.reponseStub == zeroStub { return fmt.Errorf("no default process stub") } + err := s.reponseStub.err if s.reponseStub.stdout != "" { - if _, err := cmd.Stdout.Write([]byte(s.reponseStub.stdout)); err != nil { - return err + _, err1 := cmd.Stdout.Write([]byte(s.reponseStub.stdout)) + if err == nil { + err = err1 } } - return s.reponseStub.err + return err } From 0c5fa24fd7c8ae71946df58d52874d7e6339a7ac Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:32:52 +0100 Subject: [PATCH 18/30] clean ups --- cmd/root/progress_logger.go | 2 +- libs/cmdio/logger.go | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index 3d643cadb9..4ec21e22f1 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -59,7 +59,7 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envProgressFormat); ok { - _ = f.ProgressLogFormat.Set(v) + _ = f.Set(v) } flags := cmd.PersistentFlags() diff --git a/libs/cmdio/logger.go b/libs/cmdio/logger.go index 905ec01333..1eebe3b0de 100644 --- a/libs/cmdio/logger.go +++ b/libs/cmdio/logger.go @@ -200,15 +200,11 @@ func (l *Logger) writeAppend(event Event) { func (l *Logger) writeInplace(event Event) { if l.isFirstEvent { // save cursor location - if _, err := l.Writer.Write([]byte("\033[s")); err != nil { - panic(err) - } + _ = l.Writer.Write([]byte("\033[s")) } // move cursor to saved location - if _, err := l.Writer.Write([]byte("\033[u")); err != nil { - panic(err) - } + _ = l.Writer.Write([]byte("\033[u")) // clear from cursor to end of screen _, _ = l.Writer.Write([]byte("\033[0J")) From a05f0c0176a6be876e6efe841c36d3497df8509b Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:41:30 +0100 Subject: [PATCH 19/30] fix assignment mismatch --- libs/cmdio/logger.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/cmdio/logger.go b/libs/cmdio/logger.go index 1eebe3b0de..5e89b3a34f 100644 --- a/libs/cmdio/logger.go +++ b/libs/cmdio/logger.go @@ -200,11 +200,11 @@ func (l *Logger) writeAppend(event Event) { func (l *Logger) writeInplace(event Event) { if l.isFirstEvent { // save cursor location - _ = l.Writer.Write([]byte("\033[s")) + _, _ = l.Writer.Write([]byte("\033[s")) } // move cursor to saved location - _ = l.Writer.Write([]byte("\033[u")) + _, _ = l.Writer.Write([]byte("\033[u")) // clear from cursor to end of screen _, _ = l.Writer.Write([]byte("\033[0J")) From e1c607bcfd0123899926c48e3a1676f5e180c0a9 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Mon, 9 Dec 2024 14:45:43 +0100 Subject: [PATCH 20/30] fixes --- libs/dyn/mapping.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libs/dyn/mapping.go b/libs/dyn/mapping.go index 98400f8a3c..c93be9b6a6 100644 --- a/libs/dyn/mapping.go +++ b/libs/dyn/mapping.go @@ -41,9 +41,8 @@ func newMappingWithSize(size int) Mapping { func newMappingFromGoMap(vin map[string]Value) Mapping { m := newMappingWithSize(len(vin)) for k, v := range vin { - if err := m.Set(V(k), v); err != nil { - panic(err) - } + // QQQ log error or panic? + _ = m.Set(V(k), v) } return m } @@ -146,8 +145,7 @@ func (m Mapping) Clone() Mapping { // Merge merges the key-value pairs from another Mapping into the current Mapping. func (m *Mapping) Merge(n Mapping) { for _, p := range n.pairs { - if err := m.Set(p.Key, p.Value); err != nil { - panic(err) - } + // QQQ log error or panic? + _ = m.Set(p.Key, p.Value) } } From cc7a46d545092121edd2abff592d1ed704809aa8 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 11:16:45 +0100 Subject: [PATCH 21/30] keep ignoring errors that were ignored before --- libs/dyn/convert/from_typed.go | 10 ++++------ libs/dyn/jsonloader/json.go | 5 ++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/libs/dyn/convert/from_typed.go b/libs/dyn/convert/from_typed.go index 3d54e9d5d8..905c5a4420 100644 --- a/libs/dyn/convert/from_typed.go +++ b/libs/dyn/convert/from_typed.go @@ -126,9 +126,8 @@ func fromTypedStruct(src reflect.Value, ref dyn.Value, options ...fromTypedOptio // Either if the key was set in the reference or the field is not zero-valued, we include it. if ok || nv.Kind() != dyn.KindNil { - if err := out.Set(refk, nv); err != nil { - return dyn.InvalidValue, err - } + // QQQ log error? + _ = out.Set(refk, nv) } } @@ -186,9 +185,8 @@ func fromTypedMap(src reflect.Value, ref dyn.Value) (dyn.Value, error) { // Every entry is represented, even if it is a nil. // Otherwise, a map with zero-valued structs would yield a nil as well. - if err := out.Set(refk, nv); err != nil { - return dyn.InvalidValue, err - } + // QQQ log error? + _ = out.Set(refk, nv) } return dyn.V(out), nil diff --git a/libs/dyn/jsonloader/json.go b/libs/dyn/jsonloader/json.go index 39d1c51ba3..3036596be7 100644 --- a/libs/dyn/jsonloader/json.go +++ b/libs/dyn/jsonloader/json.go @@ -70,9 +70,8 @@ func decodeValue(decoder *json.Decoder, o *Offset) (dyn.Value, error) { return invalidValueWithLocation(decoder, o), err } - if err := obj.Set(keyVal, val); err != nil { - return invalidValueWithLocation(decoder, o), err - } + // QQQ log this? + _ = obj.Set(keyVal, val) } // Consume the closing '}' if _, err := decoder.Token(); err != nil { From 3b99cdf21a59f9be035334b7ed760920b98e5600 Mon Sep 17 00:00:00 2001 From: "Denis Bilenko (aider)" Date: Tue, 10 Dec 2024 11:23:47 +0100 Subject: [PATCH 22/30] refactor: Remove error handling for Set method calls --- libs/dyn/pattern.go | 5 +---- libs/dyn/visit.go | 4 +--- libs/dyn/visit_map.go | 4 +--- libs/dyn/walk.go | 5 +---- libs/dyn/yamlloader/loader.go | 4 +--- 5 files changed, 5 insertions(+), 17 deletions(-) diff --git a/libs/dyn/pattern.go b/libs/dyn/pattern.go index 855d59dfce..2d2e9cae7b 100644 --- a/libs/dyn/pattern.go +++ b/libs/dyn/pattern.go @@ -69,10 +69,7 @@ func (c anyKeyComponent) visit(v Value, prefix Path, suffix Pattern, opts visitO return InvalidValue, err } - err = m.Set(pk, nv) - if err != nil { - return InvalidValue, err - } + m.Set(pk, nv) //nolint:errcheck } return NewValue(m, v.Locations()), nil diff --git a/libs/dyn/visit.go b/libs/dyn/visit.go index cc2d8619c8..95515115ea 100644 --- a/libs/dyn/visit.go +++ b/libs/dyn/visit.go @@ -122,9 +122,7 @@ func (component pathComponent) visit(v Value, prefix Path, suffix Pattern, opts // Return an updated map value. m = m.Clone() - if err := m.Set(V(component.key), nv); err != nil { - return InvalidValue, err - } + m.Set(V(component.key), nv) //nolint:errcheck return Value{ v: m, k: KindMap, diff --git a/libs/dyn/visit_map.go b/libs/dyn/visit_map.go index cbd1af13d8..db45260381 100644 --- a/libs/dyn/visit_map.go +++ b/libs/dyn/visit_map.go @@ -25,9 +25,7 @@ func Foreach(fn MapFunc) MapFunc { if err != nil { return InvalidValue, err } - if err := m.Set(pk, nv); err != nil { - return InvalidValue, err - } + m.Set(pk, nv) //nolint:errcheck } return NewValue(m, v.Locations()), nil case KindSequence: diff --git a/libs/dyn/walk.go b/libs/dyn/walk.go index e61bbb0d9b..b3576e0881 100644 --- a/libs/dyn/walk.go +++ b/libs/dyn/walk.go @@ -45,10 +45,7 @@ func walk(v Value, p Path, fn func(p Path, v Value) (Value, error)) (Value, erro if err != nil { return InvalidValue, err } - err = out.Set(pk, nv) - if err != nil { - return InvalidValue, err - } + out.Set(pk, nv) //nolint:errcheck } v.v = out case KindSequence: diff --git a/libs/dyn/yamlloader/loader.go b/libs/dyn/yamlloader/loader.go index a8111e6c4d..965753ccd4 100644 --- a/libs/dyn/yamlloader/loader.go +++ b/libs/dyn/yamlloader/loader.go @@ -129,9 +129,7 @@ func (d *loader) loadMapping(node *yaml.Node, loc dyn.Location) (dyn.Value, erro return dyn.InvalidValue, err } - if err := acc.Set(k, v); err != nil { - return dyn.InvalidValue, err - } + acc.Set(k, v) //nolint:errcheck } if merge == nil { From 16d412aa6798f6802628332b88db5183ce3feff4 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 11:25:49 +0100 Subject: [PATCH 23/30] Keep libs/dyn unchanged; annotate with //nolint:errcheck --- libs/dyn/convert/from_typed.go | 6 ++---- libs/dyn/convert/normalize.go | 12 +++--------- libs/dyn/jsonloader/json.go | 3 +-- libs/dyn/mapping.go | 6 ++---- libs/dyn/merge/merge.go | 8 ++------ libs/dyn/visit_set.go | 4 +--- 6 files changed, 11 insertions(+), 28 deletions(-) diff --git a/libs/dyn/convert/from_typed.go b/libs/dyn/convert/from_typed.go index 905c5a4420..ed1b85a365 100644 --- a/libs/dyn/convert/from_typed.go +++ b/libs/dyn/convert/from_typed.go @@ -126,8 +126,7 @@ func fromTypedStruct(src reflect.Value, ref dyn.Value, options ...fromTypedOptio // Either if the key was set in the reference or the field is not zero-valued, we include it. if ok || nv.Kind() != dyn.KindNil { - // QQQ log error? - _ = out.Set(refk, nv) + out.Set(refk, nv) // nolint:errcheck } } @@ -185,8 +184,7 @@ func fromTypedMap(src reflect.Value, ref dyn.Value) (dyn.Value, error) { // Every entry is represented, even if it is a nil. // Otherwise, a map with zero-valued structs would yield a nil as well. - // QQQ log error? - _ = out.Set(refk, nv) + out.Set(refk, nv) //nolint:errcheck } return dyn.V(out), nil diff --git a/libs/dyn/convert/normalize.go b/libs/dyn/convert/normalize.go index 58cd13dfdd..31cd8b6e3f 100644 --- a/libs/dyn/convert/normalize.go +++ b/libs/dyn/convert/normalize.go @@ -116,9 +116,7 @@ func (n normalizeOptions) normalizeStruct(typ reflect.Type, src dyn.Value, seen } } - if err := out.Set(pk, nv); err != nil { - return dyn.InvalidValue, diag.FromErr(err) - } + out.Set(pk, nv) //nolint:errcheck } // Return the normalized value if missing fields are not included. @@ -164,9 +162,7 @@ func (n normalizeOptions) normalizeStruct(typ reflect.Type, src dyn.Value, seen continue } if v.IsValid() { - if err := out.Set(dyn.V(k), v); err != nil { - return dyn.InvalidValue, diag.FromErr(err) - } + out.Set(dyn.V(k), v) // nolint:errcheck } } @@ -205,9 +201,7 @@ func (n normalizeOptions) normalizeMap(typ reflect.Type, src dyn.Value, seen []r } } - if err := out.Set(pk, nv); err != nil { - return dyn.InvalidValue, diag.FromErr(err) - } + out.Set(pk, nv) //nolint:errcheck } return dyn.NewValue(out, src.Locations()), diags diff --git a/libs/dyn/jsonloader/json.go b/libs/dyn/jsonloader/json.go index 3036596be7..3f2dc859fe 100644 --- a/libs/dyn/jsonloader/json.go +++ b/libs/dyn/jsonloader/json.go @@ -70,8 +70,7 @@ func decodeValue(decoder *json.Decoder, o *Offset) (dyn.Value, error) { return invalidValueWithLocation(decoder, o), err } - // QQQ log this? - _ = obj.Set(keyVal, val) + obj.Set(keyVal, val) //nolint:errcheck } // Consume the closing '}' if _, err := decoder.Token(); err != nil { diff --git a/libs/dyn/mapping.go b/libs/dyn/mapping.go index c93be9b6a6..f5dbd18e6c 100644 --- a/libs/dyn/mapping.go +++ b/libs/dyn/mapping.go @@ -41,8 +41,7 @@ func newMappingWithSize(size int) Mapping { func newMappingFromGoMap(vin map[string]Value) Mapping { m := newMappingWithSize(len(vin)) for k, v := range vin { - // QQQ log error or panic? - _ = m.Set(V(k), v) + m.Set(V(k), v) //nolint:errcheck } return m } @@ -145,7 +144,6 @@ func (m Mapping) Clone() Mapping { // Merge merges the key-value pairs from another Mapping into the current Mapping. func (m *Mapping) Merge(n Mapping) { for _, p := range n.pairs { - // QQQ log error or panic? - _ = m.Set(p.Key, p.Value) + m.Set(p.Key, p.Value) //nolint:errcheck } } diff --git a/libs/dyn/merge/merge.go b/libs/dyn/merge/merge.go index b96d493a1d..a83bbc1527 100644 --- a/libs/dyn/merge/merge.go +++ b/libs/dyn/merge/merge.go @@ -88,14 +88,10 @@ func mergeMap(a, b dyn.Value) (dyn.Value, error) { if err != nil { return dyn.InvalidValue, err } - if err := out.Set(pk, merged); err != nil { - return dyn.InvalidValue, err - } + out.Set(pk, merged) //nolint:errcheck } else { // Otherwise, just set the value. - if err := out.Set(pk, pv); err != nil { - return dyn.InvalidValue, err - } + out.Set(pk, pv) //nolint:errcheck } } diff --git a/libs/dyn/visit_set.go b/libs/dyn/visit_set.go index d5a687a02d..9991d311fa 100644 --- a/libs/dyn/visit_set.go +++ b/libs/dyn/visit_set.go @@ -41,9 +41,7 @@ func SetByPath(v Value, p Path, nv Value) (Value, error) { // Return an updated map value. m = m.Clone() - if err := m.Set(V(component.key), nv); err != nil { - return InvalidValue, err - } + m.Set(V(component.key), nv) //nolint:errcheck return Value{ v: m, k: KindMap, From d59dd39e5796dbfa2c8f8dfd8384c97ed1213fb9 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 11:28:57 +0100 Subject: [PATCH 24/30] annotate with nolint:errcheck --- cmd/root/io.go | 3 +-- cmd/root/logger.go | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/cmd/root/io.go b/cmd/root/io.go index 39af251f87..96c5a9a266 100644 --- a/cmd/root/io.go +++ b/cmd/root/io.go @@ -21,8 +21,7 @@ func initOutputFlag(cmd *cobra.Command) *outputFlag { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envOutputFormat); ok { - // QQQ log the error? - _ = f.output.Set(v) + f.output.Set(v) //nolint:errcheck } cmd.PersistentFlags().VarP(&f.output, "output", "o", "output type: text or json") diff --git a/cmd/root/logger.go b/cmd/root/logger.go index 1cb8f5a6ef..aeadf6ed56 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -84,14 +84,13 @@ func initLogFlags(cmd *cobra.Command) *logFlags { // Configure defaults from environment, if applicable. // If the provided value is invalid it is ignored. if v, ok := env.Lookup(cmd.Context(), envLogFile); ok { - // QQQ log the error? here and below - _ = f.file.Set(v) + f.file.Set(v) //nolint:errcheck } if v, ok := env.Lookup(cmd.Context(), envLogLevel); ok { - _ = f.level.Set(v) + f.level.Set(v) //nolint:errcheck } if v, ok := env.Lookup(cmd.Context(), envLogFormat); ok { - _ = f.output.Set(v) + f.output.Set(v) //nolint:errcheck } flags := cmd.PersistentFlags() From e4352e8b59de780ae6e358cd85c32f005a855a30 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 17:22:20 +0100 Subject: [PATCH 25/30] fix: Correct flag marking for verbose flag in deploy command --- cmd/bundle/deploy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index 0ded1b5b50..ac0e7c67a6 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -36,7 +36,7 @@ func newDeployCommand() *cobra.Command { _ = cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension - _ = cmd.Flags().MarkHidden("verbose") + cmd.Flags().MarkHidden("verbose") cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() From 010ce1e5a985083d134720352083d38577478471 Mon Sep 17 00:00:00 2001 From: "Denis Bilenko (aider)" Date: Tue, 10 Dec 2024 17:22:22 +0100 Subject: [PATCH 26/30] refactor: Remove unnecessary error assignments from MarkHidden calls --- cmd/bundle/deploy.go | 2 +- cmd/bundle/generate/dashboard.go | 4 ++-- cmd/configure/flags.go | 2 +- cmd/root/logger.go | 6 +++--- cmd/root/progress_logger.go | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index ac0e7c67a6..0ded1b5b50 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -36,7 +36,7 @@ func newDeployCommand() *cobra.Command { _ = cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension - cmd.Flags().MarkHidden("verbose") + _ = cmd.Flags().MarkHidden("verbose") cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() diff --git a/cmd/bundle/generate/dashboard.go b/cmd/bundle/generate/dashboard.go index 27b4dc9d0e..3da1e5605c 100644 --- a/cmd/bundle/generate/dashboard.go +++ b/cmd/bundle/generate/dashboard.go @@ -437,8 +437,8 @@ func NewGenerateDashboardCommand() *cobra.Command { // Included for symmetry with the other generate commands, but we prefer the shorter flags. cmd.Flags().StringVar(&d.existingPath, "existing-dashboard-path", "", `workspace path of the dashboard to generate configuration for`) cmd.Flags().StringVar(&d.existingID, "existing-dashboard-id", "", `ID of the dashboard to generate configuration for`) - _ = cmd.Flags().MarkHidden("existing-dashboard-path") - _ = cmd.Flags().MarkHidden("existing-dashboard-id") + cmd.Flags().MarkHidden("existing-dashboard-path") + cmd.Flags().MarkHidden("existing-dashboard-id") // Output flags. cmd.Flags().StringVarP(&d.resourceDir, "resource-dir", "d", "./resources", `directory to write the configuration to`) diff --git a/cmd/configure/flags.go b/cmd/configure/flags.go index 4258db5ed7..80e6502689 100644 --- a/cmd/configure/flags.go +++ b/cmd/configure/flags.go @@ -21,5 +21,5 @@ func (f *configureFlags) Register(cmd *cobra.Command) { // Include token flag for compatibility with the legacy CLI. // It doesn't actually do anything because we always use PATs. cmd.Flags().Bool("token", true, "Configure using Databricks Personal Access Token") - _ = cmd.Flags().MarkHidden("token") + cmd.Flags().MarkHidden("token") } diff --git a/cmd/root/logger.go b/cmd/root/logger.go index aeadf6ed56..cd94618228 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -100,9 +100,9 @@ func initLogFlags(cmd *cobra.Command) *logFlags { flags.Var(&f.output, "log-format", "log output format (text or json)") // mark fine-grained flags hidden from global --help - _ = flags.MarkHidden("log-file") - _ = flags.MarkHidden("log-level") - _ = flags.MarkHidden("log-format") + flags.MarkHidden("log-file") + flags.MarkHidden("log-level") + flags.MarkHidden("log-format") _ = cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete) _ = cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete) diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index 4ec21e22f1..cc800d7a2a 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -64,7 +64,7 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog flags := cmd.PersistentFlags() flags.Var(&f.ProgressLogFormat, "progress-format", "format for progress logs (append, inplace, json)") - _ = flags.MarkHidden("progress-format") + flags.MarkHidden("progress-format") _ = cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) return &f } From 0832ccd136d1a6fd6ad44eaa2d6a6c120a54c5a9 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 17:26:48 +0100 Subject: [PATCH 27/30] refactor: Simplify flag deprecation and completion registration --- cmd/root/bundle.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/root/bundle.go b/cmd/root/bundle.go index 5d7e8909ee..a9521a597e 100644 --- a/cmd/root/bundle.go +++ b/cmd/root/bundle.go @@ -153,6 +153,6 @@ func initTargetFlag(cmd *cobra.Command) { func initEnvironmentFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "environment" parameter. cmd.PersistentFlags().StringP("environment", "e", "", "bundle target to use (if applicable)") - _ = cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead") - _ = cmd.RegisterFlagCompletionFunc("environment", targetCompletion) + cmd.PersistentFlags().MarkDeprecated("environment", "use --target flag instead") + cmd.RegisterFlagCompletionFunc("environment", targetCompletion) } From ee67bb37e3ee08bb96fa1b39a3373b0a54cc390b Mon Sep 17 00:00:00 2001 From: "Denis Bilenko (aider)" Date: Tue, 10 Dec 2024 17:26:53 +0100 Subject: [PATCH 28/30] refactor: Remove unnecessary error discards from RegisterFlagCompletionFunc calls --- cmd/root/bundle.go | 2 +- cmd/root/logger.go | 6 +++--- cmd/root/progress_logger.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/root/bundle.go b/cmd/root/bundle.go index a9521a597e..8b98f2cf20 100644 --- a/cmd/root/bundle.go +++ b/cmd/root/bundle.go @@ -146,7 +146,7 @@ func targetCompletion(cmd *cobra.Command, args []string, toComplete string) ([]s func initTargetFlag(cmd *cobra.Command) { // To operate in the context of a bundle, all commands must take an "target" parameter. cmd.PersistentFlags().StringP("target", "t", "", "bundle target to use (if applicable)") - _ = cmd.RegisterFlagCompletionFunc("target", targetCompletion) + cmd.RegisterFlagCompletionFunc("target", targetCompletion) } // DEPRECATED flag diff --git a/cmd/root/logger.go b/cmd/root/logger.go index cd94618228..38e09b9c9f 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -104,8 +104,8 @@ func initLogFlags(cmd *cobra.Command) *logFlags { flags.MarkHidden("log-level") flags.MarkHidden("log-format") - _ = cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete) - _ = cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete) - _ = cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete) + cmd.RegisterFlagCompletionFunc("log-file", f.file.Complete) + cmd.RegisterFlagCompletionFunc("log-level", f.level.Complete) + cmd.RegisterFlagCompletionFunc("log-format", f.output.Complete) return &f } diff --git a/cmd/root/progress_logger.go b/cmd/root/progress_logger.go index cc800d7a2a..1458de13a3 100644 --- a/cmd/root/progress_logger.go +++ b/cmd/root/progress_logger.go @@ -65,6 +65,6 @@ func initProgressLoggerFlag(cmd *cobra.Command, logFlags *logFlags) *progressLog flags := cmd.PersistentFlags() flags.Var(&f.ProgressLogFormat, "progress-format", "format for progress logs (append, inplace, json)") flags.MarkHidden("progress-format") - _ = cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) + cmd.RegisterFlagCompletionFunc("progress-format", f.ProgressLogFormat.Complete) return &f } From 09a2a408b9da9dad4ef011d21bf9aa97624857b5 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 10 Dec 2024 17:28:13 +0100 Subject: [PATCH 29/30] exclude cobra functions from errcheck --- .golangci.yaml | 5 +++++ cmd/bundle/deploy.go | 4 ++-- cmd/bundle/generate/dashboard.go | 2 +- cmd/root/auth.go | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index f88bffa3c7..4165638df8 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -16,5 +16,10 @@ linters-settings: replacement: 'a[b:]' - pattern: 'interface{}' replacement: 'any' + errcheck: + exclude-functions: + - (*github.com/spf13/pflag.FlagSet).MarkHidden + - (*github.com/spf13/pflag.FlagSet).MarkDeprecated + - (*github.com/spf13/cobra.Command).RegisterFlagCompletionFunc issues: exclude-dirs-use-default: false # recommended by docs https://golangci-lint.run/usage/false-positives/ diff --git a/cmd/bundle/deploy.go b/cmd/bundle/deploy.go index 0ded1b5b50..a25e02f6c1 100644 --- a/cmd/bundle/deploy.go +++ b/cmd/bundle/deploy.go @@ -33,10 +33,10 @@ func newDeployCommand() *cobra.Command { cmd.Flags().StringVar(&clusterId, "compute-id", "", "Override cluster in the deployment with the given compute ID.") cmd.Flags().StringVarP(&clusterId, "cluster-id", "c", "", "Override cluster in the deployment with the given cluster ID.") cmd.Flags().BoolVar(&autoApprove, "auto-approve", false, "Skip interactive approvals that might be required for deployment.") - _ = cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") + cmd.Flags().MarkDeprecated("compute-id", "use --cluster-id instead") cmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output.") // Verbose flag currently only affects file sync output, it's used by the vscode extension - _ = cmd.Flags().MarkHidden("verbose") + cmd.Flags().MarkHidden("verbose") cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() diff --git a/cmd/bundle/generate/dashboard.go b/cmd/bundle/generate/dashboard.go index 3da1e5605c..4a538a2937 100644 --- a/cmd/bundle/generate/dashboard.go +++ b/cmd/bundle/generate/dashboard.go @@ -460,7 +460,7 @@ func NewGenerateDashboardCommand() *cobra.Command { cmd.MarkFlagsMutuallyExclusive("watch", "existing-id") // Completion for the resource flag. - _ = cmd.RegisterFlagCompletionFunc("resource", dashboardResourceCompletion) + cmd.RegisterFlagCompletionFunc("resource", dashboardResourceCompletion) cmd.RunE = d.RunE return cmd diff --git a/cmd/root/auth.go b/cmd/root/auth.go index a39ab15e1a..107679105b 100644 --- a/cmd/root/auth.go +++ b/cmd/root/auth.go @@ -37,7 +37,7 @@ func (e ErrNoAccountProfiles) Error() string { func initProfileFlag(cmd *cobra.Command) { cmd.PersistentFlags().StringP("profile", "p", "", "~/.databrickscfg profile") - _ = cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion) + cmd.RegisterFlagCompletionFunc("profile", profile.ProfileCompletion) } func profileFlagValue(cmd *cobra.Command) (string, bool) { From 883a1c3b11e3155388400547f71a2d1b7d4cd3f0 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 11 Dec 2024 09:53:22 +0100 Subject: [PATCH 30/30] Add MarkFlagRequired to exceptions --- .golangci.yaml | 5 +++-- cmd/bundle/generate/job.go | 2 +- cmd/bundle/generate/pipeline.go | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 4165638df8..6ab8bb2fef 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -18,8 +18,9 @@ linters-settings: replacement: 'any' errcheck: exclude-functions: - - (*github.com/spf13/pflag.FlagSet).MarkHidden - - (*github.com/spf13/pflag.FlagSet).MarkDeprecated - (*github.com/spf13/cobra.Command).RegisterFlagCompletionFunc + - (*github.com/spf13/cobra.Command).MarkFlagRequired + - (*github.com/spf13/pflag.FlagSet).MarkDeprecated + - (*github.com/spf13/pflag.FlagSet).MarkHidden issues: exclude-dirs-use-default: false # recommended by docs https://golangci-lint.run/usage/false-positives/ diff --git a/cmd/bundle/generate/job.go b/cmd/bundle/generate/job.go index 5ae14ad7d0..9ac41e3cb2 100644 --- a/cmd/bundle/generate/job.go +++ b/cmd/bundle/generate/job.go @@ -30,7 +30,7 @@ func NewGenerateJobCommand() *cobra.Command { } cmd.Flags().Int64Var(&jobId, "existing-job-id", 0, `Job ID of the job to generate config for`) - _ = cmd.MarkFlagRequired("existing-job-id") + cmd.MarkFlagRequired("existing-job-id") wd, err := os.Getwd() if err != nil { diff --git a/cmd/bundle/generate/pipeline.go b/cmd/bundle/generate/pipeline.go index 1247b77f4e..910baa45f9 100644 --- a/cmd/bundle/generate/pipeline.go +++ b/cmd/bundle/generate/pipeline.go @@ -30,7 +30,7 @@ func NewGeneratePipelineCommand() *cobra.Command { } cmd.Flags().StringVar(&pipelineId, "existing-pipeline-id", "", `ID of the pipeline to generate config for`) - _ = cmd.MarkFlagRequired("existing-pipeline-id") + cmd.MarkFlagRequired("existing-pipeline-id") wd, err := os.Getwd() if err != nil {