- 
                Notifications
    You must be signed in to change notification settings 
- Fork 640
chore(go): update go version #8599
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
base: main
Are you sure you want to change the base?
Conversation
| This PR looks good to me. If possible, can you resolve the version issue with the  | 
| Another issue: When running  Do we need a higher version than Go 1.22? The last  | 
c0a09c8    to
    258e964      
    Compare
  
    b026f34    to
    281fe9f      
    Compare
  
    | @spenpal going to  | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Feel free to merge it when ready.
| Sorry for the late reply. @klesh Is  If it is, @petkostas we might need to update to Go 1.24 or downgrade  | 
- Updates backend to GO version 1.22 - Updates devops to GO version 1.22 - Updates mockery to version 2.43.0
- Update to v1.24
2295488    to
    3dd2fa4      
    Compare
  
    - Bump golangci-lint for GO v1.24
3dd2fa4    to
    a9ec769      
    Compare
  
    | @spenpal Updated to  | 
| @petkostas This PR looks good to me now. Thanks for your hard work! EDIT: I lied. I am unable to run  EDIT 2: I asked AI to upgrade the  Here is the upgraded  # Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
version: "2"
# https://golangci-lint.run/usage/linters/
linters:
  # Start with standard linters (enabled by default)
  default: standard
  
  enable:
    # Additional recommended linters for production code
    - bodyclose        # checks whether HTTP response body is closed
    - copyloopvar      # detects loop variable issues (Go 1.22+)
    - errcheck         # checks for unchecked errors
    - errorlint        # finds code that causes problems with Go 1.13+ error wrapping
    - gocritic         # provides diagnostics that check for bugs, performance and style
    - govet            # reports suspicious constructs
    - ineffassign      # detects unused assignments
    - makezero         # finds slice declarations with non-zero initial length
    - misspell         # finds commonly misspelled English words
    - nolintlint       # reports ill-formed or insufficient nolint directives
    - revive           # fast, configurable, extensible, flexible linter
    - staticcheck      # set of rules from staticcheck (includes gosimple, stylecheck)
    - unconvert        # removes unnecessary type conversions
    - unparam          # reports unused function parameters
    - unused           # checks for unused constants, variables, functions and types
    - goheader         # checks file headers match template
    - importas         # enforces consistent import aliases
  disable:
    # Disable overly strict or noisy linters
    - exhaustive       # too strict for most codebases
    - funlen           # arbitrary function length limits
    - gochecknoglobals # globals are sometimes necessary
    - gocognit         # cognitive complexity can be subjective
    - gocyclo          # cyclomatic complexity can be subjective
    - godox            # don't want to fail on TODO/FIXME comments
    - mnd              # magic number detection too strict (was gomnd)
    - lll              # line length better handled by formatters
    - nlreturn         # overly opinionated about blank lines
    - testpackage      # not always beneficial to use _test package
    - wsl              # overly opinionated whitespace rules
formatters:
  enable:
    - gofmt      # Format code with gofmt
    - goimports  # Organize imports
linters-settings:
  goheader:
    template-path: .golangci-goheader.template
  goimports:
    # Put local imports after 3rd-party packages
    local-prefixes: github.com/apache/incubator-devlake
  staticcheck:
    # Enable all checks
    checks: ["all"]
  revive:
    # Maximum number of open files at the same time
    max-open-files: 2048
    # Sets the default severity
    severity: error
    
    rules:
      # Enable useful rules
      - name: atomic
      - name: blank-imports
      - name: bool-literal-in-expr
      - name: call-to-gc
      - name: confusing-naming
      - name: confusing-results
      - name: constant-logical-expr
      - name: context-as-argument
      - name: context-keys-type
      - name: deep-exit
      - name: defer
        arguments: [["call-chain"]]
      - name: dot-imports
      - name: duplicated-imports
      - name: empty-block
      - name: empty-lines
      - name: error-naming
      - name: error-return
      - name: error-strings
      - name: errorf
      - name: get-return
      - name: identical-branches
      - name: import-shadowing
      - name: modifies-parameter
      - name: modifies-value-receiver
      - name: optimize-operands-order
      - name: package-comments
      - name: range
      - name: range-val-in-closure
      - name: range-val-address
      - name: receiver-naming
      - name: redefines-builtin-id
      - name: string-of-int
      - name: string-format
        arguments:
          - - "core.WriteError[1].Message"
            - "/^([^A-Z]|$)/"
            - must not start with a capital letter
          - - "fmt.Errorf[0]"
            - '/(^|[^\.!?])$/'
            - must not end in punctuation
          - - panic
            - '/^[^\n]*$/'
            - must not contain line breaks
      - name: struct-tag
      - name: superfluous-else
      - name: time-equal
      - name: time-naming
      - name: var-declaration
      - name: unconditional-recursion
      - name: unexported-return
      - name: unhandled-error
        arguments:
          - "fmt.Printf"
          - "fmt.Println"
          - "fmt.Fprintln"
          - "res.Body.Close"
          - "body.Close"
      - name: unnecessary-stmt
      - name: unreachable-code
      - name: useless-break
      - name: waitgroup-by-value
      
      # Disable overly strict rules
      - name: bare-return
        disabled: true
      - name: exported
        disabled: true
        arguments:
          - "disableStutteringCheck"
      - name: var-naming
        disabled: true
        arguments:
          - [] # AllowList
          - [] # DenyList
  gocritic:
    # Enable multiple check groups
    enabled-tags:
      - diagnostic
      - style
      - performance
      - opinionated
    disabled-checks:
      - whyNoLint # we use nolintlint for this
      - unnamedResult # conflicts with some patterns
  errcheck:
    # Report about not checking of errors in type assertions: `a := b.(MyStruct)`
    check-type-assertions: true
    # Report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`
    check-blank: false
    # List of functions to exclude from checking
    exclude-functions:
      - (io.Closer).Close
      - (*database/sql.Rows).Close
  errorlint:
    # Check whether fmt.Errorf uses the %w verb for formatting errors
    errorf: true
    # Check for plain error comparisons
    comparison: true
  nolintlint:
    # Enable to require an explanation of nonzero length after each nolint directive
    require-explanation: true
    # Enable to require nolint directives to mention the specific linter being suppressed
    require-specific: true
  importas:
    # Enforce import aliases for consistency
    no-unaliased: false
    # Do not allow non-required aliases
    no-extra-aliases: false
issues:
  # Maximum issues count per one linter. Set to 0 to disable.
  max-issues-per-linter: 0
  # Maximum count of issues with the same text. Set to 0 to disable.
  max-same-issues: 0
  # Include issues that were excluded by default exclusion patterns
  include:
    - EXC0012 # revive: comment on exported items
    - EXC0014 # revive: comment on exported items
  exclude-rules:
    # Exclude some linters from running on specific paths
    - path: models/|api/|migration/|errors/|logger/
      linters:
        - revive
    - path: plugins/([^hc].*|.[^eo].*|..[^lr].*|...[^pe].*|....[^e].*|.....[^r].*)
      linters:
        - revive
    # Exclude test files from some checks
    - path: _test\.go
      linters:
        - errcheck
        - gocritic
        - revive
    # Exclude generated files
    - path: ".*\\.pb\\.go$"
      linters:
        - all
    - path: ".*\\.gen\\.go$"
      linters:
        - all
# Options for analysis running
run:
  # The default concurrency value is the number of available CPUs
  concurrency: 4
  # Timeout for analysis
  timeout: 5m
  # Exit code when at least one issue was found
  issues-exit-code: 2
  # Include test files or not
  tests: false
  # List of build tags
  build-tags: []
  # Allow multiple parallel golangci-lint instances running
  allow-parallel-runners: true
  # Allow multiple golangci-lint instances running, but serialize writes to any files
  allow-serial-runners: false
  # Use go modules for dependency resolution
  modules-download-mode: readonly
# Output configuration
output:
  # Format: colored-line-number, line-number, json, tab, checkstyle, code-climate, html, junit-xml, github-actions
  formats:
    colored-line-number:
      path: stdout
  # Print lines of code with issue
  print-issued-lines: true
  # Print linter name in the end of issue text
  print-linter-name: true
  # Make issues output unique by line
  uniq-by-line: true
  # Sort results by: filepath, line and column
  sort-results: true
  # Show statistics per linter
  show-stats: true> make lint
...
...
10711 issues:
* bodyclose: 74
* copyloopvar: 1
* errcheck: 252
* errorlint: 21
* gocritic: 205
* goimports: 353
* govet: 2
* misspell: 13
* nolintlint: 33
* revive: 9623
* staticcheck: 96
* unconvert: 4
* unparam: 34 | 
| Thanks @spenpal I will try to look into that. | 
Summary
1.23Does this close any open issues?
Closes #8584