diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c83252be2..ccd6a2fdb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -511,6 +511,13 @@ jobs: echo "Use len check instead of empty string comparison" exit 1 fi + - name: Check for cases where errors are not propagated + run: | + # Using `grep .` as the exit codes are always true for correct grammar + if tree-grepper -q go '((if_statement (binary_expression) @_if (block (return_statement (expression_list (call_expression (selector_expression) @_fun ) @ret .)))) (#match? @_if "err != nil") (#match? @_fun "clues.NewWC"))' | grep .; then + echo "Make sure to propagate errors with clues" + exit 1 + fi # ---------------------------------------------------------------------------------------------------- # --- GitHub Actions Linting ------------------------------------------------------------------------- diff --git a/src/internal/kopia/upload.go b/src/internal/kopia/upload.go index d70fb0152..171b0cae6 100644 --- a/src/internal/kopia/upload.go +++ b/src/internal/kopia/upload.go @@ -1204,12 +1204,12 @@ func traverseBaseDir( curP, err := path.PrefixOrPathFromDataLayerPath(currentPath.String(), false) if err != nil { - return clues.NewWC(ctx, "converting current path to path.Path") + return clues.WrapWC(ctx, err, "converting current path to path.Path") } oldP, err := path.PrefixOrPathFromDataLayerPath(oldDirPath.String(), false) if err != nil { - return clues.NewWC(ctx, "converting old path to path.Path") + return clues.WrapWC(ctx, err, "converting old path to path.Path") } node.baseDir = dir diff --git a/src/internal/m365/collection/drive/permission.go b/src/internal/m365/collection/drive/permission.go index 8718b63bf..2eb19c054 100644 --- a/src/internal/m365/collection/drive/permission.go +++ b/src/internal/m365/collection/drive/permission.go @@ -98,7 +98,7 @@ func computePreviousLinkShares( parent, err := originDir.Dir() if err != nil { - return nil, clues.NewWC(ctx, "getting parent") + return nil, clues.WrapWC(ctx, err, "getting parent") } for len(parent.Elements()) > 0 { @@ -106,7 +106,7 @@ func computePreviousLinkShares( drivePath, err := path.ToDrivePath(parent) if err != nil { - return nil, clues.NewWC(ictx, "transforming dir to drivePath") + return nil, clues.WrapWC(ictx, err, "transforming dir to drivePath") } if len(drivePath.Folders) == 0 { @@ -126,7 +126,7 @@ func computePreviousLinkShares( parent, err = parent.Dir() if err != nil { - return nil, clues.NewWC(ictx, "getting parent") + return nil, clues.WrapWC(ictx, err, "getting parent") } } @@ -156,14 +156,14 @@ func computePreviousMetadata( for { parent, err = parent.Dir() if err != nil { - return metadata.Metadata{}, clues.NewWC(ctx, "getting parent") + return metadata.Metadata{}, clues.WrapWC(ctx, err, "getting parent") } ictx := clues.Add(ctx, "parent_dir", parent) drivePath, err := path.ToDrivePath(parent) if err != nil { - return metadata.Metadata{}, clues.NewWC(ictx, "transforming dir to drivePath") + return metadata.Metadata{}, clues.WrapWC(ictx, err, "transforming dir to drivePath") } if len(drivePath.Folders) == 0 { diff --git a/src/internal/m365/collection/exchange/metadata.go b/src/internal/m365/collection/exchange/metadata.go index dbd20e146..2ca9eced4 100644 --- a/src/internal/m365/collection/exchange/metadata.go +++ b/src/internal/m365/collection/exchange/metadata.go @@ -63,7 +63,7 @@ func ParseMetadataCollections( err := json.NewDecoder(item.ToReader()).Decode(&m) if err != nil { - return nil, false, clues.NewWC(ctx, "decoding metadata json") + return nil, false, clues.WrapWC(ctx, err, "decoding metadata json") } switch item.ID() { diff --git a/src/internal/m365/collection/groups/metadata.go b/src/internal/m365/collection/groups/metadata.go index 9c196c348..4f123945f 100644 --- a/src/internal/m365/collection/groups/metadata.go +++ b/src/internal/m365/collection/groups/metadata.go @@ -64,7 +64,7 @@ func parseMetadataCollections( err := json.NewDecoder(item.ToReader()).Decode(&m) if err != nil { - return nil, false, clues.NewWC(ctx, "decoding metadata json") + return nil, false, clues.WrapWC(ctx, err, "decoding metadata json") } switch item.ID() { diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 1a544caa5..95fd95c26 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -673,7 +673,7 @@ func mergeItemsFromBase( errs) if err != nil { return manifestAddedEntries, - clues.NewWC(ctx, "fetching base details for backup") + clues.WrapWC(ctx, err, "fetching base details for backup") } for _, entry := range baseDeets.Items() { @@ -683,7 +683,7 @@ func mergeItemsFromBase( rr, err := path.FromDataLayerPath(entry.RepoRef, true) if err != nil { - return manifestAddedEntries, clues.NewWC(ctx, "parsing base item info path"). + return manifestAddedEntries, clues.WrapWC(ctx, err, "parsing base item info path"). With("repo_ref", path.LoggableDir(entry.RepoRef)) }