v2: Project-and-CI-wide linter config (#2812)

* v2: split golangci-lint configuration into its own file to allow code editors to take advantage of it

* v2: simplify code

* v2: set the correct lint output formatting

* v2: invert the logic of linter's configuration of output formatting to allow the editor  convenience over CI-specific customization. Customize the output format in CI by passing the flag.

* v2: remove irrelevant golangci-lint config
This commit is contained in:
Mohammed Al Sahaf 2019-10-16 00:37:46 +03:00 committed by Matt Holt
parent abf5ab340e
commit e3726588b4
5 changed files with 52 additions and 4 deletions

49
.golangci.yml Normal file
View file

@ -0,0 +1,49 @@
linters-settings:
errcheck:
ignore: fmt:.*,io/ioutil:^Read.*,github.com/caddyserver/caddy/v2/caddyconfig:RegisterAdapter,github.com/caddyserver/caddy/v2:RegisterModule
ignoretests: true
misspell:
locale: US
linters:
enable:
- bodyclose
- errcheck
- gofmt
- goimports
- gosec
- ineffassign
- misspell
run:
# default concurrency is a available CPU number.
# concurrency: 4 # explicitly omit this value to fully utilize available resources.
deadline: 5m
issues-exit-code: 1
tests: false
# output configuration options
output:
format: 'colored-line-number'
print-issued-lines: true
print-linter-name: true
issues:
exclude-rules:
# we aren't calling unknown URL
- text: "G107" # G107: Url provided to HTTP request as taint input
linters:
- gosec
# as a web server that's expected to handle any template, this is totally in the hands of the user.
- text: "G203" # G203: Use of unescaped data in HTML templates
linters:
- gosec
# we're shelling out to known commands, not relying on user-defined input.
- text: "G204" # G204: Audit use of command execution
linters:
- gosec
# the choice of weakrand is deliberate, hence the named import "weakrand"
- path: modules/caddyhttp/reverseproxy/selectionpolicies.go
text: "G404" # G404: Insecure random number source (rand)
linters:
- gosec

View file

@ -89,7 +89,8 @@ steps:
displayName: Get dependencies displayName: Get dependencies
- script: | - script: |
(golangci-lint run --out-format junit-xml -E gofmt -E goimports -E misspell) > test-results/lint-result.xml # its behavior is governed by .golangci.yml
(golangci-lint run --out-format junit-xml) > test-results/lint-result.xml
exit 0 exit 0
workingDirectory: '$(modulePath)' workingDirectory: '$(modulePath)'
continueOnError: true continueOnError: true

View file

@ -107,7 +107,6 @@ func (l *lexer) next() bool {
escaped = false escaped = false
} else { } else {
if ch == '"' { if ch == '"' {
quoted = false
return makeToken() return makeToken()
} }
} }

View file

@ -118,7 +118,6 @@ func loadConfig(configFile, adapterName string) ([]byte, error) {
if os.IsNotExist(err) { if os.IsNotExist(err) {
// okay, no default Caddyfile; pretend like this never happened // okay, no default Caddyfile; pretend like this never happened
cfgAdapter = nil cfgAdapter = nil
err = nil
} else if err != nil { } else if err != nil {
// default Caddyfile exists, but error reading it // default Caddyfile exists, but error reading it
return nil, fmt.Errorf("reading default Caddyfile: %v", err) return nil, fmt.Errorf("reading default Caddyfile: %v", err)

View file

@ -169,7 +169,7 @@ func (s *Server) enforcementHandler(w http.ResponseWriter, r *http.Request, next
if err != nil { if err != nil {
hostname = r.Host // OK; probably lacked port hostname = r.Host // OK; probably lacked port
} }
if strings.ToLower(r.TLS.ServerName) != strings.ToLower(hostname) { if !strings.EqualFold(r.TLS.ServerName, hostname) {
err := fmt.Errorf("strict host matching: TLS ServerName (%s) and HTTP Host (%s) values differ", err := fmt.Errorf("strict host matching: TLS ServerName (%s) and HTTP Host (%s) values differ",
r.TLS.ServerName, hostname) r.TLS.ServerName, hostname)
r.Close = true r.Close = true