2020-06-29 07:08:32 -05:00
[ run ]
2024-07-16 08:44:43 -05:00
timeout = "20m"
2024-06-06 12:01:27 -05:00
concurrency = 10
2024-09-25 18:21:39 -05:00
allow-parallel-runners = true
2020-06-29 07:08:32 -05:00
2020-12-01 02:53:27 -06:00
[ linters-settings . exhaustive ]
default-signifies-exhaustive = true
2021-04-20 09:51:08 -05:00
[ linters-settings . revive ]
ignore-generated-header = false
severity = "warning"
confidence = 3
2023-07-18 03:03:35 -05:00
[ linters-settings . depguard . rules . main ]
allow = [ ] # allow all
deny = [
2023-09-21 03:39:28 -05:00
{ 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." } ,
2024-04-02 10:45:15 -05:00
{ pkg = "github.com/bmizerany/assert" , desc = "Use github.com/stretchr/testify/assert instead, which we already depend on." } ,
2023-07-18 03:03:35 -05:00
]
2022-08-11 06:21:12 -05:00
2023-07-18 08:57:31 -05:00
[ linters-settings . depguard . rules . coreplugins ]
deny = [
2023-09-21 03:39:28 -05:00
{ 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" } ,
2024-01-03 13:20:22 -06:00
{ pkg = "github.com/grafana/grafana/pkg/tsdb/intervalv2" , desc = "Core plugins are not allowed to depend on Grafana core packages" } ,
2023-07-18 08:57:31 -05:00
]
2023-09-22 07:00:40 -05:00
files = [
2024-01-16 06:46:15 -06:00
"**/pkg/tsdb/grafana-pyroscope-datasource/*" ,
"**/pkg/tsdb/grafana-pyroscope-datasource/**/*" ,
2023-09-22 07:00:40 -05:00
"**/pkg/tsdb/grafana-testdata-datasource/*" ,
"**/pkg/tsdb/grafana-testdata-datasource/**/*" ,
2024-01-03 13:20:22 -06:00
"**/pkg/tsdb/azuremonitor/*" ,
"**/pkg/tsdb/azuremonitor/**/*" ,
2024-01-29 10:24:23 -06:00
"**/pkg/tsdb/cloud-monitoring/*" ,
"**/pkg/tsdb/cloud-monitoring/**/*" ,
2024-04-15 07:26:15 -05:00
"**/pkg/tsdb/mysql/*" ,
"**/pkg/tsdb/mysql/**/*" ,
2024-01-02 09:36:57 -06:00
"**/pkg/tsdb/parca/*" ,
"**/pkg/tsdb/parca/**/*" ,
2024-01-16 04:36:40 -06:00
"**/pkg/tsdb/tempo/*" ,
"**/pkg/tsdb/tempo/**/*" ,
2024-02-20 07:52:11 -06:00
"**/pkg/tsdb/cloudwatch/*" ,
"**/pkg/tsdb/cloudwatch/**/*" ,
2023-09-22 07:00:40 -05:00
]
2023-07-18 08:57:31 -05:00
2024-03-25 12:15:36 -05:00
[ 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/**/*"
]
2024-08-13 14:28:17 -05:00
[ 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/**/*"
]
2024-03-25 11:32:56 -05:00
[ 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/**/*"
]
2024-08-21 13:32:01 -05:00
[ 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/**/*"
]
2024-09-13 15:27:40 -05:00
[ 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/**/*"
]
2020-12-11 04:45:17 -06:00
[ linters-settings . gocritic ]
enabled-checks = [ "ruleguard" ]
[ linters-settings . gocritic . settings . ruleguard ]
rules = "pkg/ruleguard.rules.go"
2024-06-06 12:01:27 -05:00
[ linters-settings . misspell ]
ignore-words = [ "Unknwon" , "Creater" ]
2023-07-18 03:03:35 -05:00
[ linters-settings . nakedret ]
max-func-lines = 60
2020-06-29 07:08:32 -05:00
[ linters ]
disable-all = true
2024-06-14 13:16:36 -05:00
# try to keep this list sorted, please
2020-06-29 07:08:32 -05:00
enable = [
2024-06-14 13:16:36 -05:00
"asciicheck" ,
2020-06-29 07:08:32 -05:00
"bodyclose" ,
"depguard" ,
"dogsled" ,
"errcheck" ,
2024-06-14 13:16:36 -05:00
"errorlint" ,
"exhaustive" ,
"exportloopref" ,
2020-06-29 07:08:32 -05:00
# "gochecknoinits",
2024-03-25 09:28:24 -05:00
# "goconst",
2022-09-12 05:03:49 -05:00
# "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?"
2024-06-14 13:16:36 -05:00
"gocyclo" ,
2020-06-29 07:08:32 -05:00
"goimports" ,
2020-07-23 01:14:39 -05:00
"goprintffuncname" ,
2020-06-29 07:08:32 -05:00
"gosec" ,
"gosimple" ,
"govet" ,
"ineffassign" ,
2020-07-17 06:44:33 -05:00
"misspell" ,
2020-07-23 01:14:39 -05:00
"nakedret" ,
2024-06-14 13:16:36 -05:00
"prealloc" ,
"revive" ,
2020-06-29 07:08:32 -05:00
"staticcheck" ,
2020-11-05 08:37:11 -06:00
"stylecheck" ,
2020-06-29 07:08:32 -05:00
"unconvert" ,
"unused" ,
2020-07-06 13:17:28 -05:00
"whitespace" ,
2020-06-29 07:08:32 -05:00
]
# Disabled linters (might want them later)
# "unparam"
2023-05-10 06:47:35 -05:00
# "rowserrcheck" # The linter doesn't detect that both Scan and Close also returns the error message returned by Err.
2020-06-29 07:08:32 -05:00
2020-12-15 02:32:06 -06:00
[ issues ]
exclude-use-default = false
2024-06-06 12:01:27 -05:00
max-same-issues = 0
2020-12-15 02:32:06 -06:00
2020-11-05 08:37:11 -06:00
# 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"
2022-09-12 05:03:49 -05:00
# Enable when appropriate
2023-07-14 14:22:10 -05:00
# 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"
2022-09-12 05:03:49 -05:00
# 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" ]
2022-12-14 05:32:45 -06:00
text = "SA1019: strings.Title"
2024-04-30 08:12:45 -05:00
# 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\""
2022-12-14 05:32:45 -06:00
[ [ issues . exclude-rules ] ]
linters = [ "staticcheck" ]
text = "use fake service and real access control evaluator instead"
2022-09-12 05:03:49 -05:00
2020-06-29 07:08:32 -05:00
[ [ 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"
2020-07-17 06:44:33 -05:00
2020-08-10 11:38:53 -05:00
[ [ issues . exclude-rules ] ]
linters = [ "gosec" ]
text = "404"
2020-11-19 07:47:17 -06:00
[ [ issues . exclude-rules ] ]
linters = [ "errorlint" ]
text = "non-wrapping format verb for fmt.Errorf"
2020-12-15 02:32:06 -06:00
# 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"
2024-03-25 09:28:24 -05:00
# 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"