Skip to content

ci(lint): enable errorlint linter #4578

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ linters:
- errcheck
- errchkjson
#- errname
- errorlint
#- gochecknoinits
- gci
#- goconst
Expand Down
2 changes: 1 addition & 1 deletion cmd/gitops-server/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ func listenAndServe(log logr.Logger, srv *http.Server, options Options) error {
if options.MTLS {
caCert, err := os.ReadFile(options.TLSCertFile)
if err != nil {
return fmt.Errorf("failed reading cert file %s. %s", options.TLSCertFile, err)
return fmt.Errorf("failed reading cert file %s. %w", options.TLSCertFile, err)
}

caCertPool := x509.NewCertPool()
Expand Down
9 changes: 6 additions & 3 deletions core/clustersmngr/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,8 @@ func (cf *clustersManager) watchNamespaces(ctx context.Context) {

if err := wait.PollUntilContextCancel(ctx, watchNamespaceFrequency, true, func(ctx context.Context) (bool, error) {
if err := cf.UpdateNamespaces(ctx); err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, cerr := range merr.Errors {
cf.log.Error(cerr, "failed to update namespaces")
}
Expand Down Expand Up @@ -349,9 +350,11 @@ func (cf *clustersManager) updateNamespacesWithClient(ctx context.Context, creat

clientset, err := createClient()
if err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, err := range merr.Errors {
if cerr, ok := err.(*ClientError); ok {
var cerr *ClientError
if errors.As(err, &cerr) {
result = multierror.Append(result, fmt.Errorf("%w, cluster: %v", cerr, cerr.ClusterName))
}
}
Expand Down
12 changes: 7 additions & 5 deletions core/server/fluxruntime.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,11 @@ func (cs *coreServer) ListRuntimeObjects(ctx context.Context, msg *pb.ListRuntim
func listRuntimeObjectsByLabels(ctx context.Context, cs *coreServer, respErrors []*pb.ListError, labels []string) ([]*pb.ListError, []*pb.Deployment) {
clustersClient, err := cs.clustersManager.GetImpersonatedClient(ctx, auth.Principal(ctx))
if err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, err := range merr.Errors {
if cerr, ok := err.(*clustersmngr.ClientError); ok {
var cerr *clustersmngr.ClientError
if errors.As(err, &cerr) {
respErrors = append(respErrors, &pb.ListError{ClusterName: cerr.ClusterName, Message: cerr.Error()})
}
}
Expand Down Expand Up @@ -392,7 +394,7 @@ func (cs *coreServer) GetChildObjects(ctx context.Context, msg *pb.GetChildObjec
})

if err := clustersClient.List(ctx, msg.ClusterName, &listResult, opts); err != nil {
return nil, fmt.Errorf("could not get unstructured object: %s", err)
return nil, fmt.Errorf("could not get unstructured object: %w", err)
}

respErrors := multierror.Error{}
Expand Down Expand Up @@ -433,13 +435,13 @@ ItemsLoop:
func sanitizeSecret(obj *unstructured.Unstructured) (client.Object, error) {
bytes, err := obj.MarshalJSON()
if err != nil {
return nil, fmt.Errorf("marshaling secret: %v", err)
return nil, fmt.Errorf("marshaling secret: %w", err)
}

s := &v1.Secret{}

if err := json.Unmarshal(bytes, s); err != nil {
return nil, fmt.Errorf("unmarshaling secret: %v", err)
return nil, fmt.Errorf("unmarshaling secret: %w", err)
}

s.Data = map[string][]byte{"redacted": []byte(nil)}
Expand Down
2 changes: 1 addition & 1 deletion core/server/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ func getChildren(ctx context.Context, k8sClient client.Client, parentObj unstruc
}

if err := k8sClient.List(ctx, &listResult, client.InNamespace(parentObj.GetNamespace())); err != nil {
return nil, fmt.Errorf("could not get unstructured object: %s", err)
return nil, fmt.Errorf("could not get unstructured object: %w", err)
}

unstructuredChildren := []unstructured.Unstructured{}
Expand Down
6 changes: 4 additions & 2 deletions core/server/objects.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ func (cs *coreServer) ListObjects(ctx context.Context, msg *pb.ListObjectsReques
}

if err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, err := range merr.Errors {
if cerr, ok := err.(*clustersmngr.ClientError); ok {
var cerr *clustersmngr.ClientError
if errors.As(err, &cerr) {
respErrors = append(respErrors, &pb.ListError{ClusterName: cerr.ClusterName, Message: cerr.Error()})
}
}
Expand Down
6 changes: 4 additions & 2 deletions core/server/policies.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,11 @@ func (cs *coreServer) ListPolicies(ctx context.Context, m *pb.ListPoliciesReques

clustersClient, err = cs.clustersManager.GetImpersonatedClient(ctx, auth.Principal(ctx))
if err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, err := range merr.Errors {
if cerr, ok := err.(*clustersmngr.ClientError); ok {
var cerr *clustersmngr.ClientError
if errors.As(err, &cerr) {
respErrors = append(respErrors, &pb.ListError{ClusterName: cerr.ClusterName, Message: cerr.Error()})
}
}
Expand Down
16 changes: 9 additions & 7 deletions core/server/policy_violations.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@ func (cs *coreServer) ListPolicyValidations(ctx context.Context, m *pb.ListPolic
}

if err != nil {
if merr, ok := err.(*multierror.Error); ok {
var merr *multierror.Error
if errors.As(err, &merr) {
for _, err := range merr.Errors {
if cerr, ok := err.(*clustersmngr.ClientError); ok {
var cerr *clustersmngr.ClientError
if errors.As(err, &cerr) {
respErrors = append(respErrors, &pb.ListError{ClusterName: cerr.ClusterName, Message: cerr.Error()})
}
}
Expand All @@ -62,7 +64,7 @@ func (cs *coreServer) ListPolicyValidations(ctx context.Context, m *pb.ListPolic
"pac.weave.works/type": validationType,
})
if err != nil {
return nil, fmt.Errorf("error building selector for events query: %v", err)
return nil, fmt.Errorf("error building selector for events query: %w", err)
}

fieldSelectorSet := map[string]string{
Expand Down Expand Up @@ -97,7 +99,7 @@ func (cs *coreServer) ListPolicyValidations(ctx context.Context, m *pb.ListPolic

validationsList, err := cs.listValidationsFromEvents(ctx, clustersClient, m.ClusterName, false, opts)
if err != nil {
return nil, fmt.Errorf("error getting events: %v", err)
return nil, fmt.Errorf("error getting events: %w", err)
}
respErrors = append(respErrors, validationsList.Errors...)
policyviolationlist := pb.ListPolicyValidationsResponse{
Expand Down Expand Up @@ -136,7 +138,7 @@ func (cs *coreServer) GetPolicyValidation(ctx context.Context, m *pb.GetPolicyVa
"pac.weave.works/id": m.ValidationId,
})
if err != nil {
return nil, fmt.Errorf("error building selector for events query: %v", err)
return nil, fmt.Errorf("error building selector for events query: %w", err)
}
opts := []sigsClient.ListOption{}

Expand All @@ -149,7 +151,7 @@ func (cs *coreServer) GetPolicyValidation(ctx context.Context, m *pb.GetPolicyVa

validationsList, err := cs.listValidationsFromEvents(ctx, clusterClient, m.ClusterName, true, opts)
if err != nil {
return nil, fmt.Errorf("error getting events: %v", err)
return nil, fmt.Errorf("error getting events: %w", err)
}
if len(validationsList.Errors) > 0 {
return nil, fmt.Errorf("error getting events: %s", validationsList.Errors[0].Message)
Expand Down Expand Up @@ -246,7 +248,7 @@ func getPolicyValidationParam(raw []byte) ([]*pb.PolicyValidationParam, error) {
var paramsArr []map[string]interface{}
err := json.Unmarshal(raw, &paramsArr)
if err != nil {
return nil, fmt.Errorf("failed to unmarshal policy validation parameter, error: %v", err)
return nil, fmt.Errorf("failed to unmarshal policy validation parameter, error: %w", err)
}

parameters := make([]*pb.PolicyValidationParam, len(paramsArr))
Expand Down
5 changes: 3 additions & 2 deletions pkg/fluxexec/exit_errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ package fluxexec

import (
"context"
"errors"
"fmt"
"os/exec"
"strings"
)

func (flux *Flux) wrapExitError(ctx context.Context, err error, stderr string) error {
exitErr, ok := err.(*exec.ExitError)
if !ok {
var exitErr *exec.ExitError
if !errors.As(err, &exitErr) {
// not an exit error, short circuit, nothing to wrap
return err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/fluxexec/fluxexec.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func NewFlux(workingDir, execPath string) (*Flux, error) {
}

if _, err := os.Stat(workingDir); err != nil {
return nil, fmt.Errorf("error initialising Flux with workdir %s: %s", workingDir, err)
return nil, fmt.Errorf("error initialising Flux with workdir %s: %w", workingDir, err)
}

if execPath == "" {
Expand Down
6 changes: 4 additions & 2 deletions pkg/fluxinstall/errors/errors.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package errors

import "errors"

type skippableErr struct {
Err error
}
Expand All @@ -13,6 +15,6 @@ func SkippableErr(err error) skippableErr {
}

func IsErrorSkippable(err error) bool {
_, ok := err.(skippableErr)
return ok
var skippableErr skippableErr
return errors.As(err, &skippableErr)
}
4 changes: 2 additions & 2 deletions pkg/fluxinstall/installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func (i *Installer) Ensure(ctx context.Context, sources ...src.Source) (string,
}
}

return "", fmt.Errorf("unable to find, or install from %d sources: %s", len(sources), errs.ErrorOrNil())
return "", fmt.Errorf("unable to find, or install from %d sources: %w", len(sources), errs.ErrorOrNil())
}

func (i *Installer) Install(ctx context.Context, sources ...src.Installable) (string, error) {
Expand All @@ -86,7 +86,7 @@ func (i *Installer) Install(ctx context.Context, sources ...src.Installable) (st
return execPath, nil
}

return "", fmt.Errorf("unable install from %d sources: %s", len(sources), errs.ErrorOrNil())
return "", fmt.Errorf("unable install from %d sources: %w", len(sources), errs.ErrorOrNil())
}

func (i *Installer) Remove(ctx context.Context) error {
Expand Down
10 changes: 5 additions & 5 deletions pkg/gitproviders/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func deployKeyExists(ctx context.Context, repo gitprovider.UserRepository) (bool
if errors.Is(err, gitprovider.ErrNotFound) {
return false, nil
} else {
return false, fmt.Errorf("error getting deploy key %s: %s", DeployKeyName, err)
return false, fmt.Errorf("error getting deploy key %s: %w", DeployKeyName, err)
}
} else {
return true, nil
Expand All @@ -99,14 +99,14 @@ func uploadDeployKey(ctx context.Context, repo gitprovider.UserRepository, deplo
return ErrRepositoryNoPermissionsOrDoesNotExist
}

return fmt.Errorf("error uploading deploy key %s", err)
return fmt.Errorf("error uploading deploy key %w", err)
}

if err = utils.WaitUntil(os.Stdout, time.Second, defaultTimeout, func() error {
_, err = repo.DeployKeys().Get(ctx, DeployKeyName)
return err
}); err != nil {
return fmt.Errorf("error verifying deploy key %s: %s", DeployKeyName, err)
return fmt.Errorf("error verifying deploy key %s: %w", DeployKeyName, err)
}

return nil
Expand Down Expand Up @@ -163,7 +163,7 @@ func getCommits(ctx context.Context, repo gitprovider.UserRepository, targetBran
return []gitprovider.Commit{}, nil
}

return nil, fmt.Errorf("error getting commits: %s", err)
return nil, fmt.Errorf("error getting commits: %w", err)
}

return commits, nil
Expand All @@ -183,7 +183,7 @@ func GetAccountType(provider gitprovider.Client, domain, owner string) (Provider
return AccountTypeUser, nil
}

return "", fmt.Errorf("could not get account type %s", err)
return "", fmt.Errorf("could not get account type %w", err)
}

return AccountTypeOrg, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/gitproviders/provider_org.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func (p orgGitProvider) RepositoryExists(ctx context.Context, repoURL RepoURL) (
func (p orgGitProvider) DeployKeyExists(ctx context.Context, repoURL RepoURL) (bool, error) {
orgRepo, err := p.getOrgRepo(repoURL)
if err != nil {
return false, fmt.Errorf("error getting org repo reference for owner %s, repo %s, %s", repoURL.Owner(), repoURL.RepositoryName(), err)
return false, fmt.Errorf("error getting org repo reference for owner %s, repo %s, %w", repoURL.Owner(), repoURL.RepositoryName(), err)
}

return deployKeyExists(ctx, orgRepo)
Expand Down
5 changes: 3 additions & 2 deletions pkg/http/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package http
import (
"context"
"crypto/tls"
"errors"
"fmt"
"log"
"net"
Expand Down Expand Up @@ -77,14 +78,14 @@ func startServer(ctx context.Context, hndlr http.Handler, listener net.Listener,
logger.Printf("https://%s", srv.Addr)

go func() {
if err := srv.Serve(listener); err != http.ErrServerClosed {
if err := srv.Serve(listener); !errors.Is(err, http.ErrServerClosed) {
logger.Fatalf("server quit unexpectedly: %s", err)
}
}()
<-ctx.Done()
logger.Printf("shutting down %s", listener.Addr())

if err := srv.Shutdown(ctx); err != nil && err != context.Canceled {
if err := srv.Shutdown(ctx); err != nil && !errors.Is(err, context.Canceled) {
logger.Printf("error shutting down %s: %s", listener.Addr(), err)
}
}
2 changes: 1 addition & 1 deletion pkg/kube/kubehttp.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func NewKubeHTTPClient() (*KubeHTTP, error) {
func RestConfig() (*rest.Config, string, error) {
config, err := InClusterConfig()
if err != nil {
if err == rest.ErrNotInCluster {
if errors.Is(err, rest.ErrNotInCluster) {
return outOfClusterConfig()
}
// Handle other errors
Expand Down
2 changes: 1 addition & 1 deletion pkg/oidc/check/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func retrieveIDToken(log logger.Logger, oauth2Config oauth2.Config, verifier *oi
}()

if err := srv.Serve(listener); err != nil {
if err != http.ErrServerClosed {
if !errors.Is(err, http.ErrServerClosed) {
return nil, fmt.Errorf("failed starting server: %w", err)
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/run/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func GetPodFromResourceDescription(ctx context.Context, kubeClient client.Client
case "service":
svc := &corev1.Service{}
if err := kubeClient.Get(ctx, namespacedName, svc); err != nil {
return nil, fmt.Errorf("error getting service: %s, namespaced Name: %v", err, namespacedName)
return nil, fmt.Errorf("error getting service: %w, namespaced Name: %v", err, namespacedName)
}

// list pods of the service "svc" by selector in a specific namespace using the controller-runtime client
Expand Down Expand Up @@ -132,7 +132,7 @@ func GetPodFromResourceDescription(ctx context.Context, kubeClient client.Client
case "deployment":
deployment := &appsv1.Deployment{}
if err := kubeClient.Get(ctx, namespacedName, deployment); err != nil {
return nil, fmt.Errorf("error getting deployment: %s, namespaced Name: %v", err, namespacedName)
return nil, fmt.Errorf("error getting deployment: %w, namespaced Name: %v", err, namespacedName)
}

// list pods of the deployment "deployment" by selector in a specific namespace using the controller-runtime client
Expand Down
3 changes: 2 additions & 1 deletion pkg/services/gitrepo/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package gitrepo

import (
"context"
"errors"
"fmt"
"os"

Expand All @@ -17,7 +18,7 @@ func CommitAndPush(ctx context.Context, client git.Git, commitMsg string, logger
Author: git.Author{Name: "Weave Gitops", Email: "[email protected]"},
Message: commitMsg,
}, filters...)
if err != nil && err != git.ErrNoStagedFiles {
if err != nil && !errors.Is(err, git.ErrNoStagedFiles) {
return fmt.Errorf("failed to update the repository: %w", err)
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/testutils/testutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,15 @@ func StartK8sTestEnvironment(crdPaths []string) (*K8sTestEnv, error) {
dc, err := discovery.NewDiscoveryClientForConfig(cfg)
if err != nil {
ctrlCancel()
return nil, fmt.Errorf("failed to initialize discovery client: %s", err)
return nil, fmt.Errorf("failed to initialize discovery client: %w", err)
}

mapper := restmapper.NewDeferredDiscoveryRESTMapper(memory.NewMemCacheClient(dc))

dyn, err := dynamic.NewForConfig(cfg)
if err != nil {
ctrlCancel()
return nil, fmt.Errorf("failed to initialize dynamic client: %s", err)
return nil, fmt.Errorf("failed to initialize dynamic client: %w", err)
}

k8sEnv = &K8sTestEnv{
Expand Down
Loading
Loading