mirror of
https://github.com/grafana/grafana.git
synced 2024-11-21 08:34:25 -06:00
316 lines
11 KiB
TOML
316 lines
11 KiB
TOML
|
[run]
|
||
|
timeout = "20m"
|
||
|
concurrency = 10
|
||
|
allow-parallel-runners = true
|
||
|
|
||
|
[linters-settings.exhaustive]
|
||
|
default-signifies-exhaustive = true
|
||
|
|
||
|
[linters-settings.revive]
|
||
|
ignore-generated-header = false
|
||
|
severity = "warning"
|
||
|
confidence = 3
|
||
|
|
||
|
[linters-settings.depguard.rules.main]
|
||
|
allow = [] # allow all
|
||
|
deny = [
|
||
|
{ pkg = "io/ioutil", desc = "Deprecated: As of Go 1.16, the same functionality is now provided by package io or package os, and those implementations should be preferred in new code. See the specific function documentation for details." },
|
||
|
{ pkg = "gopkg.in/yaml.v2", desc = "Grafana packages are not allowed to depend on gopkg.in/yaml.v2 as gopkg.in/yaml.v3 is now available" },
|
||
|
{ pkg = "github.com/pkg/errors", desc = "Deprecated: Go 1.13 supports the functionality provided by pkg/errors in the standard library." },
|
||
|
{ pkg = "github.com/xorcare/pointer", desc = "Use pkg/util.Pointer instead, which is a generic one-liner alternative" },
|
||
|
{ pkg = "github.com/gofrs/uuid", desc = "Use github.com/google/uuid instead, which we already depend on." },
|
||
|
{ pkg = "github.com/bmizerany/assert", desc = "Use github.com/stretchr/testify/assert instead, which we already depend on." },
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.coreplugins]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/api", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/cmd", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/cuectx", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/extensions", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/kinds", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/middleware", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/modules", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/registry", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/services", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/build", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/codegen", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/events", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/ifaces", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/kindsysreport", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/mocks", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/plugins", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/setting", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/util", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/bus", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/components", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/expr", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/infra", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/login", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/models", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/server", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/tests", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/web", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
{ pkg = "github.com/grafana/grafana/pkg/tsdb/intervalv2", desc = "Core plugins are not allowed to depend on Grafana core packages" },
|
||
|
]
|
||
|
files = [
|
||
|
"**/pkg/tsdb/grafana-pyroscope-datasource/*",
|
||
|
"**/pkg/tsdb/grafana-pyroscope-datasource/**/*",
|
||
|
"**/pkg/tsdb/grafana-testdata-datasource/*",
|
||
|
"**/pkg/tsdb/grafana-testdata-datasource/**/*",
|
||
|
"**/pkg/tsdb/azuremonitor/*",
|
||
|
"**/pkg/tsdb/azuremonitor/**/*",
|
||
|
"**/pkg/tsdb/cloud-monitoring/*",
|
||
|
"**/pkg/tsdb/cloud-monitoring/**/*",
|
||
|
"**/pkg/tsdb/mysql/*",
|
||
|
"**/pkg/tsdb/mysql/**/*",
|
||
|
"**/pkg/tsdb/parca/*",
|
||
|
"**/pkg/tsdb/parca/**/*",
|
||
|
"**/pkg/tsdb/tempo/*",
|
||
|
"**/pkg/tsdb/tempo/**/*",
|
||
|
"**/pkg/tsdb/cloudwatch/*",
|
||
|
"**/pkg/tsdb/cloudwatch/**/*",
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.apiserver]
|
||
|
list-mode = "lax"
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/apimachinery",
|
||
|
"github.com/grafana/grafana/pkg/apiserver",
|
||
|
]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "apiserver is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"**/pkg/apiserver/*",
|
||
|
"**/pkg/apiserver/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.apimachinery]
|
||
|
list-mode = "lax"
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/apimachinery",
|
||
|
]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "apimachinery is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"**/pkg/apimachinery/*",
|
||
|
"**/pkg/apimachinery/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.aggregator]
|
||
|
list-mode = "lax"
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/aggregator",
|
||
|
"github.com/grafana/grafana/pkg/semconv",
|
||
|
"github.com/grafana/grafana/pkg/apimachinery",
|
||
|
]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "apimachinery is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"./pkg/aggregator/*",
|
||
|
"./pkg/aggregator/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.promlib]
|
||
|
list-mode = "lax" # allow unless explicitely denied
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "promlib is not allowed to import grafana core" }
|
||
|
]
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/promlib"
|
||
|
]
|
||
|
files = [
|
||
|
"**/pkg/promlib/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.storage-unified-resource]
|
||
|
list-mode = "lax"
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/apimachinery",
|
||
|
]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "pkg/storage/unified/resource is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"./pkg/storage/unified/resource/*",
|
||
|
"./pkg/storage/unified/resource/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.storage-unified-apistore]
|
||
|
list-mode = "lax"
|
||
|
allow = [
|
||
|
"github.com/grafana/grafana/pkg/apimachinery",
|
||
|
"github.com/grafana/grafana/pkg/apiserver",
|
||
|
"github.com/grafana/grafana/pkg/unified/resource",
|
||
|
]
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "pkg/storage/unified/apistore is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"./pkg/storage/unified/apistore/*",
|
||
|
"./pkg/storage/unified/apistore/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.depguard.rules.apps-playlist]
|
||
|
list-mode = "lax"
|
||
|
allow = []
|
||
|
deny = [
|
||
|
{ pkg = "github.com/grafana/grafana/pkg", desc = "apps/playlist is not allowed to import grafana core" }
|
||
|
]
|
||
|
files = [
|
||
|
"./apps/playlist/*",
|
||
|
"./apps/playlist/**/*"
|
||
|
]
|
||
|
|
||
|
[linters-settings.gocritic]
|
||
|
enabled-checks = ["ruleguard"]
|
||
|
[linters-settings.gocritic.settings.ruleguard]
|
||
|
rules = "pkg/ruleguard.rules.go"
|
||
|
|
||
|
[linters-settings.misspell]
|
||
|
ignore-words = ["Unknwon", "Creater"]
|
||
|
|
||
|
[linters-settings.nakedret]
|
||
|
max-func-lines = 60
|
||
|
|
||
|
[linters]
|
||
|
disable-all = true
|
||
|
# try to keep this list sorted, please
|
||
|
enable = [
|
||
|
"asciicheck",
|
||
|
"bodyclose",
|
||
|
"depguard",
|
||
|
"dogsled",
|
||
|
"errcheck",
|
||
|
"errorlint",
|
||
|
"exhaustive",
|
||
|
"exportloopref",
|
||
|
# "gochecknoinits",
|
||
|
# "goconst",
|
||
|
# "gocritic", # Temporarily disabled on 2022-09-09, running into weird bug "ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?"
|
||
|
"gocyclo",
|
||
|
"goimports",
|
||
|
"goprintffuncname",
|
||
|
"gosec",
|
||
|
"gosimple",
|
||
|
"govet",
|
||
|
"ineffassign",
|
||
|
"misspell",
|
||
|
"nakedret",
|
||
|
"prealloc",
|
||
|
"revive",
|
||
|
"staticcheck",
|
||
|
"stylecheck",
|
||
|
"unconvert",
|
||
|
"unused",
|
||
|
"whitespace",
|
||
|
]
|
||
|
|
||
|
# Disabled linters (might want them later)
|
||
|
# "unparam"
|
||
|
# "rowserrcheck" # The linter doesn't detect that both Scan and Close also returns the error message returned by Err.
|
||
|
|
||
|
[issues]
|
||
|
exclude-use-default = false
|
||
|
max-same-issues = 0
|
||
|
|
||
|
# Enable when appropriate
|
||
|
# Poorly chosen identifier
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["stylecheck"]
|
||
|
text = "ST1003"
|
||
|
|
||
|
# Enable when appropriate
|
||
|
# Dot imports that aren't in external test packages are discouraged.
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["stylecheck"]
|
||
|
text = "ST1001"
|
||
|
|
||
|
# Enable when appropriate
|
||
|
# http.CloseNotifier has been deprecated since Go 1.11 and an alternative has been available since Go 1.7: We currently need it in pkg/web/response_writer.go.
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["staticcheck"]
|
||
|
text = "SA1019: http.CloseNotifier"
|
||
|
|
||
|
# strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly.
|
||
|
# Use golang.org/x/text/cases instead.
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["staticcheck"]
|
||
|
text = "SA1019: strings.Title"
|
||
|
|
||
|
# go.opentelemetry.io/otel/exporters/jaeger" is deprecated: This module is no longer supported. OpenTelemetry dropped support for Jaeger exporter in July 2023.
|
||
|
# Jaeger officially accepts and recommends using OTLP.
|
||
|
# Use [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp] or [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc] instead.
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["staticcheck"]
|
||
|
text = "SA1019: \"go.opentelemetry.io/otel/exporters/jaeger\""
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["staticcheck"]
|
||
|
text = "use fake service and real access control evaluator instead"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "G108"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "G110"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "G201"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "G202"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "G306"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "401"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "402"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "501"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
text = "404"
|
||
|
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["errorlint"]
|
||
|
text = "non-wrapping format verb for fmt.Errorf"
|
||
|
|
||
|
# TODO: Enable
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["stylecheck"]
|
||
|
text = "ST1000"
|
||
|
|
||
|
# TODO: Enable
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["stylecheck"]
|
||
|
text = "ST1020"
|
||
|
|
||
|
# TODO: Enable
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["stylecheck"]
|
||
|
text = "ST1021"
|
||
|
|
||
|
# Remove this when we have go v1.22 in place
|
||
|
# https://stackoverflow.com/a/68247837/767660
|
||
|
[[issues.exclude-rules]]
|
||
|
linters = ["gosec"]
|
||
|
path = '(.+)_test\.go'
|
||
|
text = "G601"
|