Skip to content
This repository was archived by the owner on Nov 14, 2024. It is now read-only.

Commit f4ddbf6

Browse files
authored
chore: add build infrastructure and linting (#2)
1 parent bd5f393 commit f4ddbf6

File tree

4 files changed

+254
-0
lines changed

4 files changed

+254
-0
lines changed

.golangci.yml

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
# See https://golangci-lint.run/usage/configuration/
2+
# Over time we should try tightening some of these.
3+
4+
linters-settings:
5+
goimports:
6+
local-prefixes: coder.com,cdr.dev,go.coder.com,github.com/cdr
7+
gomodguard:
8+
blocked:
9+
modules:
10+
- k8s.io/kubernetes:
11+
recommendations:
12+
- k8s.io/api
13+
- k8s.io/apimachinery
14+
- k8s.io/client-go
15+
- k8s.io/metrics
16+
- k8s.io/utils
17+
reason: >-
18+
Upstream does not support using k8s.io/kubernetes as a library,
19+
which can cause issues when upgrading. For more information, see
20+
https://github.com/kubernetes/kubernetes/issues/90358#issuecomment-617859364
21+
versions:
22+
# Enforce that the we follow the Kubernetes version support strategy
23+
- k8s.io/api:
24+
version: "< 0.19 || > 0.20"
25+
reason: >-
26+
Coder commits to supporting the newest patch release of the
27+
two prior minor releases and current release. For details, see
28+
https://www.notion.so/Kubernetes-version-support-strategy-82ecd5c9761e411e9dab61a7a1484418
29+
- k8s.io/apimachinery:
30+
version: "< 0.19 || > 0.20"
31+
reason: >-
32+
Coder commits to supporting the newest patch release of the
33+
two prior minor releases and current release. For details, see
34+
https://www.notion.so/Kubernetes-version-support-strategy-82ecd5c9761e411e9dab61a7a1484418
35+
- k8s.io/client-go:
36+
version: "< 0.19 || > 0.20"
37+
reason: >-
38+
Coder commits to supporting the newest patch release of the
39+
two prior minor releases and current release. For details, see
40+
https://www.notion.so/Kubernetes-version-support-strategy-82ecd5c9761e411e9dab61a7a1484418
41+
- k8s.io/metrics:
42+
version: "< 0.19 || > 0.20"
43+
reason: >-
44+
Coder commits to supporting the newest patch release of the
45+
two prior minor releases and current release. For details, see
46+
https://www.notion.so/Kubernetes-version-support-strategy-82ecd5c9761e411e9dab61a7a1484418
47+
local_replace_directives: true
48+
importas:
49+
# For the most part, these come from come from k8s.io/client-go,
50+
# particularly clientset.go. Even the official Kubernetes codebase
51+
# has conflicts, though.
52+
admissionregistrationv1: k8s.io/client-go/kubernetes/typed/admissionregistration/v1
53+
admissionregistrationv1beta1: k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1
54+
appsv1: k8s.io/client-go/kubernetes/typed/apps/v1
55+
appsv1beta1: k8s.io/client-go/kubernetes/typed/apps/v1beta1
56+
appsv1beta2: k8s.io/client-go/kubernetes/typed/apps/v1beta2
57+
authenticationv1: k8s.io/client-go/kubernetes/typed/authentication/v1
58+
authenticationv1beta1: k8s.io/client-go/kubernetes/typed/authentication/v1beta1
59+
authorizationv1: k8s.io/client-go/kubernetes/typed/authorization/v1
60+
authorizationv1beta1: k8s.io/client-go/kubernetes/typed/authorization/v1beta1
61+
autoscalingv1: k8s.io/client-go/kubernetes/typed/autoscaling/v1
62+
autoscalingv2beta1: k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1
63+
autoscalingv2beta2: k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2
64+
batchv1: k8s.io/client-go/kubernetes/typed/batch/v1
65+
batchv1beta1: k8s.io/client-go/kubernetes/typed/batch/v1beta1
66+
certificatesv1: k8s.io/client-go/kubernetes/typed/certificates/v1
67+
certificatesv1beta1: k8s.io/client-go/kubernetes/typed/certificates/v1beta1
68+
coordinationv1: k8s.io/client-go/kubernetes/typed/coordination/v1
69+
coordinationv1beta1: k8s.io/client-go/kubernetes/typed/coordination/v1beta1
70+
corev1: k8s.io/api/core/v1
71+
discovery: k8s.io/client-go/discovery
72+
discoveryv1: k8s.io/client-go/kubernetes/typed/discovery/v1
73+
discoveryv1beta1: k8s.io/client-go/kubernetes/typed/discovery/v1beta1
74+
eventsv1: k8s.io/client-go/kubernetes/typed/events/v1
75+
eventsv1beta1: k8s.io/client-go/kubernetes/typed/events/v1beta1
76+
extensionsv1beta1: k8s.io/client-go/kubernetes/typed/extensions/v1beta1
77+
flowcontrol: k8s.io/client-go/util/flowcontrol
78+
flowcontrolv1alpha1: k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1
79+
flowcontrolv1beta1: k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1
80+
internalv1alpha1: k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1
81+
metav1: k8s.io/apimachinery/pkg/apis/meta/v1
82+
networkingv1: k8s.io/client-go/kubernetes/typed/networking/v1
83+
networkingv1beta1: k8s.io/client-go/kubernetes/typed/networking/v1beta1
84+
nodev1: k8s.io/client-go/kubernetes/typed/node/v1
85+
nodev1alpha1: k8s.io/client-go/kubernetes/typed/node/v1alpha1
86+
nodev1beta1: k8s.io/client-go/kubernetes/typed/node/v1beta1
87+
policyv1: k8s.io/client-go/kubernetes/typed/policy/v1
88+
policyv1beta1: k8s.io/client-go/kubernetes/typed/policy/v1beta1
89+
rbacv1: k8s.io/client-go/kubernetes/typed/rbac/v1
90+
rbacv1alpha1: k8s.io/client-go/kubernetes/typed/rbac/v1alpha1
91+
rbacv1beta1: k8s.io/client-go/kubernetes/typed/rbac/v1beta1
92+
rest: k8s.io/client-go/rest
93+
schedulingv1: k8s.io/client-go/kubernetes/typed/scheduling/v1
94+
schedulingv1alpha1: k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1
95+
schedulingv1beta1: k8s.io/client-go/kubernetes/typed/scheduling/v1beta1
96+
storagev1: k8s.io/client-go/kubernetes/typed/storage/v1
97+
storagev1alpha1: k8s.io/client-go/kubernetes/typed/storage/v1alpha1
98+
storagev1beta1: k8s.io/client-go/kubernetes/typed/storage/v1beta1
99+
typedcorev1: k8s.io/client-go/kubernetes/typed/core/v1
100+
revive:
101+
# see https://github.com/mgechev/revive#available-rules for details.
102+
ignore-generated-header: true
103+
severity: warning
104+
rules:
105+
- name: atomic
106+
- name: bare-return
107+
- name: blank-imports
108+
- name: bool-literal-in-expr
109+
- name: call-to-gc
110+
- name: confusing-naming
111+
- name: confusing-results
112+
- name: constant-logical-expr
113+
- name: context-as-argument
114+
- name: context-keys-type
115+
- name: deep-exit
116+
- name: defer
117+
- name: dot-imports
118+
- name: duplicated-imports
119+
- name: early-return
120+
- name: empty-block
121+
- name: empty-lines
122+
- name: error-naming
123+
- name: error-return
124+
- name: error-strings
125+
- name: errorf
126+
- name: exported
127+
- name: flag-parameter
128+
- name: get-return
129+
- name: identical-branches
130+
- name: if-return
131+
- name: import-shadowing
132+
- name: increment-decrement
133+
- name: indent-error-flow
134+
- name: modifies-parameter
135+
- name: modifies-value-receiver
136+
- name: package-comments
137+
- name: range
138+
- name: range-val-address
139+
- name: range-val-in-closure
140+
- name: receiver-naming
141+
- name: redefines-builtin-id
142+
- name: string-of-int
143+
- name: struct-tag
144+
- name: superfluous-else
145+
- name: time-naming
146+
- name: unconditional-recursion
147+
- name: unexported-naming
148+
- name: unexported-return
149+
- name: unhandled-error
150+
- name: unnecessary-stmt
151+
- name: unreachable-code
152+
- name: unused-parameter
153+
- name: unused-receiver
154+
- name: var-declaration
155+
- name: var-naming
156+
- name: waitgroup-by-value
157+
158+
issues:
159+
exclude-rules:
160+
- path: _test\.go
161+
linters:
162+
# We use assertions rather than explicitly checking errors in tests
163+
- errcheck
164+
165+
fix: true
166+
max-issues-per-linter: 0
167+
max-same-issues: 0
168+
169+
run:
170+
timeout: 5m
171+
172+
# Over time, add more and more linters from
173+
# https://golangci-lint.run/usage/linters/ as the code improves.
174+
linters:
175+
disable-all: true
176+
enable:
177+
- bodyclose
178+
- deadcode
179+
- dogsled
180+
- errcheck
181+
- errorlint
182+
- exportloopref
183+
- forcetypeassert
184+
- gocyclo
185+
- goimports
186+
- gomodguard
187+
- gosec
188+
- gosimple
189+
- govet
190+
- importas
191+
- ineffassign
192+
- makezero
193+
- noctx
194+
- revive
195+
- rowserrcheck
196+
- sqlclosecheck
197+
- staticcheck
198+
- structcheck
199+
- typecheck
200+
- unconvert
201+
- unused
202+
- varcheck
203+
- wastedassign

Makefile

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
PROJECT_ROOT := $(shell git rev-parse --show-toplevel)
2+
GO_FILES := $(shell $(PROJECT_ROOT)/scripts/depfind/go.sh)
3+
4+
fmt/go:
5+
# Skip this step in CI, golangci-lint will check formatting
6+
ifndef CI
7+
@echo "--- goimports"
8+
git ls-files '*.go' | xargs -I % -n 16 -P 16 goimports -w -local=coder.com,cdr.dev,go.coder.com,github.com/cdr
9+
endif
10+
.PHONY: fmt/go
11+
12+
fmt: fmt/go
13+
.PHONY: fmt
14+
15+
lint/go: lint/golangci-lint
16+
.PHONY: lint/go
17+
18+
lint/golangci-lint:
19+
@echo "--- golangci-lint"
20+
golangci-lint run
21+
.PHONY: lint/golangci-lint
22+
23+
lint/shellcheck: $(shell scripts/depfind/sh.sh)
24+
@echo "--- shellcheck"
25+
shellcheck $^
26+
.PHONY: lint/shellcheck
27+
28+
lint: lint/go lint/shellcheck
29+
.PHONY: lint

scripts/depfind/go.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env bash
2+
3+
builtin set -euo pipefail
4+
PROJECT_ROOT="$(git rev-parse --show-toplevel)"
5+
6+
builtin pushd "$PROJECT_ROOT" > /dev/null
7+
git ls-files --full-name -- \
8+
'*.go' \
9+
'*.sum' | \
10+
xargs -IX echo "$PROJECT_ROOT/X"
11+
builtin popd > /dev/null

scripts/depfind/sh.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env bash
2+
3+
builtin set -euo pipefail
4+
PROJECT_ROOT="$(git rev-parse --show-toplevel)"
5+
6+
builtin pushd "$PROJECT_ROOT" > /dev/null
7+
git ls-files --full-name -- \
8+
'.husky' \
9+
'*.sh' | \
10+
xargs -IX echo "$PROJECT_ROOT/X"
11+
builtin popd > /dev/null

0 commit comments

Comments
 (0)