From ef8efc9e97b9b712954a79957776a9516f7d7527 Mon Sep 17 00:00:00 2001 From: Pranay Valson Date: Thu, 9 Jan 2025 10:57:37 -0800 Subject: [PATCH] update golangci linter config with fixes Signed-off-by: Pranay Valson --- .github/workflows/golangci-lint.yml | 8 ++-- .golangci.yml | 73 +++++++++++++++++++++++++++++ dag/utils.go | 6 ++- server/main.go | 22 +++++++-- 4 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 .golangci.yml diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 21f6b69..9b4d4ed 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -20,18 +20,18 @@ jobs: steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 - - name: Set up Go 1.22.5 + - name: Set up Go 1.23.4 uses: actions/setup-go@v4 with: - go-version: 1.22.5 + go-version: 1.23.4 id: go - run: go version - name: Lint run: | - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.55.2 + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.63.4 go mod tidy - ./bin/golangci-lint run -v --timeout=3m --go=1.22.5 + ./bin/golangci-lint run -v --config=.golangci.yml --timeout=3m --go=1.23.4 # Optional: working directory, useful for monorepos # working-directory: somedir diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..f3f8c12 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,73 @@ +# Refer to golangci-lint's example config file for more options and information: +# https://github.com/golangci/golangci-lint/blob/master/.golangci.example.yml + +run: + timeout: 5m + modules-download-mode: readonly + # skip-dirs: + # - binary/ + # - build/ + # - car/ + # - core/ + # - coreapi/ + # - dag/ + # - http/ + # - openapi/ + # - pinclient/ + # - server/ + # - w3up/ + +linters: + enable: + #-------------main-list--------------# + - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases + - gosimple # Linter for Go source code that specializes in simplifying a code + - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string + - ineffassign # Detects when assignments to existing variables are not used + - unused # Checks Go code for unused constants, variables, functions and types + - staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks + +disable: + # main-list + ## disable now re-enable later + ## re-enable never + - depguard # Go linter that checks if package imports are in a list of acceptable packages + - contextcheck # Check the function whether use a non-inherited context + - cyclop # Checks function and package cyclomatic complexity + - durationcheck # Check for two durations multiplied together + - exhaustivestruct # Checks if all struct's fields are initialized + - forbidigo # Forbids identifiers + - forcetypeassert # finds forced type assertions + - funlen # Tool for detection of long functions\ + - gci # Gci control golang package import order and make it always deterministic. + - gochecknoglobals # check that no global variables exist + - gochecknoinits # Checks that no init functions are present in Go code + - gocognit # Computes and checks the cognitive complexity of functions + - godot # Check if comments end in a period + - goerr113 # Golang linter to check the errors handling expressions + - gofumpt # Gofumpt checks whether code was gofumpt-ed + - gomnd # An analyzer to detect magic numbers + - gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod + - ifshort # Checks that your code uses short syntax for if-statements whenever possible + - ireturn # Accept Interfaces, Return Concrete Types + - lll # Reports long lines + - maintidx # Measures the maintainability index of each function + - makezero # Finds slice declarations with non-zero initial length + - nakedret # Finds naked returns in functions greater than a specified function length + - nestif # Reports deeply nested if statements + - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test + - prealloc # Finds slice declarations that could potentially be preallocated + - predeclared # Find code that shadows one of Go's predeclared identifiers + - promlinter # Check Prometheus metrics naming via promlint + - tagliatelle # Checks the struct tags. + - tenv # tenv is analyzer that detects using os.Setenv instead of t.Setenv since Go1.17 + - testpackage # linter that makes you use a separate _test package + - thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers + - tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes + - wastedassign # wastedassign finds wasted assignment statements + - wsl # Whitespace Linter - Forces you to use empty lines! + +issues: + exclude-use-default: false + max-issues-per-linter: 0 + max-same-issues: 0 \ No newline at end of file diff --git a/dag/utils.go b/dag/utils.go index f7ed114..9437283 100644 --- a/dag/utils.go +++ b/dag/utils.go @@ -52,7 +52,11 @@ func (fetcher *httpContentFetcher) tryFetch(ctx context.Context, cid string, url return emptyBytes, err } - defer resp.Body.Close() + defer func() { + if err := resp.Body.Close(); err != nil { + log.Printf("failed to close response body: %v", err) + } + }() if resp.StatusCode == 200 { return io.ReadAll(resp.Body) } else { diff --git a/server/main.go b/server/main.go index 96c8f24..74379f8 100644 --- a/server/main.go +++ b/server/main.go @@ -245,7 +245,11 @@ func readContentFromRequest(r *http.Request) (map[string][]byte, error) { if err != nil { return nil, err } - defer file.Close() + defer func() { + if err := file.Close(); err != nil { + log.Printf("failed to close file: %v", err) + } + }() data, err := io.ReadAll(file) if err != nil { @@ -310,7 +314,12 @@ func uploadHandler(contents []byte, node pinner.PinnerNode) (cid.Cid, error) { return cid.Undef, err } - defer carf.Close() // should delete the file due to unlink + defer func() { + if err := carf.Close(); err != nil { + log.Printf("failed to close car file: %v", err) + } + }() + defer func() { err := syscall.Unlink(carf.Name()) if err != nil { @@ -322,7 +331,10 @@ func uploadHandler(contents []byte, node pinner.PinnerNode) (cid.Cid, error) { err = node.CarExporter().Export(ctx, fcid, carf) if err != nil { - carf.Close() + // For the non-deferred calls: + if err := carf.Close(); err != nil { + log.Printf("failed to close car file: %v", err) + } log.Printf("%v", err) return cid.Undef, err } @@ -339,7 +351,9 @@ func uploadHandler(contents []byte, node pinner.PinnerNode) (cid.Cid, error) { } log.Printf("uploaded file has root cid: %s\n", ccid) - carf.Close() + if err := carf.Close(); err != nil { + log.Printf("failed to close car file: %v", err) + } return ccid, nil }