Add golint to the Dockerfile, and a `validate-lint` task to the
Makefile. Currently, the linter will process a harcoded list of packages
that will expand as we fix more warnings. Eventually, the linter should
process all subpackages of the repo (excluding vendored code).
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
... | ... |
@@ -117,6 +117,11 @@ RUN git clone https://github.com/golang/tools.git /go/src/golang.org/x/tools \ |
117 | 117 |
&& (cd /go/src/golang.org/x/tools && git checkout -q $GO_TOOLS_COMMIT) \ |
118 | 118 |
&& go install -v golang.org/x/tools/cmd/cover \ |
119 | 119 |
&& go install -v golang.org/x/tools/cmd/vet |
120 |
+# Grab Go's lint tool |
|
121 |
+ENV GO_LINT_COMMIT f42f5c1c440621302702cb0741e9d2ca547ae80f |
|
122 |
+RUN git clone https://github.com/golang/lint.git /go/src/github.com/golang/lint \ |
|
123 |
+ && (cd /go/src/github.com/golang/lint && git checkout -q $GO_LINT_COMMIT) \ |
|
124 |
+ && go install -v github.com/golang/lint/golint |
|
120 | 125 |
|
121 | 126 |
# TODO replace FPM with some very minimal debhelper stuff |
122 | 127 |
RUN gem install --no-rdoc --no-ri fpm --version 1.3.2 |
... | ... |
@@ -65,7 +65,7 @@ test-docker-py: build |
65 | 65 |
$(DOCKER_RUN_DOCKER) hack/make.sh binary test-docker-py |
66 | 66 |
|
67 | 67 |
validate: build |
68 |
- $(DOCKER_RUN_DOCKER) hack/make.sh validate-dco validate-gofmt validate-pkg validate-test validate-toml validate-vet |
|
68 |
+ $(DOCKER_RUN_DOCKER) hack/make.sh validate-dco validate-gofmt validate-pkg validate-lint validate-test validate-toml validate-vet |
|
69 | 69 |
|
70 | 70 |
shell: build |
71 | 71 |
$(DOCKER_RUN_DOCKER) bash |
72 | 72 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,51 @@ |
0 |
+#!/bin/bash |
|
1 |
+ |
|
2 |
+source "${MAKEDIR}/.validate" |
|
3 |
+ |
|
4 |
+# We will eventually get to the point when packages should be the complete list |
|
5 |
+# of subpackages, vendoring excluded, as given by: |
|
6 |
+# go list ./... | grep -v "^github.com/docker/docker/vendor" |
|
7 |
+packages=( |
|
8 |
+ builder/parser/dumper |
|
9 |
+ daemon/events |
|
10 |
+ daemon/execdriver/native/template |
|
11 |
+ daemon/network |
|
12 |
+ cliconfig |
|
13 |
+ docker |
|
14 |
+ dockerinit |
|
15 |
+ pkg/chrootarchive |
|
16 |
+ pkg/directory |
|
17 |
+ pkg/fileutils |
|
18 |
+ pkg/homedir |
|
19 |
+ pkg/listenbuffer |
|
20 |
+ pkg/mflag/example |
|
21 |
+ pkg/promise |
|
22 |
+ pkg/pubsub |
|
23 |
+ pkg/random |
|
24 |
+ pkg/symlink |
|
25 |
+ pkg/timeutils |
|
26 |
+ pkg/tlsconfig |
|
27 |
+ pkg/urlutil |
|
28 |
+ pkg/version |
|
29 |
+) |
|
30 |
+ |
|
31 |
+errors=() |
|
32 |
+for p in "$packages"; do |
|
33 |
+ failedLint=$(golint "github.com/docker/docker/$p") |
|
34 |
+ if [ "$failedLint" ]; then |
|
35 |
+ errors+=( "$failedLint" ) |
|
36 |
+ fi |
|
37 |
+done |
|
38 |
+ |
|
39 |
+if [ ${#errors[@]} -eq 0 ]; then |
|
40 |
+ echo 'Congratulations! All Go source files have been linted.' |
|
41 |
+else |
|
42 |
+ { |
|
43 |
+ echo "Errors from golint:" |
|
44 |
+ echo "${errors[@]}" |
|
45 |
+ echo |
|
46 |
+ echo 'Please fix the above errors. You can test via "golint" and commit the result.' |
|
47 |
+ echo |
|
48 |
+ } >&2 |
|
49 |
+ false |
|
50 |
+fi |