linters-settings:
  gofmt:
    simplify: true
    rewrite-rules:
      - pattern: interface{}
        replacement: any
  misspell:
    locale: US
  gofumpt:
    extra-rules: true
  forbidigo:
    forbid:
      - context\.WithCancel$
      - ^print.*$
      - panic
      - ^log.Fatal().*$
  errorlint:
    errorf-multi: true
  depguard:
    rules:
      pipeline:
        list-mode: lax
        files:
          - '**/pipeline/**/*.go'
          - '**/pipeline/*.go'
          - '!**/cli/pipeline/*.go'
          - '!**/cli/pipeline/**/*.go'
          - '!**/server/pipeline/*.go'
          - '!**/server/pipeline/**/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web'
      shared:
        list-mode: lax
        files:
          - '**/shared/**/*.go'
          - '**/shared/*.go'
          - '!**/pipeline/shared/*.go'
          - '!**/pipeline/shared/**/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/pipeline'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web'
      woodpecker-go:
        list-mode: lax
        files:
          - '**/woodpecker-go/woodpecker/**/*.go'
          - '**/woodpecker-go/woodpecker/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/pipeline'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/shared'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web'
      agent:
        list-mode: lax
        files:
          - '**/agent/**/*.go'
          - '**/agent/*.go'
          - '**/cmd/agent/**/*.go'
          - '**/cmd/agent/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker'
      cli:
        list-mode: lax
        files:
          - '**/cli/**/*.go'
          - '**/cli/*.go'
          - '**/cmd/cli/**/*.go'
          - '**/cmd/cli/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/server'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web'
      server:
        list-mode: lax
        files:
          - '**/server/**/*.go'
          - '**/server/*.go'
          - '**/cmd/server/**/*.go'
          - '**/cmd/server/*.go'
          - '**/web/**/*.go'
          - '**/web/*.go'
        deny:
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/agent'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/cli'
          - pkg: 'go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker'
  gci:
    custom-order: true
    sections:
      - standard
      - default
      - prefix(go.woodpecker-ci.org/woodpecker)
  mnd:
    ignored-numbers:
      - '0o600'
      - '0o660'
      - '0o644'
      - '0o755'
      - '0o700'
    ignored-functions:
      - make
      - time.*
      - strings.Split
      - callerName
      - securecookie.GenerateRandomKey
  godot:
    scope: toplevel
    period: true
    capital: true
    exclude:
      - '^\s*cSpell:'
      - '^\s*TODO:'

linters:
  disable-all: true
  enable:
    - bidichk
    - errcheck
    - gofmt
    - gosimple
    - govet
    - ineffassign
    - misspell
    - revive
    - staticcheck
    - typecheck
    - unused
    - gofumpt
    - errorlint
    - forbidigo
    - zerologlint
    - depguard
    - asciicheck
    - bodyclose
    - dogsled
    - durationcheck
    - errchkjson
    - gochecknoinits
    - goheader
    - gomoddirectives
    - gomodguard
    - goprintffuncname
    - importas
    - makezero
    - rowserrcheck
    - sqlclosecheck
    - tenv
    - unconvert
    - unparam
    - wastedassign
    - whitespace
    - gocritic
    - nolintlint
    - stylecheck
    - contextcheck
    - forcetypeassert
    - gci
    - mnd
    - godot

issues:
  exclude-rules:
    - path: 'fixtures|cmd/agent/flags.go|cmd/server/flags.go|pipeline/backend/kubernetes/flags.go|_test.go'
      linters:
        - mnd

run:
  timeout: 15m
  build-tags:
    - test
