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