1
1
version : 2.1
2
2
3
- orbs :
4
- golang : cci-orb/golang@volatile
5
- codecov :
codecov/[email protected]
6
-
7
3
executors :
8
4
golang :
5
+ parameters :
6
+ go-version :
7
+ type : string
9
8
docker :
10
- - image : golang:1.16-buster
11
- auth :
12
- username : $DOCKERHUB_USER
13
- password : $DOCKERHUB_PASSWORD
9
+ - image : " golang:<< parameters.go-version >>-buster"
10
+ environment :
11
+ CODOCOV_VERSION : v0.1.0_5313
14
12
working_directory : /go/src/go.lsp.dev/protocol
15
13
16
14
command_vars :
17
- - cache_key : &cache_key v1- go-mod -{{ checksum "go.mod" }}-{{ checksum "go.sum" }}
18
- - cache_tools_key : &cache_tools_key v1- go-tools -{{ checksum "tools/go.mod" }}-{{ checksum "tools/go.sum" }}
15
+ - cache_key : &cache_key gomod-<< parameters. go-version >> -{{ checksum "go.mod" }}-{{ checksum "go.sum" }}-2ptat08qmr4k
16
+ - cache_tools_key : &cache_tools_key tools-<< parameters. go-version >> -{{ checksum "tools/go.mod" }}-{{ checksum "tools/go.sum" }}-2ptat08qmr4k
19
17
20
18
commands :
21
19
restore_dependencies :
20
+ parameters :
21
+ go-version :
22
+ type : string
22
23
steps :
24
+ - restore_cache :
25
+ name : " Restore module dependencies cache"
26
+ keys :
27
+ - *cache_key
23
28
- restore_cache :
24
29
name : " Restore dependencies tools"
25
30
keys :
26
31
- *cache_tools_key
32
+ - run :
33
+ name : " Download project modules"
34
+ command : |
35
+ go mod download
27
36
28
37
save_dependencies :
38
+ parameters :
39
+ go-version :
40
+ type : string
29
41
steps :
42
+ - save_cache :
43
+ name : " Save module cache"
44
+ key : *cache_key
45
+ paths :
46
+ - /go/pkg/mod/cache
30
47
- save_cache :
31
48
name : " Save dependencies tools"
32
49
key : *cache_tools_key
33
50
paths :
34
- - /go/src/go.lsp.dev/protocol/tools/bin/
35
- - persist_to_workspace :
36
- name : " Persist dependencies tools"
37
- root : " /go"
38
- paths :
39
- - src/go.lsp.dev/protocol/tools/bin
51
+ - /go/bin/
52
+ - run :
53
+ name : " go mod vendor"
54
+ command : |
55
+ go mod vendor
40
56
41
57
install_tools :
42
58
steps :
43
59
- run :
44
- name : " Download dependency tools"
60
+ name : " Build project tools"
45
61
command : |
46
- if [ -z $(find ./tools /bin/ -mindepth 1 -type f -executable | head -1) ]; then
47
- make -j${CPUS} tools
62
+ if [ -z $(find /go /bin/ -mindepth 1 -type f | head -1) ]; then
63
+ make -j${CPUS} tools GOBIN=/go/bin
48
64
fi
49
65
50
66
setup :
@@ -55,51 +71,51 @@ commands:
55
71
command : |
56
72
go version
57
73
go env
58
- - restore_cache :
59
- name : " Restore module cache"
60
- keys :
61
- - *cache_key
62
- - run :
63
- name : " Download modules"
64
- command : |
65
- go mod download
74
+ - attach_workspace :
75
+ name : " Attach vendor directory and dependencies tools"
76
+ at : " /go"
66
77
- run :
67
- name : " Run go mod vendor"
78
+ name : " go mod vendor"
68
79
command : |
69
80
go mod vendor
70
81
- run :
71
82
name : " Parse CPUs"
72
83
command : |
73
84
# https://circleci.com/changelog#container-cgroup-limits-now-visible-inside-the-docker-executor
74
85
CPUS="$(echo $(($(cat /sys/fs/cgroup/cpu/cpu.shares) / 1024)))"
75
- echo "export CPUS=${CPUS}" >> $BASH_ENV
76
-
77
- set_goflags :
78
- steps :
79
- - run :
80
- name : " Set GOFLAGS"
81
- command : |
82
86
echo "export GOFLAGS='-p=${CPUS} -cpu=${CPUS}'" >> $BASH_ENV
83
87
84
88
jobs :
85
89
tools :
86
- executor : golang
87
- resource_class : large
90
+ parameters :
91
+ go-version :
92
+ type : string
93
+ executor :
94
+ name : golang
95
+ go-version : " << parameters.go-version >>"
96
+ resource_class : xlarge
88
97
steps :
89
98
- checkout
90
- - restore_dependencies
99
+ - restore_dependencies :
100
+ go-version : " << parameters.go-version >>"
91
101
- install_tools
92
- - save_dependencies
102
+ - save_dependencies :
103
+ go-version : " << parameters.go-version >>"
104
+ - persist_to_workspace :
105
+ root : /go
106
+ paths :
107
+ - bin
108
+ - pkg/mod/cache
93
109
94
110
test :
95
- executor : golang
111
+ parameters :
112
+ go-version :
113
+ type : string
114
+ executor :
115
+ name : golang
116
+ go-version : " << parameters.go-version >>"
96
117
resource_class : xlarge
97
- parallelism : 2
98
118
steps :
99
- - attach_workspace :
100
- name : " Attach tools"
101
- at : " /go"
102
- - set_goflags
103
119
- run :
104
120
name : Test and take a coverage
105
121
environment :
@@ -108,57 +124,78 @@ jobs:
108
124
GOTESTSUM_JSONFILE : /tmp/test-results/tests.json
109
125
command : |
110
126
mkdir -p /tmp/test-results
111
- make $(circleci tests split .circleci/coverage-targets)
112
- - save_cache :
113
- name : " Save module cache"
114
- key : *cache_key
115
- paths :
116
- - /go/pkg/mod/cache
117
- - codecov/upload :
118
- file : " coverage.out"
119
- flags : $(if [ $CIRCLE_NODE_INDEX == 0 ]; then echo "json"; else echo "gojay"; fi)
127
+ make coverage
128
+ - run :
129
+ name : Upload coverage result to Codecov
120
130
when : on_success
131
+ command : |
132
+ curl -sLO https://github.com/codecov/uploader/releases/download/${CODOCOV_VERSION}/codecov-linux
133
+ chmod +x codecov-linux
134
+ ./codecov-linux --file coverage.out --flags $(go env GOOS)-<< parameters.go-version >>
121
135
122
136
lint :
123
- executor : golang
124
- resource_class : xlarge
125
- parallelism : 2
137
+ parameters :
138
+ go-version :
139
+ type : string
140
+ executor :
141
+ name : golang
142
+ go-version : " << parameters.go-version >>"
143
+ resource_class : large
126
144
steps :
127
- - attach_workspace :
128
- name : " Attach tools"
129
- at : " /go"
130
145
- run :
131
146
name : Run fmt and lint for sources
132
147
command : |
133
- make lint GO_LINT_FLAGS="$(circleci tests split .circleci/lint-buildtags)" JOBS=${CPUS}
134
- - save_cache :
135
- name : " Save module cache"
136
- key : *cache_key
137
- paths :
138
- - /go/pkg/mod/cache
148
+ make lint
149
+ git add -N . && git diff --exit-code
139
150
140
151
workflows :
141
152
version : 2
142
- workflows :
153
+ go1.16 :
143
154
jobs :
144
155
- tools :
145
- context : org-global
146
-
156
+ name : go1.16-tools
157
+ go-version : " 1.16 "
147
158
- test :
148
- context : org-global
159
+ name : go1.16-test
160
+ go-version : " 1.16"
149
161
requires :
150
- - tools
162
+ - go1.16- tools
151
163
pre-steps :
152
164
- setup
153
165
post-steps :
154
166
- store_test_results :
155
167
path : /tmp/test-results
156
168
- store_artifacts :
157
169
path : /tmp/test-results
170
+ - lint :
171
+ name : go1.16-lint
172
+ go-version : " 1.16"
173
+ requires :
174
+ - go1.16-tools
175
+ pre-steps :
176
+ - setup
158
177
178
+ go1.17 :
179
+ jobs :
180
+ - tools :
181
+ name : go1.17-tools
182
+ go-version : " 1.17-rc"
183
+ - test :
184
+ name : go1.17-test
185
+ go-version : " 1.17-rc"
186
+ requires :
187
+ - go1.17-tools
188
+ pre-steps :
189
+ - setup
190
+ post-steps :
191
+ - store_test_results :
192
+ path : /tmp/test-results
193
+ - store_artifacts :
194
+ path : /tmp/test-results
159
195
- lint :
160
- context : org-global
196
+ name : go1.17-lint
197
+ go-version : " 1.17-rc"
161
198
requires :
162
- - tools
199
+ - go1.17- tools
163
200
pre-steps :
164
201
- setup
0 commit comments