mirror of https://github.com/coder/coder.git
chore: Add golangci-lint and codecov (#3)
* chore: Add golangci-lint and codecov * Use consistent file names * Format settings.json * Add golangci-lint and codecov GitHub Actions * Add base Go file for linting * Add test coverage
This commit is contained in:
parent
78973eaf3f
commit
a6b2dd76a0
|
@ -28,6 +28,16 @@ permissions:
|
|||
statuses: none
|
||||
|
||||
jobs:
|
||||
style-lint-golangci:
|
||||
name: style/lint/golangci
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: golangci-lint
|
||||
uses: golangci/golangci-lint-action@v2
|
||||
with:
|
||||
version: latest
|
||||
|
||||
style:
|
||||
name: "style/${{ matrix.style }}"
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -81,9 +91,17 @@ jobs:
|
|||
with:
|
||||
go-version: "^1.17"
|
||||
|
||||
# Check that go is available
|
||||
# TODO: Implement actual test run
|
||||
- run: go version
|
||||
- run: go install gotest.tools/gotestsum@latest
|
||||
|
||||
# Windows is not happy with backslashed commands.
|
||||
- run: gotestsum --jsonfile="gotests.json" --packages="./..." -- -covermode=atomic -coverprofile="gotests.coverage"
|
||||
|
||||
- uses: codecov/codecov-action@v2
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./gotests.coverage
|
||||
flags: ${{ matrix.os }}
|
||||
fail_ci_if_error: true
|
||||
|
||||
test-js:
|
||||
name: "test/js"
|
||||
|
|
|
@ -0,0 +1,258 @@
|
|||
# See https://golangci-lint.run/usage/configuration/
|
||||
# Over time we should try tightening some of these.
|
||||
|
||||
linters-settings:
|
||||
gocognit:
|
||||
min-complexity: 46 # Min code complexity (def 30).
|
||||
|
||||
goconst:
|
||||
min-len: 4 # Min length of string consts (def 3).
|
||||
min-occurrences: 3 # Min number of const occurrences (def 3).
|
||||
|
||||
gocritic:
|
||||
enabled-checks:
|
||||
# - appendAssign
|
||||
# - appendCombine
|
||||
- argOrder
|
||||
# - assignOp
|
||||
# - badCall
|
||||
- badCond
|
||||
- badLock
|
||||
- badRegexp
|
||||
- boolExprSimplify
|
||||
# - builtinShadow
|
||||
- builtinShadowDecl
|
||||
- captLocal
|
||||
- caseOrder
|
||||
- codegenComment
|
||||
# - commentedOutCode
|
||||
- commentedOutImport
|
||||
# - commentFormatting
|
||||
- defaultCaseOrder
|
||||
- deferUnlambda
|
||||
# - deprecatedComment
|
||||
# - docStub
|
||||
- dupArg
|
||||
- dupBranchBody
|
||||
- dupCase
|
||||
- dupImport
|
||||
- dupSubExpr
|
||||
# - elseif
|
||||
- emptyFallthrough
|
||||
# - emptyStringTest
|
||||
# - equalFold
|
||||
# - evalOrder
|
||||
# - exitAfterDefer
|
||||
# - exposedSyncMutex
|
||||
# - filepathJoin
|
||||
- flagDeref
|
||||
- flagName
|
||||
- hexLiteral
|
||||
# - httpNoBody
|
||||
# - hugeParam
|
||||
# - ifElseChain
|
||||
# - importShadow
|
||||
- indexAlloc
|
||||
- initClause
|
||||
# - ioutilDeprecated
|
||||
- mapKey
|
||||
- methodExprCall
|
||||
# - nestingReduce
|
||||
- newDeref
|
||||
- nilValReturn
|
||||
# - octalLiteral
|
||||
- offBy1
|
||||
# - paramTypeCombine
|
||||
# - preferStringWriter
|
||||
# - preferWriteByte
|
||||
# - ptrToRefParam
|
||||
# - rangeExprCopy
|
||||
# - rangeValCopy
|
||||
- regexpMust
|
||||
- regexpPattern
|
||||
# - regexpSimplify
|
||||
- ruleguard
|
||||
- singleCaseSwitch
|
||||
- sloppyLen
|
||||
# - sloppyReassign
|
||||
- sloppyTypeAssert
|
||||
- sortSlice
|
||||
# - sprintfQuotedString
|
||||
- sqlQuery
|
||||
# - stringConcatSimplify
|
||||
# - stringXbytes
|
||||
# - suspiciousSorting
|
||||
- switchTrue
|
||||
- truncateCmp
|
||||
- typeAssertChain
|
||||
# - typeDefFirst
|
||||
- typeSwitchVar
|
||||
# - typeUnparen
|
||||
- underef
|
||||
# - unlabelStmt
|
||||
# - unlambda
|
||||
# - unnamedResult
|
||||
# - unnecessaryBlock
|
||||
# - unnecessaryDefer
|
||||
# - unslice
|
||||
- valSwap
|
||||
- weakCond
|
||||
# - whyNoLint
|
||||
# - wrapperFunc
|
||||
# - yodaStyleExpr
|
||||
settings:
|
||||
ruleguard:
|
||||
failOn: all
|
||||
rules: "${configDir}/lib/go/lintrules/*.go"
|
||||
|
||||
goimports:
|
||||
local-prefixes: coder.com,cdr.dev,go.coder.com,github.com/cdr,github.com/coder
|
||||
|
||||
gocyclo:
|
||||
min-complexity: 50
|
||||
|
||||
importas:
|
||||
no-unaliased: true
|
||||
alias:
|
||||
- pkg: k8s.io/api/(\w+)/(v[\w\d]+)
|
||||
alias: ${1}${2}
|
||||
|
||||
- pkg: k8s.io/apimachinery/pkg/apis/meta/(v[\w\d]+)
|
||||
alias: meta${1}
|
||||
|
||||
- pkg: k8s.io/client-go/kubernetes/typed/(\w+)/(v[\w\d]+)
|
||||
alias: ${1}${2}client
|
||||
|
||||
- pkg: k8s.io/metrics/pkg/apis/metrics/(v[\w\d]+)
|
||||
alias: metrics${1}
|
||||
|
||||
- pkg: github.com/docker/docker/api/types
|
||||
alias: dockertypes
|
||||
|
||||
- pkg: github.com/docker/docker/client
|
||||
alias: dockerclient
|
||||
|
||||
misspell:
|
||||
locale: US
|
||||
|
||||
nestif:
|
||||
min-complexity: 4 # Min complexity of if statements (def 5, goal 4)
|
||||
|
||||
revive:
|
||||
# see https://github.com/mgechev/revive#available-rules for details.
|
||||
ignore-generated-header: true
|
||||
severity: warning
|
||||
rules:
|
||||
- name: atomic
|
||||
- name: bare-return
|
||||
- name: blank-imports
|
||||
- name: bool-literal-in-expr
|
||||
- name: call-to-gc
|
||||
- name: confusing-naming
|
||||
- name: confusing-results
|
||||
- name: constant-logical-expr
|
||||
- name: context-as-argument
|
||||
- name: context-keys-type
|
||||
- name: deep-exit
|
||||
- name: defer
|
||||
- name: dot-imports
|
||||
- name: duplicated-imports
|
||||
- name: early-return
|
||||
- name: empty-block
|
||||
- name: empty-lines
|
||||
- name: error-naming
|
||||
- name: error-return
|
||||
- name: error-strings
|
||||
- name: errorf
|
||||
- name: exported
|
||||
- name: flag-parameter
|
||||
- name: get-return
|
||||
- name: identical-branches
|
||||
- name: if-return
|
||||
- name: import-shadowing
|
||||
- name: increment-decrement
|
||||
- name: indent-error-flow
|
||||
- name: modifies-parameter
|
||||
- name: modifies-value-receiver
|
||||
- name: package-comments
|
||||
- name: range
|
||||
- name: range-val-address
|
||||
- name: range-val-in-closure
|
||||
- name: receiver-naming
|
||||
- name: redefines-builtin-id
|
||||
- name: string-of-int
|
||||
- name: struct-tag
|
||||
- name: superfluous-else
|
||||
- name: time-naming
|
||||
- name: unconditional-recursion
|
||||
- name: unexported-naming
|
||||
- name: unexported-return
|
||||
- name: unhandled-error
|
||||
- name: unnecessary-stmt
|
||||
- name: unreachable-code
|
||||
- name: unused-parameter
|
||||
- name: unused-receiver
|
||||
- name: var-declaration
|
||||
- name: var-naming
|
||||
- name: waitgroup-by-value
|
||||
|
||||
issues:
|
||||
# Rules listed here: https://github.com/securego/gosec#available-rules
|
||||
exclude-rules:
|
||||
- path: _test\.go
|
||||
linters:
|
||||
# We use assertions rather than explicitly checking errors in tests
|
||||
- errcheck
|
||||
|
||||
fix: true
|
||||
max-issues-per-linter: 0
|
||||
max-same-issues: 0
|
||||
|
||||
run:
|
||||
concurrency: 4
|
||||
skip-dirs:
|
||||
- node_modules
|
||||
timeout: 5m
|
||||
|
||||
# Over time, add more and more linters from
|
||||
# https://golangci-lint.run/usage/linters/ as the code improves.
|
||||
linters:
|
||||
disable-all: true
|
||||
enable:
|
||||
- asciicheck
|
||||
- bidichk
|
||||
- bodyclose
|
||||
- contextcheck
|
||||
- deadcode
|
||||
- dogsled
|
||||
- errcheck
|
||||
- errname
|
||||
- errorlint
|
||||
- exportloopref
|
||||
- forcetypeassert
|
||||
- gocritic
|
||||
- gocyclo
|
||||
- goimports
|
||||
- gomodguard
|
||||
- gosec
|
||||
- gosimple
|
||||
- govet
|
||||
- importas
|
||||
- ineffassign
|
||||
# - ireturn
|
||||
- makezero
|
||||
- misspell
|
||||
- nilnil
|
||||
- noctx
|
||||
- revive
|
||||
- rowserrcheck
|
||||
- sqlclosecheck
|
||||
- staticcheck
|
||||
- structcheck
|
||||
- tenv
|
||||
- typecheck
|
||||
- unconvert
|
||||
- unused
|
||||
- varcheck
|
||||
- varnamelen
|
||||
- wastedassign
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"go.lintTool": "golangci-lint",
|
||||
"go.lintFlags": ["--fast"],
|
||||
"go.lintOnSave": "package",
|
||||
"go.coverOnSave": true,
|
||||
"go.coverageDecorator": {
|
||||
"type": "gutter",
|
||||
"coveredHighlightColor": "rgba(64,128,128,0.5)",
|
||||
"uncoveredHighlightColor": "rgba(128,64,64,0.25)",
|
||||
"coveredBorderColor": "rgba(64,128,128,0.5)",
|
||||
"uncoveredBorderColor": "rgba(128,64,64,0.25)",
|
||||
"coveredGutterStyle": "blockgreen",
|
||||
"uncoveredGutterStyle": "blockred"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello World!")
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
codecov:
|
||||
require_ci_to_pass: false
|
||||
|
||||
comment:
|
||||
show_carryforward_flags: yes
|
||||
|
||||
coverage:
|
||||
notify:
|
||||
slack:
|
||||
default:
|
||||
url: secret:v1::ALa1/e2X+k36fPseab5D7+kBFc9bJyIoIQioD0IMA5jr+0HXVpBRNDCHZhHjCdGc67yff6PPixPEOLwEZpxC37rM23RBZOYlqAq9A5e0MeZVlEoVq19aOYN4Xel17hMJ6GGm7n17wrYpCpcvlVSqNrN0+cr3guVDyG10kQyfh2Y=
|
||||
threshold: 1%
|
||||
only_pulls: false
|
||||
branches:
|
||||
- "main"
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
target: 80%
|
||||
informational: yes
|
Loading…
Reference in New Issue