From 00c294a2f925578e6b7e3b06e4d8ec3e0c603516 Mon Sep 17 00:00:00 2001 From: Alex Efros Date: Mon, 21 Oct 2024 23:16:56 +0300 Subject: [PATCH] chore(ci): update configs --- .github/workflows/CI&CD.yml | 38 +- ...-Release.yml => Create-GitHub-release.yml} | 8 +- .github/workflows/Generate-TOC.yml | 6 +- .github/workflows/Lint-PR-name.yml | 24 +- .github/workflows/codeql.yml | 93 - .golangci.yml | 2520 +---------------- scripts/release | 16 +- 7 files changed, 125 insertions(+), 2580 deletions(-) rename .github/workflows/{Create-GitHub-Release.yml => Create-GitHub-release.yml} (82%) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/CI&CD.yml b/.github/workflows/CI&CD.yml index 42f576e..3f45d32 100644 --- a/.github/workflows/CI&CD.yml +++ b/.github/workflows/CI&CD.yml @@ -2,10 +2,10 @@ name: CI/CD on: push: - tags: v* - branches: master + tags: [v*] + branches: [master] pull_request: - branches: master + branches: [master] env: GO_VERSION: '1.23.2' # Also in Dockerfile. @@ -16,24 +16,25 @@ jobs: runs-on: 'ubuntu-latest' timeout-minutes: 30 steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - - - uses: actions/checkout@v4 + cache: false - uses: actions/cache@v4 + id: cache-go-with-tools with: path: | - ~/go/bin - ~/go/pkg - ~/go/src + ~/go/pkg/mod ~/.cache/go-build ~/.cache/golangci-lint .buildcache - key: v4-test-${{ runner.os }}-${{ hashFiles('go.mod') }} + key: v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('tools.go') }}-${{ hashFiles('go.sum') }} restore-keys: | - v4-test-${{ runner.os }}- + v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('tools.go') }}- + v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}- - run: scripts/test @@ -41,7 +42,7 @@ jobs: env: COVERALLS_TOKEN: ${{ secrets.COVERALLS_TOKEN }} if: env.COVERALLS_TOKEN - run: | + run: |- scripts/cover .buildcache/bin/goveralls -coverprofile=.buildcache/cover.out -service=GitHub @@ -51,11 +52,12 @@ jobs: timeout-minutes: 30 if: github.event_name == 'push' steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - - - uses: actions/checkout@v4 + cache: false - name: Turnstyle uses: softprops/turnstyle@v2 @@ -65,13 +67,17 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: actions/cache@v4 + id: cache-go-with-tools with: path: | - ~/go/pkg + ~/go/pkg/mod ~/.cache/go-build - key: v1-build-${{ runner.os }}-${{ hashFiles('go.mod') }} + ~/.cache/golangci-lint + .buildcache + key: v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('tools.go') }}-${{ hashFiles('go.sum') }} restore-keys: | - v1-build-${{ runner.os }}- + v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('tools.go') }}- + v1-go-with-tools-${{ runner.os }}-${{ matrix.go }}- # Add support for more platforms with QEMU (optional) # https://github.com/docker/setup-qemu-action diff --git a/.github/workflows/Create-GitHub-Release.yml b/.github/workflows/Create-GitHub-release.yml similarity index 82% rename from .github/workflows/Create-GitHub-Release.yml rename to .github/workflows/Create-GitHub-release.yml index e30a7d1..9fbb5a3 100644 --- a/.github/workflows/Create-GitHub-Release.yml +++ b/.github/workflows/Create-GitHub-release.yml @@ -1,8 +1,8 @@ -name: Create GitHub Release +name: Create GitHub release on: push: - tags: v* + tags: [v*] jobs: @@ -15,11 +15,11 @@ jobs: - name: Generate changelog id: changelog - uses: metcalfc/changelog-generator@v4.3.1 + uses: metcalfc/changelog-generator@v4 with: myToken: ${{ secrets.GITHUB_TOKEN }} - - name: Create Release + - name: Create release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/Generate-TOC.yml b/.github/workflows/Generate-TOC.yml index 40bded9..33a9d55 100644 --- a/.github/workflows/Generate-TOC.yml +++ b/.github/workflows/Generate-TOC.yml @@ -2,10 +2,10 @@ name: Generate TOC on: push: - branches: master + branches: [master] pull_request: - branches: master - types: [ opened, synchronize, reopened, closed ] + branches: [master] + types: [opened, synchronize, reopened, closed] jobs: diff --git a/.github/workflows/Lint-PR-name.yml b/.github/workflows/Lint-PR-name.yml index cb3d3bd..4a4e902 100644 --- a/.github/workflows/Lint-PR-name.yml +++ b/.github/workflows/Lint-PR-name.yml @@ -2,8 +2,8 @@ name: Lint PR name on: pull_request: - branches: master - types: [ opened, edited, synchronize, reopened ] + branches: [master] + types: [opened, edited, synchronize, reopened] jobs: @@ -14,20 +14,8 @@ jobs: - uses: actions/checkout@v4 - name: Install dependencies - run: npm install @commitlint/config-conventional + run: npm install @commitlint/config-conventional@16.0.0 - # https://github.com/JulienKode/pull-request-name-linter-action/issues/224#issuecomment-1672053886 - - #- uses: JulienKode/pull-request-name-linter-action@v0.5.0 - # with: - # configuration-path: '.github/commitlint.config.js' - - - name: Set configuration - run: | - echo "module.exports = {extends: ['@commitlint/config-conventional'], rules: { 'subject-case': [0,'always',['sentence-case']],'header-max-length': [2, 'always', 120], 'body-max-line-length': [0, 'always', 120] }};" > commitlint.config.js - - - name: Lint the PR title - run: | - echo "${PR_TITLE}" | npx --yes commitlint - env: - PR_TITLE: '${{ github.event.pull_request.title }}' + - uses: JulienKode/pull-request-name-linter-action@v0.5.0 + with: + configuration-path: '.github/commitlint.config.js' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 30dc606..0000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,93 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - schedule: - - cron: '35 3 * * 4' - -jobs: - analyze: - name: Analyze (${{ matrix.language }}) - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners (GitHub.com only) - # Consider using larger runners or machines with greater resources for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - # required for all workflows - security-events: write - - # required to fetch internal or private CodeQL packs - packages: read - - # only required for workflows in private repositories - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - include: - - language: go - build-mode: autobuild - # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' - # Use `c-cpp` to analyze code written in C, C++ or both - # Use 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, - # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. - # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how - # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - build-mode: ${{ matrix.build-mode }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - # If the analyze step fails for one of the languages you are analyzing with - # "We were unable to automatically build your code", modify the matrix above - # to set the build mode to "manual" for that language. Then modify this step - # to build your code. - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - if: matrix.build-mode == 'manual' - shell: bash - run: | - echo 'If you are using a "manual" build mode for one or more of the' \ - 'languages you are analyzing, replace this with the commands to build' \ - 'your code, for example:' - echo ' make bootstrap' - echo ' make release' - exit 1 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" diff --git a/.golangci.yml b/.golangci.yml index 1d54ca4..da0baa2 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,1587 +1,143 @@ -# This file contains all available configuration options -# with their default values (in comments). -# -# This file is not a configuration example, -# it contains the exhaustive configuration with explanations of the options. - -# Options for analysis running. +# Origin: https://github.com/powerman/golangci-lint-strict version 1.61.0 run: - # Number of operating system threads (`GOMAXPROCS`) that can execute golangci-lint simultaneously. - # If it is explicitly set to 0 (i.e. not the default) then golangci-lint will automatically set the value to match Linux container CPU quota. - # Default: the number of logical CPUs in the machine - #concurrency: 4 - - # Timeout for analysis, e.g. 30s, 5m. - # Default: 1m - #timeout: 5m - - # Exit code when at least one issue was found. - # Default: 1 - #issues-exit-code: 2 - - # Include test files or not. - # Default: true - #tests: false - - # List of build tags, all linters use it. - # Default: [] - #build-tags: - # - mytag - - # If set, we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - # - # Allowed values: readonly|vendor|mod - # Default: "" modules-download-mode: readonly - - # Allow multiple parallel golangci-lint instances running. - # If false, golangci-lint acquires file lock on start. - # Default: false - #allow-parallel-runners: true - - # Allow multiple golangci-lint instances running, but serialize them around a lock. - # If false, golangci-lint exits with an error if it fails to acquire file lock on start. - # Default: false - #allow-serial-runners: true - - # Define the Go version limit. - # Mainly related to generics support since go1.18. - # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.18 - #go: '1.19' - - -# output configuration options output: - # The formats used to render issues. - # Formats: - # - `colored-line-number` - # - `line-number` - # - `json` - # - `colored-tab` - # - `tab` - # - `html` - # - `checkstyle` - # - `code-climate` - # - `junit-xml` - # - `github-actions` - # - `teamcity` - # - `sarif` - # Output path can be either `stdout`, `stderr` or path to the file to write to. - # - # For the CLI flag (`--out-format`), multiple formats can be specified by separating them by comma. - # The output can be specified for each of them by separating format name and path by colon symbol. - # Example: "--out-format=checkstyle:report.xml,json:stdout,colored-line-number" - # The CLI flag (`--out-format`) override the configuration file. - # - # Default: - # formats: - # - format: colored-line-number - # path: stdout - #formats: - # - format: json - # path: stderr - # - format: checkstyle - # path: report.xml - # - format: colored-line-number - - # Print lines of code with issue. - # Default: true - #print-issued-lines: false - - # Print linter name in the end of issue text. - # Default: true - #print-linter-name: false - - # Make issues output unique by line. - # Default: true - #uniq-by-line: false - - # Add a prefix to the output file references. - # Default: "" - #path-prefix: "" - - # Sort results by the order defined in `sort-order`. - # Default: false sort-results: true - - # Order to use when sorting results. - # Require `sort-results` to `true`. - # Possible values: `file`, `linter`, and `severity`. - # - # If the severity values are inside the following list, they are ordered in this order: - # 1. error - # 2. warning - # 3. high - # 4. medium - # 5. low - # Either they are sorted alphabetically. - # - # Default: ["file"] sort-order: - linter - severity - - file # filepath, line, and column. - - # Show statistics per linter. - # Default: false - #show-stats: true - - -# All available settings of specific linters. + - file # Filepath, line, and column. linters-settings: - asasalint: - # To specify a set of function names to exclude. - # The values are merged with the builtin exclusions. - # The builtin exclusions can be disabled by setting `use-builtin-exclusions` to `false`. - # Default: ["^(fmt|log|logger|t|)\.(Print|Fprint|Sprint|Fatal|Panic|Error|Warn|Warning|Info|Debug|Log)(|f|ln)$"] - #exclude: - # - Append - # - \.Wrapf - # To enable/disable the asasalint builtin exclusions of function names. - # See the default value of `exclude` to get the builtin exclusions. - # Default: true - #use-builtin-exclusions: false - # Ignore *_test.go files. - # Default: false - #ignore-test: true - - bidichk: - # The following configurations check for all mentioned invisible unicode runes. - # All runes are enabled by default. - #left-to-right-embedding: false - #right-to-left-embedding: false - #pop-directional-formatting: false - #left-to-right-override: false - #right-to-left-override: false - #left-to-right-isolate: false - #right-to-left-isolate: false - #first-strong-isolate: false - #pop-directional-isolate: false - - copyloopvar: - # Check all assigning the loop variable to another variable. - # Default: false - #check-alias: true - - cyclop: - # The maximal code complexity to report. - # Default: 10 - max-complexity: 15 - # The maximal average package complexity. - # If it's higher than 0.0 (float) the check is enabled - # Default: 0.0 - #package-average: 0.5 - # Should ignore tests. - # Default: false - #skip-tests: true - decorder: - # Required order of `type`, `const`, `var` and `func` declarations inside a file. - # Default: types before constants before variables before functions. - #dec-order: - # - type - # - const - # - var - # - func - - # If true, underscore vars (vars with "_" as the name) will be ignored at all checks - # Default: false (underscore vars are not ignored) - #ignore-underscore-vars: false - - # If true, order of declarations is not checked at all. - # Default: true (disabled) - #disable-dec-order-check: false - - # If true, `init` func can be anywhere in file (does not have to be declared before all other functions). - # Default: true (disabled) - disable-init-func-first-check: false - - # If true, multiple global `type`, `const` and `var` declarations are allowed. - # Default: true (disabled) - #disable-dec-num-check: false - - # If true, type declarations will be ignored for dec num check - # Default: false (type statements are not ignored) - #disable-type-dec-num-check: false - - # If true, const declarations will be ignored for dec num check - # Default: false (const statements are not ignored) - #disable-const-dec-num-check: false - - # If true, var declarations will be ignored for dec num check - # Default: false (var statements are not ignored) - #disable-var-dec-num-check: false - + disable-init-func-first-check: false # `init` funcs have to be declared before all other functions. depguard: - # Rules to apply. - # - # Variables: - # - File Variables - # you can still use and exclamation mark ! in front of a variable to say not to use it. - # Example !$test will match any file that is not a go test file. - # - # `$all` - matches all go files - # `$test` - matches all go test files - # - # - Package Variables - # - # `$gostd` - matches all of go's standard library (Pulled from `GOROOT`) - # - # Default: Only allow $gostd in all files. rules: - # Name of a rule. main: - # Used to determine the package matching priority. - # There are three different modes: `original`, `strict`, and `lax`. - # Default: "original" - #list-mode: lax - # List of file globs that will match this list of settings to compare against. - # Default: $all - #files: - # - "!**/*_a _file.go" - # List of allowed packages. - #allow: - # - $gostd - # - github.com/OpenPeeDeeP - # Packages that are not allowed where the value is a suggestion. deny: - - pkg: "github.com/prometheus/common/log" + - pkg: github.com/prometheus/common/log desc: Should be replaced by standard lib log/slog package - - pkg: "github.com/sirupsen/logrus" + - pkg: github.com/sirupsen/logrus desc: Should be replaced by standard lib log/slog package - - pkg: "github.com/go-errors/errors" + - pkg: github.com/go-errors/errors desc: Should be replaced by standard lib errors package - - pkg: "github.com/pkg/errors" + - pkg: github.com/pkg/errors desc: Should be replaced by standard lib errors package - - pkg: "github.com/prometheus/client_golang/prometheus/promauto" + - pkg: github.com/prometheus/client_golang/prometheus/promauto desc: Not allowed because it uses global variables - - pkg: "github.com/golang/protobuf" + - pkg: github.com/golang/protobuf desc: Should be replaced by google.golang.org/protobuf package - - dogsled: - # Checks assignments with too many blank identifiers. - # Default: 2 - #max-blank-identifiers: 3 - dupl: - # Tokens count to trigger issue. - # Default: 150 - threshold: 100 - - dupword: - # Keywords for detecting duplicate words. - # If this list is not empty, only the words defined in this list will be detected. - # Default: [] - keywords: - - "the" - - "and" - - "a" - # Keywords used to ignore detection. - # Default: [] - #ignore: - # - "0C0C" - + threshold: 100 # Tokens. errcheck: - # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. - # Such cases aren't reported by default. - # Default: false - #check-type-assertions: true - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. - # Such cases aren't reported by default. - # Default: false - #check-blank: true - - # To disable the errcheck built-in exclude list. - # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details. - # Default: false - #disable-default-exclusions: true - - # List of functions to exclude from checking, where each entry is a single function to exclude. - # See https://github.com/kisielk/errcheck#excluding-functions for details. exclude-functions: - #- io/ioutil.ReadFile - #- io.Copy(*bytes.Buffer) - #- io.Copy(os.Stdout) - - encoding/json.Marshal - - encoding/json.MarshalIndent - + - encoding/json.Marshal # Required because of errchkjson.check-error-free-encoding. + - encoding/json.MarshalIndent # Required because of errchkjson.check-error-free-encoding. errchkjson: - # With check-error-free-encoding set to true, errchkjson does warn about errors - # from json encoding functions that are safe to be ignored, - # because they are not possible to happen. - # - # if check-error-free-encoding is set to true and errcheck linter is enabled, - # it is recommended to add the following exceptions to prevent from false positives: - # - # linters-settings: - # errcheck: - # exclude-functions: - # - encoding/json.Marshal - # - encoding/json.MarshalIndent - # - # Default: false check-error-free-encoding: true - - # Issue on struct encoding that doesn't have exported fields. - # Default: false - report-no-exported: true - - errorlint: - # Check whether fmt.Errorf uses the %w verb for formatting errors. - # See the https://github.com/polyfloyd/go-errorlint for caveats. - # Default: true - #errorf: false - # Permit more than 1 %w verb, valid per Go 1.20 (Requires errorf:true) - # Default: true - #errorf-multi: false - # Check for plain type assertions and type switches. - # Default: true - #asserts: false - # Check for plain error comparisons. - # Default: true - #comparison: false - # Allowed errors. - # Default: [] - #allowed-errors: - # - err: "io.EOF" - # fun: "example.com/pkg.Read" - # Allowed error "wildcards". - # Default: [] - #allowed-errors-wildcard: - # - err: "example.com/pkg.ErrMagic" - # fun: "example.com/pkg.Magic" - + report-no-exported: true # Encoded struct must have exported fields. exhaustive: - # Program elements to check for exhaustiveness. - # Default: [ switch ] check: - switch - map - # Check switch statements in generated files also. - # Default: false - #check-generated: true - # Presence of "default" case in switch statements satisfies exhaustiveness, - # even if all enum members are not listed. - # Default: false - #default-signifies-exhaustive: true - # Enum members matching the supplied regex do not have to be listed in - # switch statements to satisfy exhaustiveness. - # Default: "" - #ignore-enum-members: "Example.+" - # Enum types matching the supplied regex do not have to be listed in - # switch statements to satisfy exhaustiveness. - # Default: "" - #ignore-enum-types: "Example.+" - # Consider enums only in package scopes, not in inner scopes. - # Default: false - #package-scope-only: true - # Only run exhaustive check on switches with "//exhaustive:enforce" comment. - # Default: false - #explicit-exhaustive-switch: true - # Only run exhaustive check on map literals with "//exhaustive:enforce" comment. - # Default: false - explicit-exhaustive-map: true - # Switch statement requires default case even if exhaustive. - # Default: false - #default-case-required: true - + explicit-exhaustive-map: true # Only check maps with "//exhaustive:enforce" comment. exhaustruct: - # List of regular expressions to match struct packages and names. - # Regular expressions must match complete canonical struct package/name/structname. - # If this list is empty, all structs are tested. - # Default: [] include: - #- '.+\.Test' - #- 'example\.com/package\.ExampleStruct[\d]{1,2}' - - '^$' - # List of regular expressions to exclude struct packages and names from check. - # Regular expressions must match complete canonical struct package/name/structname. - # Default: [] - #exclude: - # - '.+/cobra\.Command$' - + - ^$ # Only check structs which domain.tld/package/name.structname match this regexp. forbidigo: - # Forbid the following identifiers (list of regexp). - # Default: ["^(fmt\\.Print(|f|ln)|print|println)$"] forbid: - # Builtin function: - ^print(ln)?$ - # Optional message that gets included in error reports. - #- p: ^fmt\.Print.*$ - # msg: Do not commit print statements. - # Alternatively, put messages at the end of the regex, surrounded by `(# )?` - # Escape any special characters. Those messages get included in error reports. - #- 'fmt\.Print.*(# Do not commit print statements\.)?' - # Forbid spew Dump, whether it is called as function or method. - # Depends on analyze-types below. - #- ^spew\.(ConfigState\.)?Dump$ - # The package name might be ambiguous. - # The full import path can be used as additional criteria. - # Depends on analyze-types below. - #- p: ^v1.Dump$ - # pkg: ^example.com/pkg/api/v1$ - # Exclude godoc examples from forbidigo checks. - # Default: true exclude-godoc-examples: false - # Instead of matching the literal source code, - # use type information to replace expressions with strings that contain the package name - # and (for methods and fields) the type name. - # This makes it possible to handle import renaming and forbid struct fields and methods. - # Default: false analyze-types: true - funlen: - # Checks the number of lines in a function. - # If lower than 0, disable the check. - # Default: 60 - #lines: -1 - # Checks the number of statements in a function. - # If lower than 0, disable the check. - # Default: 40 - #statements: -1 - # Ignore comments when counting lines. - # Default false ignore-comments: true - gci: - # Section configuration to compare against. - # Section names are case-insensitive and may contain parameters in (). - # The default order of sections is `standard > default > custom > blank > dot > alias > localmodule`, - # If `custom-order` is `true`, it follows the order of `sections` option. - # Default: ["standard", "default"] sections: - - standard # Standard section: captures all standard packages. - - default # Default section: contains all imports that could not be matched to another section type. - #- prefix(github.com/org/project) # Custom section: groups all imports with the specified Prefix. - #- blank # Blank section: contains all blank imports. This section is not present unless explicitly enabled. - #- dot # Dot section: contains all dot imports. This section is not present unless explicitly enabled. - #- alias # Alias section: contains all alias imports. This section is not present unless explicitly enabled. - - localmodule # Local module section: contains all local packages. This section is not present unless explicitly enabled. - - # Skip generated files. - # Default: true - #skip-generated: false - - # Enable custom order of sections. - # If `true`, make the section order the same as the order of `sections`. - # Default: false - #custom-order: true - - ginkgolinter: - # Suppress the wrong length assertion warning. - # Default: false - #suppress-len-assertion: true - - # Suppress the wrong nil assertion warning. - # Default: false - #suppress-nil-assertion: true - - # Suppress the wrong error assertion warning. - # Default: false - #suppress-err-assertion: true - - # Suppress the wrong comparison assertion warning. - # Default: false - #suppress-compare-assertion: true - - # Suppress the function all in async assertion warning. - # Default: false - #suppress-async-assertion: true - - # Suppress warning for comparing values from different types, like `int32` and `uint32` - # Default: false - #suppress-type-compare-assertion: true - - # Trigger warning for ginkgo focus containers like `FDescribe`, `FContext`, `FWhen` or `FIt` - # Default: false - #forbid-focus-container: true - - # Don't trigger warnings for HaveLen(0) - # Default: false - #allow-havelen-zero: true - - # Force using `Expect` with `To`, `ToNot` or `NotTo`. - # Reject using `Expect` with `Should` or `ShouldNot`. - # Default: false - #force-expect-to: true - - # Best effort validation of async intervals (timeout and polling). - # Ignored the suppress-async-assertion is true. - # Default: false - #validate-async-intervals: true - - # Trigger a warning for variable assignments in ginkgo containers like `Describe`, `Context` and `When`, instead of in `BeforeEach()`. - # Default: false - #forbid-spec-pollution: true - + - standard # Standard section: captures all standard packages. + - default # Default section: contains all imports that could not be matched to another section type. + - localmodule # Local module section: contains all local packages. This section is not present unless explicitly enabled. gocognit: - # Minimal code complexity to report. - # Default: 30 (but we recommend 10-20) min-complexity: 20 - goconst: - # Minimal length of string constant. - # Default: 3 - #min-len: 2 - # Minimum occurrences of constant string count to trigger issue. - # Default: 3 - #min-occurrences: 2 - # Ignore test files. - # Default: false ignore-tests: true - # Look for existing constants matching the values. - # Default: true - #match-constant: false - # Search also for duplicated numbers. - # Default: false - #numbers: true - # Minimum value, only works with goconst.numbers - # Default: 3 - #min: 2 - # Maximum value, only works with goconst.numbers - # Default: 3 - #max: 2 - # Ignore when constant is not used as function argument. - # Default: true - #ignore-calls: false - # Exclude strings matching the given regular expression. - # Default: "" - #ignore-strings: 'foo.+' - gocritic: - # Disable all checks. - # Default: false - #disable-all: true - # Which checks should be enabled in addition to default checks; can't be combined with 'disabled-checks'. - # By default, list of stable checks is used (https://go-critic.github.io/overview#checks-overview): - # appendAssign, argOrder, assignOp, badCall, badCond, captLocal, caseOrder, codegenComment, commentFormatting, - # defaultCaseOrder, deprecatedComment, dupArg, dupBranchBody, dupCase, dupSubExpr, elseif, exitAfterDefer, - # flagDeref, flagName, ifElseChain, mapKey, newDeref, offBy1, regexpMust, singleCaseSwitch, sloppyLen, - # sloppyTypeAssert, switchTrue, typeSwitchVar, underef, unlambda, unslice, valSwap, wrapperFunc - # To see which checks are enabled run `GL_DEBUG=gocritic golangci-lint run --enable=gocritic`. - #enabled-checks: - # - nestingReduce - # - unnamedResult - # - ruleguard - # - truncateCmp - - # Enable all checks. - # Default: false enable-all: true - # Which checks should be disabled; can't be combined with 'enabled-checks'. - # Default: [] disabled-checks: - - exposedSyncMutex # questionable - - hugeParam # premature optimization - - paramTypeCombine # questionable - - switchTrue # questionable - - todoCommentWithoutDetail # questionable - - yodaStyleExpr # questionable - - # Enable multiple checks by tags in addition to default checks. - # Run `GL_DEBUG=gocritic golangci-lint run --enable=gocritic` to see all tags and checks. - # See https://github.com/go-critic/go-critic#usage -> section "Tags". - # Default: [] - #enabled-tags: - # - diagnostic - # - style - # - performance - # - experimental - # - opinionated - #disabled-tags: - # - diagnostic - # - style - # - performance - # - experimental - # - opinionated - - # Settings passed to gocritic. - # The settings key is the name of a supported gocritic checker. - # The list of supported checkers can be find in https://go-critic.github.io/overview. + - exposedSyncMutex # Questionable. + - hugeParam # Premature optimization. + - paramTypeCombine # Questionable. + - switchTrue # Questionable. + - todoCommentWithoutDetail # Questionable. + - yodaStyleExpr # Questionable. settings: - # Must be valid enabled check name. captLocal: - # Whether to restrict checker to params only. - # Default: true - paramsOnly: false - commentedOutCode: - # Min length of the comment that triggers a warning. - # Default: 15 - #minLength: 50 - elseif: - # Whether to skip balanced if-else pairs. - # Default: true - #skipBalanced: false - hugeParam: - # Size in bytes that makes the warning trigger. - # Default: 80 - #sizeThreshold: 70 - ifElseChain: - # Min number of if-else blocks that makes the warning trigger. - # Default: 2 - #minThreshold: 4 - nestingReduce: - # Min number of statements inside a branch to trigger a warning. - # Default: 5 - #bodyWidth: 4 - rangeExprCopy: - # Size in bytes that makes the warning trigger. - # Default: 512 - #sizeThreshold: 516 - # Whether to check test functions - # Default: true - #skipTestFuncs: false - rangeValCopy: - # Size in bytes that makes the warning trigger. - # Default: 128 - #sizeThreshold: 32 - # Whether to check test functions. - # Default: true - #skipTestFuncs: false + paramsOnly: false # Do not restrict checker to params only. ruleguard: - # Enable debug to identify which 'Where' condition was rejected. - # The value of the parameter is the name of a function in a ruleguard file. - # - # When a rule is evaluated: - # If: - # The Match() clause is accepted; and - # One of the conditions in the Where() clause is rejected, - # Then: - # ruleguard prints the specific Where() condition that was rejected. - # - # The option is passed to the ruleguard 'debug-group' argument. - # Default: "" - #debug: 'emptyDecl' - # Determines the behavior when an error occurs while parsing ruleguard files. - # If flag is not set, log error and skip rule files that contain an error. - # If flag is set, the value must be a comma-separated list of error conditions. - # - 'all': fail on all errors. - # - 'import': ruleguard rule imports a package that cannot be found. - # - 'dsl': gorule file does not comply with the ruleguard DSL. - # Default: "" failOn: all - # Comma-separated list of file paths containing ruleguard rules. - # If a path is relative, it is relative to the directory where the golangci-lint command is executed. - # The special '${configDir}' variable is substituted with the absolute directory containing the golangci config file. - # Glob patterns such as 'rules-*.go' may be specified. - # Default: "" - #rules: '${configDir}/build/gorules/rules.go' # Run `golangci-lint cache clean` when it changes! - # Comma-separated list of enabled groups or skip empty to enable everything. - # Tags can be defined with # character prefix. - # Default: "" - #enable: "myGroupName,#myTagName" - # Comma-separated list of disabled groups or skip empty to enable everything. - # Tags can be defined with # character prefix. - # Default: "" - #disable: "myGroupName,#myTagName" - tooManyResultsChecker: - # Maximum number of results. - # Default: 5 - #maxResults: 10 truncateCmp: - # Whether to skip int/uint/uintptr types. - # Default: true - skipArchDependent: false + skipArchDependent: false # Do not skip int/uint/uintptr types. underef: - # Whether to skip (*x).method() calls where x is a pointer receiver. - # Default: true skipRecvDeref: false unnamedResult: - # Whether to check exported functions. - # Default: false checkExported: true - - gocyclo: - # Minimal code complexity to report. - # Default: 30 (but we recommend 10-20) - min-complexity: 15 - godot: - # Comments to be checked: `declarations`, `toplevel`, or `all`. - # Default: declarations - #scope: toplevel - # List of regexps for excluding particular comment lines from check. - # Default: [] exclude: - # Exclude line followed by details (e.g. list items). - - ':$' - - '^\s*- ' - # Check that each sentence ends with a period. - # Default: true - #period: false - # Check that each sentence starts with a capital letter. - # Default: false - #capital: true - + - :$ # Allow line followed by details in next line(s). + - '^\s*- ' # Allow line with a list item. godox: - # Report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging. - # Default: ["TODO", "BUG", "FIXME"] keywords: - - BUG # marks issues that should be moved to issue tracker before merging - - FIXME # marks issues that should be resolved before merging - - DEBUG # marks temporary code that should be removed before merging - + - BUG # Marks issues that should be moved to issue tracker before merging. + - FIXME # Marks issues that should be resolved before merging. + - DEBUG # Marks temporary code that should be removed before merging. gofmt: - # Simplify code: gofmt with `-s` option. - # Default: true - #simplify: false - # Apply the rewrite rules to the source before reformatting. - # https://pkg.go.dev/cmd/gofmt - # Default: [] rewrite-rules: - - pattern: 'interface{}' - replacement: 'any' - - pattern: 'a[b:len(a)]' - replacement: 'a[b:]' - - gofumpt: - # Module path which contains the source code being formatted. - # Default: "" - #module-path: github.com/org/project - - # Choose whether to use the extra rules. - # Default: false - #extra-rules: true - - goheader: - # Supports two types 'const` and `regexp`. - # Values can be used recursively. - # Default: {} - values: - const: - # Define here const type values in format k:v. - # For example: - #COMPANY: MY COMPANY - regexp: - # Define here regexp type values. - # for example: - #AUTHOR: .*@mycompany\.com - # The template use for checking. - # Default: "" - template: # |- - # Put here copyright header template for source code files - # For example: - # Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. - # - # {{ AUTHOR }} {{ COMPANY }} {{ YEAR }} - # SPDX-License-Identifier: Apache-2.0 - - # Licensed 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. - # As alternative of directive 'template', you may put the path to file with the template source. - # Useful if you need to load the template from a specific file. - # Default: "" - #template-path: /path/to/my/template.tmpl - - goimports: - # A comma-separated list of prefixes, which, if set, checks import paths - # with the given prefixes are grouped after 3rd-party packages. - # Default: "" - #local-prefixes: github.com/org/project - - gomoddirectives: - # Allow local `replace` directives. - # Default: false - replace-local: false - # List of allowed `replace` directives. - # Default: [] - #replace-allow-list: - # - launchpad.net/gocheck - # Allow to not explain why the version has been retracted in the `retract` directives. - # Default: false - #retract-allow-no-explanation: false - # Forbid the use of the `exclude` directives. - # Default: false - #exclude-forbidden: false - + - pattern: interface{} + replacement: any + - pattern: a[b:len(a)] + replacement: a[b:] gomodguard: - allowed: - # List of allowed modules. - # Default: [] - modules: - #- gopkg.in/yaml.v2 - # List of allowed module domains. - # Default: [] - domains: - #- golang.org blocked: - # List of blocked modules. - # Default: [] - modules: - # Blocked module. - #- github.com/uudashr/go-module: - # Recommended modules that should be used instead. (Optional) - #recommendations: - # - golang.org/x/mod - # Reason why the recommended module should be used. (Optional) - #reason: "`mod` is the official go.mod parser library." - # List of blocked module version constraints. - # Default: [] versions: - # Blocked module with version constraint. - github.com/cenkalti/backoff: - # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons. - version: "< 4.0.0" - # Reason why the version constraint exists. (Optional) - reason: "we use v4" - # Set to true to raise lint issues for packages that are loaded from a local path via replace directive. - # Default: false - local_replace_directives: false - - gosimple: - # Sxxxx checks in https://staticcheck.io/docs/configuration/options/#checks - # Default: ["*"] - checks: [ "all" ] - + version: < 4.0.0 + reason: use actual version gosec: - # To select a subset of rules to run. - # Available rules: https://github.com/securego/gosec#available-rules - # Default: [] - means include all rules - #includes: - # - G101 # Look for hard coded credentials - # - G102 # Bind to all interfaces - # - G103 # Audit the use of unsafe block - # - G104 # Audit errors not checked - # - G106 # Audit the use of ssh.InsecureIgnoreHostKey - # - G107 # Url provided to HTTP request as taint input - # - G108 # Profiling endpoint automatically exposed on /debug/pprof - # - G109 # Potential Integer overflow made by strconv.Atoi result conversion to int16/32 - # - G110 # Potential DoS vulnerability via decompression bomb - # - G111 # Potential directory traversal - # - G112 # Potential slowloris attack - # - G113 # Usage of Rat.SetString in math/big with an overflow (CVE-2022-23772) - # - G114 # Use of net/http serve function that has no support for setting timeouts - # - G115 # Potential integer overflow when converting between integer types - # - G201 # SQL query construction using format string - # - G202 # SQL query construction using string concatenation - # - G203 # Use of unescaped data in HTML templates - # - G204 # Audit use of command execution - # - G301 # Poor file permissions used when creating a directory - # - G302 # Poor file permissions used with chmod - # - G303 # Creating tempfile using a predictable path - # - G304 # File path provided as taint input - # - G305 # File traversal when extracting zip/tar archive - # - G306 # Poor file permissions used when writing to a new file - # - G307 # Poor file permissions used when creating a file with os.Create - # - G401 # Detect the usage of MD5 or SHA1 - # - G402 # Look for bad TLS connection settings - # - G403 # Ensure minimum RSA key length of 2048 bits - # - G404 # Insecure random number source (rand) - # - G405 # Detect the usage of DES or RC4 - # - G406 # Detect the usage of MD4 or RIPEMD160 - # - G501 # Import blocklist: crypto/md5 - # - G502 # Import blocklist: crypto/des - # - G503 # Import blocklist: crypto/rc4 - # - G504 # Import blocklist: net/http/cgi - # - G505 # Import blocklist: crypto/sha1 - # - G506 # Import blocklist: golang.org/x/crypto/md4 - # - G507 #Import blocklist: golang.org/x/crypto/ripemd160 - # - G601 # Implicit memory aliasing of items from a range statement - # - G602 # Slice access out of bounds - - # To specify a set of rules to explicitly exclude. - # Available rules: https://github.com/securego/gosec#available-rules - # Default: [] excludes: - # - G101 # Look for hard coded credentials - # - G102 # Bind to all interfaces - # - G103 # Audit the use of unsafe block - G104 # Audit errors not checked - # - G106 # Audit the use of ssh.InsecureIgnoreHostKey - # - G107 # Url provided to HTTP request as taint input - # - G108 # Profiling endpoint automatically exposed on /debug/pprof - # - G109 # Potential Integer overflow made by strconv.Atoi result conversion to int16/32 - # - G110 # Potential DoS vulnerability via decompression bomb - # - G111 # Potential directory traversal - # - G112 # Potential slowloris attack - # - G113 # Usage of Rat.SetString in math/big with an overflow (CVE-2022-23772) - # - G114 # Use of net/http serve function that has no support for setting timeouts - # - G115 # Potential integer overflow when converting between integer types - # - G201 # SQL query construction using format string - # - G202 # SQL query construction using string concatenation - # - G203 # Use of unescaped data in HTML templates - # - G204 # Audit use of command execution - # - G301 # Poor file permissions used when creating a directory - # - G302 # Poor file permissions used with chmod - # - G303 # Creating tempfile using a predictable path - # - G304 # File path provided as taint input - # - G305 # File traversal when extracting zip/tar archive - # - G306 # Poor file permissions used when writing to a new file - # - G307 # Poor file permissions used when creating a file with os.Create - # - G401 # Detect the usage of MD5 or SHA1 - # - G402 # Look for bad TLS connection settings - # - G403 # Ensure minimum RSA key length of 2048 bits - # - G404 # Insecure random number source (rand) - # - G405 # Detect the usage of DES or RC4 - # - G406 # Detect the usage of MD4 or RIPEMD160 - # - G501 # Import blocklist: crypto/md5 - # - G502 # Import blocklist: crypto/des - # - G503 # Import blocklist: crypto/rc4 - # - G504 # Import blocklist: net/http/cgi - # - G505 # Import blocklist: crypto/sha1 - # - G506 # Import blocklist: golang.org/x/crypto/md4 - # - G507 #Import blocklist: golang.org/x/crypto/ripemd160 - # - G601 # Implicit memory aliasing of items from a range statement - # - G602 # Slice access out of bounds - - # Exclude generated files - # Default: false exclude-generated: true - - # Filter out the issues with a lower severity than the given value. - # Valid options are: low, medium, high. - # Default: low - #severity: medium - - # Filter out the issues with a lower confidence than the given value. - # Valid options are: low, medium, high. - # Default: low - #confidence: medium - - # Concurrency value. - # Default: the number of logical CPUs usable by the current process. - #concurrency: 12 - - # To specify the configuration of rules. config: - # Globals are applicable to all rules. global: - # If true, ignore #nosec in comments (and an alternative as well). - # Default: false - #nosec: true - # Add an alternative comment prefix to #nosec (both will work at the same time). - # Default: "" - #"#nosec": "#my-custom-nosec" - # Define whether nosec issues are counted as finding or not. - # Default: false - #show-ignored: true - # Audit mode enables addition checks that for normal code analysis might be too nosy. - # Default: false audit: true - G101: - # Regexp pattern for variables and constants to find. - # Default: "(?i)passwd|pass|password|pwd|secret|token|pw|apiKey|bearer|cred" - #pattern: "(?i)example" - # If true, complain about all cases (even with low entropy). - # Default: false - #ignore_entropy: false - # Maximum allowed entropy of the string. - # Default: "80.0" - #entropy_threshold: "80.0" - # Maximum allowed value of entropy/string length. - # Is taken into account if entropy >= entropy_threshold/2. - # Default: "3.0" - #per_char_threshold: "3.0" - # Calculate entropy for first N chars of the string. - # Default: "16" - #truncate: "32" - # Additional functions to ignore while checking unhandled errors. - # Following functions always ignored: - # bytes.Buffer: - # - Write - # - WriteByte - # - WriteRune - # - WriteString - # fmt: - # - Print - # - Printf - # - Println - # - Fprint - # - Fprintf - # - Fprintln - # strings.Builder: - # - Write - # - WriteByte - # - WriteRune - # - WriteString - # io.PipeWriter: - # - CloseWithError - # hash.Hash: - # - Write - # os: - # - Unsetenv - # Default: {} - G104: - #fmt: - # - Fscanf - G111: - # Regexp pattern to find potential directory traversal. - # Default: "http\\.Dir\\(\"\\/\"\\)|http\\.Dir\\('\\/'\\)" - #pattern: "custom\\.Dir\\(\\)" - # Maximum allowed permissions mode for os.Mkdir and os.MkdirAll - # Default: "0750" - G301: "0750" - # Maximum allowed permissions mode for os.OpenFile and os.Chmod - # Default: "0600" - G302: "0600" - # Maximum allowed permissions mode for os.WriteFile and ioutil.WriteFile - # Default: "0600" - G306: "0600" - - gosmopolitan: - # Allow and ignore `time.Local` usages. - # - # Default: false - #allow-time-local: true - # List of fully qualified names in the `full/pkg/path.name` form, to act as "i18n escape hatches". - # String literals inside call-like expressions to, or struct literals of those names, - # are exempt from the writing system check. - # - # Default: [] - #escape-hatches: - # - 'github.com/nicksnyder/go-i18n/v2/i18n.Message' - # - 'example.com/your/project/i18n/markers.Raw' - # - 'example.com/your/project/i18n/markers.OK' - # - 'example.com/your/project/i18n/markers.TODO' - # - 'command-line-arguments.Simple' - # Ignore test files. - # - # Default: true - #ignore-tests: false - # List of Unicode scripts to watch for any usage in string literals. - # https://pkg.go.dev/unicode#pkg-variables - # - # Default: ["Han"] - #watch-for-scripts: - # - Devanagari - # - Han - # - Hangul - # - Hiragana - # - Katakana - govet: - # Disable all analyzers. - # Default: false - #disable-all: true - # Enable analyzers by name. - # (in addition to default: - # appends, asmdecl, assign, atomic, bools, buildtag, cgocall, composites, copylocks, defers, directive, errorsas, - # framepointer, httpresponse, ifaceassert, loopclosure, lostcancel, nilfunc, printf, shift, sigchanyzer, slog, - # stdmethods, stringintconv, structtag, testinggoroutine, tests, timeformat, unmarshal, unreachable, unsafeptr, - # unusedresult - # ). - # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. - # Default: [] - #enable: - # - appends - # - asmdecl - # - assign - # - atomic - # - atomicalign - # - bools - # - buildtag - # - cgocall - # - composites - # - copylocks - # - deepequalerrors - # - defers - # - directive - # - errorsas - # - fieldalignment - # - findcall - # - framepointer - # - httpresponse - # - ifaceassert - # - loopclosure - # - lostcancel - # - nilfunc - # - nilness - # - printf - # - reflectvaluecompare - # - shadow - # - shift - # - sigchanyzer - # - slog - # - sortslice - # - stdmethods - # - stringintconv - # - structtag - # - testinggoroutine - # - tests - # - unmarshal - # - unreachable - # - unsafeptr - # - unusedresult - # - unusedwrite - - # Enable all analyzers. - # Default: false enable-all: true - # Disable analyzers by name. - # (in addition to default - # atomicalign, deepequalerrors, fieldalignment, findcall, nilness, reflectvaluecompare, shadow, sortslice, - # timeformat, unusedwrite - # ). - # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. - # Default: [] disable: - #- appends - #- asmdecl - #- assign - #- atomic - #- atomicalign - #- bools - #- buildtag - #- cgocall - #- composites - #- copylocks - #- deepequalerrors - #- defers - #- directive - #- errorsas - fieldalignment - #- findcall - #- framepointer - #- httpresponse - #- ifaceassert - #- loopclosure - #- lostcancel - #- nilfunc - #- nilness - #- printf - #- reflectvaluecompare - #- shadow - #- shift - #- sigchanyzer - #- slog - #- sortslice - #- stdmethods - #- stringintconv - #- structtag - #- testinggoroutine - #- tests - #- unmarshal - #- unreachable - #- unsafeptr - #- unusedresult - #- unusedwrite - - # Settings per analyzer. settings: - # Analyzer name, run `go tool vet help` to see all analyzers. - printf: - # Comma-separated list of print function names to check (in addition to default, see `go tool vet help printf`). - # Default: [] - #funcs: - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - # - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf shadow: - # Whether to be strict about shadowing; can be noisy. - # Default: false strict: true - unusedresult: - # Comma-separated list of functions whose results must be used - # (in addition to default: - # context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue, errors.New, fmt.Errorf, - # fmt.Sprint, fmt.Sprintf, sort.Reverse - # ). - # Default: [] - #funcs: - # - pkg.MyFunc - # Comma-separated list of names of methods of type func() string whose results must be used - # (in addition to default Error,String) - # Default: [] - #stringmethods: - # - MyMethod - grouper: - # Require the use of a single global 'const' declaration only. - # Default: false - #const-require-single-const: true - # Require the use of grouped global 'const' declarations. - # Default: false - #const-require-grouping: true - - # Require the use of a single 'import' declaration only. - # Default: false - import-require-single-import: true - # Require the use of grouped 'import' declarations. - # Default: false - #import-require-grouping: true - - # Require the use of a single global 'type' declaration only. - # Default: false - #type-require-single-type: true - # Require the use of grouped global 'type' declarations. - # Default: false - #type-require-grouping: true - - # Require the use of a single global 'var' declaration only. - # Default: false - #var-require-single-var: true - # Require the use of grouped global 'var' declarations. - # Default: false - #var-require-grouping: true - + import-require-single-import: true # Use a single 'import' declaration. importas: - # Do not allow unaliased imports of aliased packages. - # Default: false - #no-unaliased: true - # Do not allow non-required aliases. - # Default: false - #no-extra-aliases: true - # List of aliases - # Default: [] alias: - # Using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package. - #- pkg: knative.dev/serving/pkg/apis/serving/v1 - # alias: servingv1 - # Using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package. - #- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1 - # alias: autoscalingv1alpha1 - # You can specify the package path by regular expression, - # and alias by regular expression expansion syntax like below. - # see https://github.com/julz/importas#use-regular-expression for details - #- pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+) - # alias: $1$2 - pkg: net/url alias: urlpkg - - inamedparam: - # Skips check for interface methods with only a single parameter. - # Default: false - #skip-single-param: true - - interfacebloat: - # The maximum number of methods allowed for an interface. - # Default: 10 - #max: 5 - - ireturn: - # List of interfaces to allow. - # Lists of the keywords and regular expressions matched to interface or package names can be used. - # `allow` and `reject` settings cannot be used at the same time. - # - # Keywords: - # - `empty` for `interface{}` - # - `error` for errors - # - `stdlib` for standard library - # - `anon` for anonymous interfaces - # - `generic` for generic interfaces added in go 1.18 - # - # Default: [anon, error, empty, stdlib] - #allow: - # - anon - # # You can specify idiomatic endings for interface - # - (or|er)$ - - # List of interfaces to reject. - # Lists of the keywords and regular expressions matched to interface or package names can be used. - # `allow` and `reject` settings cannot be used at the same time. - # - # Keywords: - # - `empty` for `interface{}` - # - `error` for errors - # - `stdlib` for standard library - # - `anon` for anonymous interfaces - # - `generic` for generic interfaces added in go 1.18 - # - # Default: [] - #reject: - # - github.com\/user\/package\/v4\.Type - - lll: - # Max line length, lines longer will be reported. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option. - # Default: 120. - #line-length: 120 - # Tab width in spaces. - # Default: 1 - #tab-width: 1 - loggercheck: - # Allow check for the github.com/go-kit/log library. - # Default: true - #kitlog: false - # Allow check for the k8s.io/klog/v2 library. - # Default: true - #klog: false - # Allow check for the github.com/go-logr/logr library. - # Default: true - #logr: false - # Allow check for the "sugar logger" from go.uber.org/zap library. - # Default: true - #zap: false - # Require all logging keys to be inlined constant strings. - # Default: false - require-string-key: true - # Require printf-like format specifier (%s, %d for example) not present. - # Default: false + require-string-key: true # Logging keys must be inlined constant strings. no-printf-like: true - # List of custom rules to check against, where each rule is a single logger pattern, useful for wrapped loggers. - # For example: https://github.com/timonwong/loggercheck/blob/7395ab86595781e33f7afba27ad7b55e6956ebcd/testdata/custom-rules.txt - # Default: empty - #rules: - # - k8s.io/klog/v2.InfoS # package level exported functions - # - (github.com/go-logr/logr.Logger).Error # "Methods" - # - (*go.uber.org/zap.SugaredLogger).With # Also "Methods", but with a pointer receiver - - maintidx: - # Show functions with maintainability index lower than N. - # A high index indicates better maintainability (it's kind of the opposite of complexity). - # Default: 20 - #under: 100 - - makezero: - # Allow only slices initialized with a length of zero. - # Default: false - #always: true - misspell: - # Correct spellings using locale preferences for US or UK. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - # Default is to use a neutral variety of English. - #locale: US - # Typos to ignore. - # Should be in lower case. - # Default: [] - #ignore-words: - # - someword - # Extra word corrections. - # `typo` and `correction` should only contain letters. - # The words are case-insensitive. - # Default: [] - #extra-words: - # - typo: "iff" - # correction: "if" - # - typo: "cancelation" - # correction: "cancellation" - # Mode of the analysis: - # - default: checks all the file content. - # - restricted: checks only comments. - # Default: "" - mode: restricted - - mnd: - # List of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description. - # Default: ["argument", "case", "condition", "operation", "return", "assign"] - #checks: - # - argument - # - case - # - condition - # - operation - # - return - # - assign - # List of numbers to exclude from analysis. - # The numbers should be written as string. - # Values always ignored: "1", "1.0", "0" and "0.0" - # Default: [] - #ignored-numbers: - # - '0666' - # - '0755' - # - '42' - # List of file patterns to exclude from analysis. - # Values always ignored: `.+_test.go` - # Default: [] - #ignored-files: - # - 'magic1_.+\.go$' - # List of function patterns to exclude from analysis. - # Following functions are always ignored: `time.Date`, - # `strconv.FormatInt`, `strconv.FormatUint`, `strconv.FormatFloat`, - # `strconv.ParseInt`, `strconv.ParseUint`, `strconv.ParseFloat`. - # Default: [] - #ignored-functions: - # - '^math\.' - # - '^http\.StatusText$' - - musttag: - # A set of custom functions to check in addition to the builtin ones. - # Default: json, xml, gopkg.in/yaml.v3, BurntSushi/toml, mitchellh/mapstructure, jmoiron/sqlx - functions: - # The full name of the function, including the package. - #- name: github.com/hashicorp/hcl/v2/hclsimple.DecodeFile - # # The struct tag whose presence should be ensured. - # tag: hcl - # # The position of the argument to check. - # arg-pos: 2 - - nakedret: - # Make an issue if func has more lines of code than this setting, and it has naked returns. - # Default: 30 - #max-func-lines: 31 - + mode: restricted # Check only comments. nestif: - # Minimal complexity of if statements to report. - # Default: 5 min-complexity: 4 - - nilnil: - # List of return types to check. - # Default: ["ptr", "func", "iface", "map", "chan", "uintptr", "unsafeptr"] - #checked-types: - # - ptr - # - func - # - iface - # - map - # - chan - # - uintptr - # - unsafeptr - - nlreturn: - # Size of the block (including return statement that is still "OK") - # so no return split required. - # Default: 1 - #block-size: 2 - nolintlint: - # Disable to ensure that all nolint directives actually have an effect. - # Default: false - #allow-unused: true - # Exclude following linters from requiring an explanation. - # Default: [] - #allow-no-explanation: [ ] - # Enable to require an explanation of nonzero length after each nolint directive. - # Default: false - require-explanation: true - # Enable to require nolint directives to mention the specific linter being suppressed. - # Default: false - require-specific: true - - nonamedreturns: - # Report named error if it is assigned inside defer. - # Default: false - #report-error-in-defer: true - + require-explanation: true # Disable linters this way: //nolint:first,second // Reason here. + require-specific: true # Do not allow //nolint without specific linter name(s). paralleltest: - # Ignore missing calls to `t.Parallel()` and only report incorrect uses of it. - # Default: false - ignore-missing: true - # Ignore missing calls to `t.Parallel()` in subtests. Top-level tests are - # still required to have `t.Parallel`, but subtests are allowed to skip it. - # Default: false - ignore-missing-subtests: true - - perfsprint: - # Optimizes even if it requires an int or uint type cast. - # Default: true - #int-conversion: false - # Optimizes into `err.Error()` even if it is only equivalent for non-nil errors. - # Default: false - #err-error: true - # Optimizes `fmt.Errorf`. - # Default: true - #errorf: false - # Optimizes `fmt.Sprintf` with only one argument. - # Default: true - #sprintf1: false - # Optimizes into strings concatenation. - # Default: true - #strconcat: false - - prealloc: - # IMPORTANT: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report pre-allocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # Default: true - #simple: false - # Report pre-allocation suggestions on range loops. - # Default: true - #range-loops: false - # Report pre-allocation suggestions on for loops. - # Default: false - #for-loops: true - - predeclared: - # Comma-separated list of predeclared identifiers to not report on. - # Default: "" - #ignore: "new,int" - # Include method names and field names (i.e., qualified names) in checks. - # Default: false - #q: true - - promlinter: - # Promlinter cannot infer all metrics name in static analysis. - # Enable strict mode will also include the errors caused by failing to parse the args. - # Default: false - #strict: true - # Please refer to https://github.com/yeya24/promlinter#usage for detailed usage. - # Default: [] - disabled-linters: - #- Help - #- MetricUnits - #- Counter - #- HistogramSummaryReserved - #- MetricTypeInName - #- ReservedChars - #- CamelCase - #- UnitAbbreviations - - protogetter: - # Skip files generated by specified generators from the checking. - # Checks only the file's initial comment, which must follow the format: "// Code generated by ". - # Files generated by protoc-gen-go, protoc-gen-go-grpc, and protoc-gen-grpc-gateway are always excluded automatically. - # Default: [] - #skip-generated-by: ["protoc-gen-go-my-own-generator"] - # Skip files matching the specified glob pattern from the checking. - # Default: [] - #skip-files: - # - "*.pb.go" - # - "*/vendor/*" - # - "/full/path/to/file.go" - # Skip any generated files from the checking. - # Default: false - #skip-any-generated: true - # Skip first argument of append function. - # Default: false - #replace-first-arg-in-append: true - + ignore-missing: true # Do not require `t.Parallel()` everywhere. + ignore-missing-subtests: true # Do not require `t.Parallel()` in all subtests. reassign: - # Patterns for global variable names that are checked for reassignment. - # See https://github.com/curioswitch/go-reassign#usage - # Default: ["EOF", "Err.*"] patterns: - - ".*" - + - .* # Check all global variables. revive: - # Maximum number of open files at the same time. - # See https://github.com/mgechev/revive#command-line-flags - # Defaults to unlimited. - #max-open-files: 2048 - - # When set to false, ignores files with "GENERATED" header, similar to golint. - # See https://github.com/mgechev/revive#available-rules for details. - # Default: false - ignore-generated-header: true - - # Sets the default severity. - # See https://github.com/mgechev/revive#configuration - # Default: warning - #severity: error - - # Enable all available rules. - # Default: false - #enable-all-rules: true - - # Sets the default failure confidence. - # This means that linting errors with less than 0.8 confidence will be ignored. - # Default: 0.8 - #confidence: 0.1 - rules: - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md - # Rules ported from golint. - # Ordered as in https://github.com/mgechev/revive/tree/master?tab=readme-ov-file#available-rules. - name: context-keys-type - name: time-naming - name: var-declaration @@ -1589,107 +145,42 @@ linters-settings: - name: errorf - name: blank-imports - name: context-as-argument - #arguments: - # - allowTypesBefore: "*testing.T,*github.com/user/repo/testing.Harness" - name: dot-imports - name: error-return - name: error-strings - name: error-naming - #- name: exported - #arguments: - # - "preserveScope" - # - "checkPrivateReceivers" - # - "sayRepetitiveInsteadOfStutters" - name: increment-decrement - name: var-naming - #arguments: - # - [ "ID" ] # AllowList - # - [ "VM" ] # DenyList - # - - upperCaseConst: true # Extra parameter (upperCaseConst|skipPackageNameChecks) - name: package-comments - name: range - name: receiver-naming - name: indent-error-flow - #arguments: - # - "preserveScope" - - # Rules not available in golint: - #- name: add-constant - #arguments: - # - maxLitCount: "3" - # allowStrs: '""' - # allowInts: "0,1,2" - # allowFloats: "0.0,0.,1.0,1.,2.0,2." - #- name: argument-limit - #arguments: [ 4 ] - name: atomic - #- name: banned-characters - #arguments: [ "Ω","Σ","σ", "7" ] - #- name: bare-return - name: bool-literal-in-expr - name: call-to-gc - #- name: cognitive-complexity - #arguments: [ 15 ] - name: comment-spacings arguments: - - nolint - #- name: comments-density - #arguments: [ 15 ] - #- name: confusing-naming + - nolint # Allow //nolint without a space. - name: confusing-results - name: constant-logical-expr - #- name: cyclomatic - #arguments: [ 15 ] - name: datarace - name: deep-exit - name: defer - # Options: call-chain, loop, method-call, recover, return. - # By default all enabled. - #arguments: - # - [ "call-chain", "loop" ] - name: duplicated-imports - name: early-return - #arguments: - # - "preserveScope" - #- name: empty-block # See https://github.com/mgechev/revive/issues/386 - name: empty-lines - name: enforce-map-style arguments: - - "make" - #- name: enforce-slice-style - #arguments: - # - "make" - #- name: enforce-repeated-arg-type-style - #arguments: - # - "short" - #- name: file-header - #arguments: - # - This is the text that must appear at the top of source files. + - make # Use `make(map[A]B)` instead of literal `map[A]B{}`. - name: flag-parameter - #- name: function-length - #arguments: [ 40, 60 ] - #- name: function-result-limit - #arguments: [ 3 ] - name: get-return - name: identical-branches - name: if-return - name: import-alias-naming - #arguments: - # - "^[a-z][a-z0-9]{0,}$" - #- name: import-shadowing # See https://github.com/mgechev/revive/issues/534 - name: imports-blocklist - #arguments: - # - "crypto/md5" - # - "crypto/sha1" - #- name: line-length-limit - #arguments: [ 80 ] - name: max-control-nesting - #arguments: [ 3 ] - #- name: max-public-structs - #arguments: [ 3 ] - name: modifies-parameter - name: modifies-value-receiver - #- name: nested-structs - name: optimize-operands-order - name: range-val-address - name: range-val-in-closure @@ -1697,176 +188,39 @@ linters-settings: - name: redundant-import-alias - name: string-format arguments: - - - 'fmt.Errorf[0]' - - '/(^|[^\.!?])$/' + - - fmt.Errorf[0] + - /(^|[^\.!?])$/ - must not end in punctuation - - - 'panic' - - '/^[^\n]*$/' + - - panic + - /^[^\n]*$/ - must not contain line breaks - name: string-of-int - name: struct-tag - #arguments: - # - "json,inline" - # - "bson,outline,gnu" - name: superfluous-else - #arguments: - # - "preserveScope" - name: time-equal - #- name: unchecked-type-assertion - #arguments: - # - acceptIgnoredAssertionResult: true - name: unconditional-recursion - name: unexported-naming - #- name: unhandled-error - #arguments: - # - os.Setenv - # - os.Unsetenv - # - fmt.Print - # - fmt.Printf - # - fmt.Println - name: unnecessary-stmt - name: unreachable-code - name: unused-parameter - #arguments: - # - allowRegex: "^_" - name: unused-receiver - #arguments: - # - allowRegex: "^_" - name: use-any - name: useless-break - name: waitgroup-by-value - rowserrcheck: - # database/sql is always checked - # Default: [] packages: - github.com/jmoiron/sqlx - github.com/powerman/sqlxx - sloglint: - # Enforce not mixing key-value pairs and attributes. - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-mixed-arguments - # Default: true - #no-mixed-args: false - # Enforce using key-value pairs only (overrides no-mixed-args, incompatible with attr-only). - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#key-value-pairs-only - # Default: false - #kv-only: true - # Enforce using attributes only (overrides no-mixed-args, incompatible with kv-only). - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#attributes-only - # Default: false - #attr-only: true - # Enforce not using global loggers. - # Values: - # - "": disabled - # - "all": report all global loggers - # - "default": report only the default slog logger - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-global - # Default: "" - #no-global: "all" - # Enforce using methods that accept a context. - # Values: - # - "": disabled - # - "all": report all contextless calls - # - "scope": report only if a context exists in the scope of the outermost function - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#context-only - # Default: "" - context: "scope" - # Enforce using static values for log messages. - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#static-messages - # Default: false + context: scope static-msg: true - # Enforce using constants instead of raw keys. - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-raw-keys - # Default: false - #no-raw-keys: true - # Enforce a single key naming convention. - # Values: snake, kebab, camel, pascal - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#key-naming-convention - # Default: "" key-naming-case: snake - # Enforce not using specific keys. - # Default: [] forbidden-keys: - - time - - level - - msg - - source - #- foo - # Enforce putting arguments on separate lines. - # https://github.com/go-simpler/sloglint?tab=readme-ov-file#forbidden-keys - # Default: false - #args-on-sep-lines: true - - spancheck: - # Checks to enable. - # Options include: - # - `end`: check that `span.End()` is called - # - `record-error`: check that `span.RecordError(err)` is called when an error is returned - # - `set-status`: check that `span.SetStatus(codes.Error, msg)` is called when an error is returned - # Default: ["end"] - #checks: - # - end - # - record-error - # - set-status - # A list of regexes for function signatures that silence `record-error` and `set-status` reports - # if found in the call path to a returned error. - # https://github.com/jjti/go-spancheck#ignore-check-signatures - # Default: [] - #ignore-check-signatures: - # - "telemetry.RecordError" - # A list of regexes for additional function signatures that create spans. - # This is useful if you have a utility method to create spans. - # Each entry should be of the form `:`, where `telemetry-type` can be `opentelemetry` or `opencensus`. - # https://github.com/jjti/go-spancheck#extra-start-span-signatures - # Default: [] - #extra-start-span-signatures: - # - "github.com/user/repo/telemetry/trace.Start:opentelemetry" - - staticcheck: - # SAxxxx checks in https://staticcheck.io/docs/configuration/options/#checks - # Default: ["*"] - checks: [ "all" ] - - stylecheck: - # STxxxx checks in https://staticcheck.io/docs/configuration/options/#checks - # Default: ["*"] - checks: [ "all" ] # [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ] - # https://staticcheck.io/docs/configuration/options/#dot_import_whitelist - # Default: ["github.com/mmcloughlin/avo/build", "github.com/mmcloughlin/avo/operand", "github.com/mmcloughlin/avo/reg"] - dot-import-whitelist: - - fmt - # https://staticcheck.io/docs/configuration/options/#initialisms - # Default: ["ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "SIP", "RTP", "AMQP", "DB", "TS"] - initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "SIP", "RTP", "AMQP", "DB", "TS" ] - # https://staticcheck.io/docs/configuration/options/#http_status_code_whitelist - # Default: ["200", "400", "404", "500"] - http-status-code-whitelist: [ "200", "400", "404", "500" ] - + - time # Used by standard slog.JSONHandler or slog.TextHandler. + - level # Used by standard slog.JSONHandler or slog.TextHandler. + - msg # Used by standard slog.JSONHandler or slog.TextHandler. + - source # Used by standard slog.JSONHandler or slog.TextHandler. tagalign: - # Align and sort can be used together or separately. - # - # Whether enable align. If true, the struct tags will be aligned. - # e.g.: - # type FooBar struct { - # Bar string `json:"bar" validate:"required"` - # FooFoo int8 `json:"foo_foo" validate:"required"` - # } - # will be formatted to: - # type FooBar struct { - # Bar string `json:"bar" validate:"required"` - # FooFoo int8 `json:"foo_foo" validate:"required"` - # } - # Default: true. - #align: false - # Whether enable tags sort. - # If true, the tags will be sorted by name in ascending order. - # e.g.: `xml:"bar" json:"bar" validate:"required"` -> `json:"bar" validate:"required" xml:"bar"` - # Default: true - #sort: false - # Specify the order of tags, the other tags will be sorted by name. - # This option will be ignored if `sort` is false. - # Default: [] order: - json - yaml @@ -1877,24 +231,11 @@ linters-settings: - mapstructure - binding - validate - # Whether enable strict style. - # In this style, the tags will be sorted and aligned in the dictionary order, - # and the tags with the same name will be aligned together. - # Note: This option will be ignored if 'align' or 'sort' is false. - # Default: false strict: true - tagliatelle: - # Check the struct tag name case. case: - # Use the struct field name to check the name of the struct tag. - # Default: false use-field-name: true - # `camel` is used for `json` and `yaml`, and `header` is used for `header` (can be overridden) - # Default: {} rules: - # Any struct tag type can be used. - # Support string case: `camel`, `pascal`, `kebab`, `snake`, `upperSnake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`, `header` json: snake yaml: kebab xml: camel @@ -1902,590 +243,49 @@ linters-settings: bson: camel avro: snake mapstructure: kebab - #env: upperSnake envconfig: upperSnake - - tenv: - # The option `all` will run against whole test files (`_test.go`) regardless of method/function signatures. - # Otherwise, only methods that take `*testing.T`, `*testing.B`, and `testing.TB` as arguments are checked. - # Default: false - #all: false - testifylint: - # Enable all checkers (https://github.com/Antonboom/testifylint#checkers). - # Default: false enable-all: true - # Disable checkers by name - # (in addition to default - # suite-thelper - # ). - disable: - #- blank-import - #- bool-compare - #- compares - #- empty - #- error-is-as - #- error-nil - #- expected-actual - #- float-compare - #- formatter - #- go-require - #- len - #- negative-positive - #- nil-compare - #- require-error - #- suite-broken-parallel - #- suite-dont-use-pkg - #- suite-extra-assert-call - #- suite-subtest-run - #- suite-thelper - #- useless-assert - - # Disable all checkers (https://github.com/Antonboom/testifylint#checkers). - # Default: false - #disable-all: true - # Enable checkers by name - # (in addition to default - # blank-import, bool-compare, compares, empty, error-is-as, error-nil, expected-actual, go-require, float-compare, - # formatter, len, negative-positive, nil-compare, require-error, suite-broken-parallel, suite-dont-use-pkg, - # suite-extra-assert-call, suite-subtest-run, useless-assert - # ). - enable: - #- blank-import - #- bool-compare - #- compares - #- empty - #- error-is-as - #- error-nil - #- expected-actual - #- float-compare - #- formatter - #- go-require - #- len - #- negative-positive - #- nil-compare - #- require-error - #- suite-broken-parallel - #- suite-dont-use-pkg - #- suite-extra-assert-call - #- suite-subtest-run - #- suite-thelper - #- useless-assert - - bool-compare: - # To ignore user defined types (over builtin bool). - # Default: false - #ignore-custom-types: true - expected-actual: - # Regexp for expected variable name. - # Default: (^(exp(ected)?|want(ed)?)([A-Z]\w*)?$)|(^(\w*[a-z])?(Exp(ected)?|Want(ed)?)$) - #pattern: ^expected - formatter: - # To enable go vet's printf checks. - # Default: true - #check-format-string: false - # To require f-assertions if format string is used. - # Default: false - #require-f-funcs: true - go-require: - # To ignore HTTP handlers (like http.HandlerFunc). - # Default: false - #ignore-http-handlers: true - require-error: - # Regexp for assertions to analyze. If defined, then only matched error assertions will be reported. - # Default: "" - #fn-pattern: ^(Errorf?|NoErrorf?)$ - suite-extra-assert-call: - # To require or remove extra Assert() call? - # Default: remove - #mode: require - testpackage: - # Regexp pattern to skip files. - # Default: "(export|internal)_test\\.go" skip-regexp: .*_internal_test\.go - # List of packages that don't end with _test that tests are allowed to be in. - # Default: "main" - #allow-packages: - # - example - # - main - thelper: test: - # Check *testing.T is first param (or after context.Context) of helper function. - # Default: true - #first: false - # Check *testing.T param has name t. - # Default: true - name: false - # Check t.Helper() begins helper function. - # Default: true - #begin: false - benchmark: - # Check *testing.B is first param (or after context.Context) of helper function. - # Default: true - #first: false - # Check *testing.B param has name b. - # Default: true - #name: false - # Check b.Helper() begins helper function. - # Default: true - #begin: false - tb: - # Check *testing.TB is first param (or after context.Context) of helper function. - # Default: true - #first: false - # Check *testing.TB param has name tb. - # Default: true - #name: false - # Check tb.Helper() begins helper function. - # Default: true - #begin: false - fuzz: - # Check *testing.F is first param (or after context.Context) of helper function. - # Default: true - #first: false - # Check *testing.F param has name f. - # Default: true - #name: false - # Check f.Helper() begins helper function. - # Default: true - #begin: false - + name: false # Allow *testing.T param to have any name, not only `t`. usestdlibvars: - # Suggest the use of http.MethodXX. - # Default: true - #http-method: false - # Suggest the use of http.StatusXX. - # Default: true - #http-status-code: false - # Suggest the use of time.Weekday.String(). - # Default: false time-weekday: true - # Suggest the use of time.Month.String(). - # Default: false time-month: true - # Suggest the use of time.Layout. - # Default: false time-layout: true - # Suggest the use of crypto.Hash.String(). - # Default: false crypto-hash: true - # Suggest the use of rpc.DefaultXXPath. - # Default: false default-rpc-path: true - # Suggest the use of sql.LevelXX.String(). - # Default: false sql-isolation-level: true - # Suggest the use of tls.SignatureScheme.String(). - # Default: false tls-signature-scheme: true - # Suggest the use of constant.Kind.String(). - # Default: false - #constant-kind: true - - unconvert: - # Remove conversions that force intermediate rounding. - # Default: false - #fast-math: true - # Be more conservative (experimental). - # Default: false - #safe: true - - unparam: - # Inspect exported functions. - # - # Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - # - # Default: false - #check-exported: true - - unused: - # Mark all struct fields that have been written to as used. - # Default: true - #field-writes-are-uses: false - # Treat IncDec statement (e.g. `i++` or `i--`) as both read and write operation instead of just write. - # Default: false - #post-statements-are-reads: true - # Mark all exported fields as used. - # default: true - #exported-fields-are-used: false - # Mark all function parameters as used. - # default: true - #parameters-are-used: false - # Mark all local variables as used. - # default: true - #local-variables-are-used: false - # Mark all identifiers inside generated files as used. - # Default: true - #generated-is-used: false - - varnamelen: - # The longest distance, in source lines, that is being considered a "small scope". - # Variables used in at most this many lines will be ignored. - # Default: 5 - #max-distance: 6 - # The minimum length of a variable's name that is considered "long". - # Variable names that are at least this long will be ignored. - # Default: 3 - #min-name-length: 2 - # Check method receivers. - # Default: false - #check-receiver: true - # Check named return values. - # Default: false - #check-return: true - # Check type parameters. - # Default: false - #check-type-param: true - # Ignore "ok" variables that hold the bool return value of a type assertion. - # Default: false - #ignore-type-assert-ok: true - # Ignore "ok" variables that hold the bool return value of a map index. - # Default: false - #ignore-map-index-ok: true - # Ignore "ok" variables that hold the bool return value of a channel receive. - # Default: false - #ignore-chan-recv-ok: true - # Optional list of variable names that should be ignored completely. - # Default: [] - #ignore-names: - # - err - # Optional list of variable declarations that should be ignored completely. - # Entries must be in one of the following forms (see below for examples): - # - for variables, parameters, named return values, method receivers, or type parameters: - # ( can also be a pointer/slice/map/chan/...) - # - for constants: const - # - # Default: [] - #ignore-decls: - # - c echo.Context - # - t testing.T - # - f *foo.Bar - # - e error - # - i int - # - const C - # - T any - # - m map[string]int - - whitespace: - # Enforces newlines (or comments) after every multi-line if statement. - # Default: false - #multi-if: true - # Enforces newlines (or comments) after every multi-line function signature. - # Default: false - #multi-func: true - - wrapcheck: - # An array of strings that specify substrings of signatures to ignore. - # If this set, it will override the default set of ignored signatures. - # See https://github.com/tomarrell/wrapcheck#configuration for more information. - # Default: [".Errorf(", "errors.New(", "errors.Unwrap(", "errors.Join(", ".Wrap(", ".Wrapf(", ".WithMessage(", ".WithMessagef(", ".WithStack("] - ignoreSigs: - #- .Errorf( - #- errors.New( - #- errors.Unwrap( - #- errors.Join( - #- .Wrap( - #- .Wrapf( - #- .WithMessage( - #- .WithMessagef( - #- .WithStack( - # An array of strings that specify regular expressions of signatures to ignore. - # Default: [] - ignoreSigRegexps: - #- \.New.*Error\( - # An array of strings that specify globs of packages to ignore. - # Default: [] - ignorePackageGlobs: - #- encoding/* - #- github.com/pkg/* - # An array of strings that specify regular expressions of interfaces to ignore. - # Default: [] - ignoreInterfaceRegexps: - #- ^(?i)c(?-i)ach(ing|e) - - wsl: - # Do strict checking when assigning from append (x = append(x, y)). - # If this is set to true - the append call must append either a variable - # assigned, called or used on the line above. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#strict-append - # Default: true - #strict-append: false - - # Allows assignments to be cuddled with variables used in calls on - # line above and calls to be cuddled with assignments of variables - # used in call on line above. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-assign-and-call - # Default: true - #allow-assign-and-call: false - - # Allows assignments to be cuddled with anything. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-assign-and-anything - # Default: false - #allow-assign-and-anything: true - - # Allows cuddling to assignments even if they span over multiple lines. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-multiline-assign - # Default: true - #allow-multiline-assign: false - - # If the number of lines in a case block is equal to or lager than this number, - # the case *must* end white a newline. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#force-case-trailing-whitespace - # Default: 0 - #force-case-trailing-whitespace: 1 - - # Allow blocks to end with comments. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-trailing-comment - # Default: false - #allow-trailing-comment: true - - # Allow multiple comments in the beginning of a block separated with newline. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-separated-leading-comment - # Default: false - #allow-separated-leading-comment: true - - # Allow multiple var/declaration statements to be cuddled. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#allow-cuddle-declarations - # Default: false - #allow-cuddle-declarations: true - - # A list of call idents that everything can be cuddled with. - # Defaults: [ "Lock", "RLock" ] - #allow-cuddle-with-calls: [ "Foo", "Bar" ] - - # AllowCuddleWithRHS is a list of right hand side variables that is allowed - # to be cuddled with anything. - # Defaults: [ "Unlock", "RUnlock" ] - #allow-cuddle-with-rhs: [ "Foo", "Bar" ] - - # Causes an error when an If statement that checks an error variable doesn't - # cuddle with the assignment of that variable. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#force-err-cuddling - # Default: false - #force-err-cuddling: true - - # When force-err-cuddling is enabled this is a list of names - # used for error variables to check for in the conditional. - # Default: [ "err" ] - #error-variable-names: [ "foo" ] - - # Causes an error if a short declaration (:=) cuddles with anything other than - # another short declaration. - # This logic overrides force-err-cuddling among others. - # https://github.com/bombsimon/wsl/blob/master/doc/configuration.md#force-short-decl-cuddling - # Default: false - #force-short-decl-cuddling: true - - # The custom section can be used to define linter plugins to be loaded at runtime. - # See README documentation for more info. - custom: - # Each custom linter should have a unique name. - #example: - # The plugin type. - # It can be `goplugin` or `module`. - # Default: goplugin - #type: module - # The path to the plugin *.so. Can be absolute or local. - # Required for each custom linter. - #path: /path/to/example.so - # The description of the linter. - # Optional. - #description: This is an example usage of a plugin linter. - # Intended to point to the repo location of the linter. - # Optional. - #original-url: github.com/golangci/example-linter - # Plugins settings/configuration. - # Only work with plugin based on `linterdb.PluginConstructor`. - # Optional. - #settings: - # foo: bar - - linters: - # Disable all linters. - # Default: false - #disable-all: true - # Enable specific linter - # https://golangci-lint.run/usage/linters/#enabled-by-default - #enable: - # - asasalint - # - asciicheck - # - bidichk - # - bodyclose - # - canonicalheader - # - containedctx - # - contextcheck - # - copyloopvar - # - cyclop - # - decorder - # - depguard - # - dogsled - # - dupl - # - dupword - # - durationcheck - # - err113 - # - errcheck - # - errchkjson - # - errname - # - errorlint - # - execinquery - # - exhaustive - # - exhaustruct - # - exportloopref - # - fatcontext - # - forbidigo - # - forcetypeassert - # - funlen - # - gci - # - ginkgolinter - # - gocheckcompilerdirectives - # - gochecknoglobals - # - gochecknoinits - # - gochecksumtype - # - gocognit - # - goconst - # - gocritic - # - gocyclo - # - godot - # - godox - # - gofmt - # - gofumpt - # - goheader - # - goimports - # - gomoddirectives - # - gomodguard - # - goprintffuncname - # - gosec - # - gosimple - # - gosmopolitan - # - govet - # - grouper - # - importas - # - inamedparam - # - ineffassign - # - interfacebloat - # - intrange - # - ireturn - # - lll - # - loggercheck - # - maintidx - # - makezero - # - mirror - # - misspell - # - mnd - # - musttag - # - nakedret - # - nestif - # - nilerr - # - nilnil - # - nlreturn - # - noctx - # - nolintlint - # - nonamedreturns - # - nosprintfhostport - # - paralleltest - # - perfsprint - # - prealloc - # - predeclared - # - promlinter - # - protogetter - # - reassign - # - revive - # - rowserrcheck - # - sloglint - # - spancheck - # - sqlclosecheck - # - staticcheck - # - stylecheck - # - tagalign - # - tagliatelle - # - tenv - # - testableexamples - # - testifylint - # - testpackage - # - thelper - # - tparallel - # - typecheck - # - unconvert - # - unparam - # - unused - # - usestdlibvars - # - varnamelen - # - wastedassign - # - whitespace - # - wrapcheck - # - wsl - # - zerologlint - - # Enable all available linters. - # Default: false enable-all: true - # Disable specific linter - # https://golangci-lint.run/usage/linters/#disabled-by-default disable: - - containedctx # questionable - - contextcheck # questionable - - cyclop # prefer gocognit - - dogsled # questionable (assignment to how many blank identifiers is not okay?) + - containedctx # Questionable. + - contextcheck # Questionable. + - cyclop # Prefer gocognit. + - dogsled # Questionable (assignment to how many blank identifiers is not okay?). - dupl - - execinquery # deprecated - - exportloopref # deprecated - - forcetypeassert # questionable (often we actually want panic) - - gocyclo # prefer gocognit - - gomnd # deprecated - - interfacebloat # questionable - - ireturn # questionable (is returning unexported types better?) - - lll # questionable (sometimes long lines improve readability) - - nlreturn # questionable (often no blank line before return improve readability) - - nonamedreturns # questionable (named return act as a documentation) - - perfsprint # questionable (force performance over readability and sometimes safety) + - execinquery # Deprecated. + - exportloopref # Deprecated. + - forcetypeassert # Questionable (often we actually want panic). + - gocyclo # Prefer gocognit. + - gomnd # Deprecated. + - interfacebloat # Questionable. + - ireturn # Questionable (is returning unexported types better?). + - lll # Questionable (sometimes long lines improve readability). + - nlreturn # Questionable (often no blank line before return improve readability). + - nonamedreturns # Questionable (named return act as a documentation). + - perfsprint # Questionable (force performance over readability and sometimes safety). - varnamelen - - wrapcheck # questionable (see https://github.com/tomarrell/wrapcheck/issues/1) - - wsl # questionable (too much style differences, hard to consider) - - # Enable presets. - # https://golangci-lint.run/usage/linters - # Default: [] - #presets: - # - bugs - # - comment - # - complexity - # - error - # - format - # - import - # - metalinter - # - module - # - performance - # - sql - # - style - # - test - # - unused - - # Enable only fast linters from enabled linters set (first run won't be fast) - # Default: false - #fast: true - - + - wrapcheck # Questionable (see https://github.com/tomarrell/wrapcheck/issues/1). + - wsl # Questionable (too much style differences, hard to consider). issues: - # List of regexps of issue texts to exclude. - # - # But independently of this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. - # To list all excluded by default patterns execute `golangci-lint run --help` - # - # Default: https://golangci-lint.run/usage/false-positives/#default-exclusions exclude: - - "declaration of \"(log|err|ctx)\" shadows" - - "missing cases in switch of type \\S+: \\S+_UNSPECIFIED$" - - # Excluding configuration per-path, per-linter, per-text and per-source + - declaration of "(log|err|ctx)" shadows + - 'missing cases in switch of type \S+: \S+_UNSPECIFIED$' exclude-rules: - # Exclude some linters from running on tests files. - path: _test\.go|testing(_.*)?\.go linters: - bodyclose @@ -2500,180 +300,24 @@ issues: - gosec - maintidx - reassign - - - linters: gochecknoglobals - source: "const" - + - source: const # Define global const-vars like: var SomeGlobal = []int{42} // Const. + linters: + - gochecknoglobals - path: _test\.go|testing(_.*)?\.go - text: "(unnamedResult|exitAfterDefer|rangeValCopy|unnecessaryBlock)" + text: (unnamedResult|exitAfterDefer|rangeValCopy|unnecessaryBlock) linters: - gocritic - - path: _test\.go text: '"t" shadows' linters: - govet - - # Files with go:embed directives are designed to contain global constants. - path: ^(.*/)?embed.go$ linters: - gochecknoglobals - - # Run some linter only for test files by excluding its issues for everything else. - #- path-except: _test\.go - # linters: - # - forbidigo - - # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via `nolint` comments. - # `/` will be replaced by current OS file path separator to properly work on Windows. - #- path: internal/hmac/ - # text: "weak cryptographic primitive" - # linters: - # - gosec - - # Exclude some `staticcheck` messages. - #- linters: - # - staticcheck - # text: "SA9003:" - - # Exclude `lll` issues for long lines with `go:generate`. - #- linters: - # - lll - # source: "^//go:generate " - - # Independently of option `exclude` we use default exclude patterns, - # it can be disabled by this option. - # To list all excluded by default patterns execute `golangci-lint run --help`. - # Default: true - exclude-use-default: false - - # If set to true, `exclude` and `exclude-rules` regular expressions become case-sensitive. - # Default: false - #exclude-case-sensitive: false - - # Which dirs to exclude: issues from them won't be reported. - # Can use regexp here: `generated.*`, regexp is applied on full path, - # including the path prefix if one is set. - # Default dirs are skipped independently of this option's value (see exclude-dirs-use-default). - # "/" will be replaced by current OS file path separator to properly work on Windows. - # Default: [] - #exclude-dirs: - # - src/external_libs - # - autogenerated_by_my_lib - - # Enables exclude of directories: - # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - # Default: true - #exclude-dirs-use-default: false - - # Which files to exclude: they will be analyzed, but issues from them won't be reported. - # There is no need to include all autogenerated files, - # we confidently recognize autogenerated files. - # If it's not, please let us know. - # "/" will be replaced by current OS file path separator to properly work on Windows. - # Default: [] + exclude-use-default: false # Disable default exclude patterns. exclude-files: - # Pattern used for auto-generated files. Redundant if `exclude-generated:` works for you. - - "\\.[\\w-]+\\.go$" - - # Mode of the generated files analysis. - # - # - `strict`: sources are excluded by following strictly the Go generated file convention. - # Source files that have lines matching only the following regular expression will be excluded: `^// Code generated .* DO NOT EDIT\.$` - # This line must appear before the first non-comment, non-blank text in the file. - # https://go.dev/s/generatedcode - # - `lax`: sources are excluded if they contain lines `autogenerated file`, `code generated`, `do not edit`, etc. - # - `disable`: disable the generated files exclusion. - # - # Default: lax - #exclude-generated: strict - - # The list of ids of default excludes to include or disable. - # Default: [] - include: - #- EXC0001 - #- EXC0002 - #- EXC0003 - #- EXC0004 - #- EXC0005 - #- EXC0006 - #- EXC0007 - #- EXC0008 - #- EXC0009 - #- EXC0010 - #- EXC0011 - #- EXC0012 - #- EXC0013 - #- EXC0014 - #- EXC0015 - - # Maximum issues count per one linter. - # Set to 0 to disable. - # Default: 50 + - \.[\w-]+\.go$ # Use this pattern to name auto-generated files. max-issues-per-linter: 0 - - # Maximum count of issues with the same text. - # Set to 0 to disable. - # Default: 3 max-same-issues: 0 - - # Show only new issues: if there are unstaged changes or untracked files, - # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing large codebase. - # It's not practical to fix all existing issues at the moment of integration: - # much better don't allow issues in new code. - # - # Default: false - #new: true - - # Show only new issues created after git revision `REV`. - # Default: "" - #new-from-rev: HEAD - - # Show only new issues created in git patch with set file path. - # Default: "" - #new-from-patch: path/to/patch/file - - # Show issues in any part of update files (requires new-from-rev or new-from-patch). - # Default: false - #whole-files: true - - # Fix found issues (if it's supported by the linter). - # Default: false - #fix: true - - severity: - # Set the default severity for issues. - # - # If severity rules are defined and the issues do not match or no severity is provided to the rule - # this will be the default severity applied. - # Severities should match the supported severity names of the selected out format. - # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity - # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#SeverityLevel - # - GitHub: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message - # - TeamCity: https://www.jetbrains.com/help/teamcity/service-messages.html#Inspection+Instance - # - # `@linter` can be used as severity value to keep the severity from linters (e.g. revive, gosec, ...) - # - # Default: "" default-severity: error - - # If set to true `severity-rules` regular expressions become case-sensitive. - # Default: false - #case-sensitive: true - - # When a list of severity rules are provided, severity information will be added to lint issues. - # Severity rules have the same filtering capability as exclude rules - # except you are allowed to specify one matcher per severity rule. - # - # `@linter` can be used as severity value to keep the severity from linters (e.g. revive, gosec, ...) - # - # Only affects out formats that support setting severity information. - # - # Default: [] - rules: - #- linters: - # - dupl - # severity: info diff --git a/scripts/release b/scripts/release index 4cb5437..fac161d 100755 --- a/scripts/release +++ b/scripts/release @@ -1,7 +1,7 @@ #!/bin/bash export PATH="$PWD/.buildcache/bin:$PATH" set -x -e -o pipefail -go generate +go generate tools.go DIST_DIR=bin TAG=$(git describe --match='v*' --exact-match --tags) @@ -11,13 +11,13 @@ GH_REPO="${GH##*/}" mkdir -p $DIST_DIR while read -r suffix GOOS GOARCH GOARM; do - CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH GOARM=$GOARM \ - go build -o "$DIST_DIR/${GH_REPO}-$suffix" -ldflags "-s -w -X 'main.ver=$TAG'" - pushd "$DIST_DIR" - upx "${GH_REPO}-$suffix" - sha256sum "${GH_REPO}-$suffix" >"${GH_REPO}-$suffix.sha256" - #gpg --armor --output "${GH_REPO}-$suffix.asc" --detach-sign "${GH_REPO}-$suffix" - popd + CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH GOARM=$GOARM \ + go build -o "$DIST_DIR/${GH_REPO}-$suffix" -ldflags "-s -w -X 'main.ver=$TAG'" + pushd "$DIST_DIR" + upx "${GH_REPO}-$suffix" + sha256sum "${GH_REPO}-$suffix" >"${GH_REPO}-$suffix.sha256" + #gpg --armor --output "${GH_REPO}-$suffix.asc" --detach-sign "${GH_REPO}-$suffix" + popd done <