mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
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:
@@ -28,6 +28,16 @@ permissions:
|
|||||||
statuses: none
|
statuses: none
|
||||||
|
|
||||||
jobs:
|
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:
|
style:
|
||||||
name: "style/${{ matrix.style }}"
|
name: "style/${{ matrix.style }}"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -81,9 +91,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version: "^1.17"
|
go-version: "^1.17"
|
||||||
|
|
||||||
# Check that go is available
|
- run: go install gotest.tools/gotestsum@latest
|
||||||
# TODO: Implement actual test run
|
|
||||||
- run: go version
|
# 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:
|
test-js:
|
||||||
name: "test/js"
|
name: "test/js"
|
||||||
|
|||||||
+258
@@ -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
|
||||||
Vendored
+15
@@ -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!")
|
||||||
|
}
|
||||||
+20
@@ -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
|
||||||
Reference in New Issue
Block a user