Skip to content

Commit 16f718d

Browse files
committed
circleci: update circleci config
Signed-off-by: Koichi Shiraishi <[email protected]>
1 parent d33fc40 commit 16f718d

File tree

1 file changed

+110
-73
lines changed

1 file changed

+110
-73
lines changed

.circleci/config.yml

Lines changed: 110 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,66 @@
11
version: 2.1
22

3-
orbs:
4-
golang: cci-orb/golang@volatile
5-
codecov: codecov/[email protected]
6-
73
executors:
84
golang:
5+
parameters:
6+
go-version:
7+
type: string
98
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
1412
working_directory: /go/src/go.lsp.dev/protocol
1513

1614
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
1917

2018
commands:
2119
restore_dependencies:
20+
parameters:
21+
go-version:
22+
type: string
2223
steps:
24+
- restore_cache:
25+
name: "Restore module dependencies cache"
26+
keys:
27+
- *cache_key
2328
- restore_cache:
2429
name: "Restore dependencies tools"
2530
keys:
2631
- *cache_tools_key
32+
- run:
33+
name: "Download project modules"
34+
command: |
35+
go mod download
2736
2837
save_dependencies:
38+
parameters:
39+
go-version:
40+
type: string
2941
steps:
42+
- save_cache:
43+
name: "Save module cache"
44+
key: *cache_key
45+
paths:
46+
- /go/pkg/mod/cache
3047
- save_cache:
3148
name: "Save dependencies tools"
3249
key: *cache_tools_key
3350
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
4056
4157
install_tools:
4258
steps:
4359
- run:
44-
name: "Download dependency tools"
60+
name: "Build project tools"
4561
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
4864
fi
4965
5066
setup:
@@ -55,51 +71,51 @@ commands:
5571
command: |
5672
go version
5773
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"
6677
- run:
67-
name: "Run go mod vendor"
78+
name: "go mod vendor"
6879
command: |
6980
go mod vendor
7081
- run:
7182
name: "Parse CPUs"
7283
command: |
7384
# https://circleci.com/changelog#container-cgroup-limits-now-visible-inside-the-docker-executor
7485
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: |
8286
echo "export GOFLAGS='-p=${CPUS} -cpu=${CPUS}'" >> $BASH_ENV
8387
8488
jobs:
8589
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
8897
steps:
8998
- checkout
90-
- restore_dependencies
99+
- restore_dependencies:
100+
go-version: "<< parameters.go-version >>"
91101
- 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
93109

94110
test:
95-
executor: golang
111+
parameters:
112+
go-version:
113+
type: string
114+
executor:
115+
name: golang
116+
go-version: "<< parameters.go-version >>"
96117
resource_class: xlarge
97-
parallelism: 2
98118
steps:
99-
- attach_workspace:
100-
name: "Attach tools"
101-
at: "/go"
102-
- set_goflags
103119
- run:
104120
name: Test and take a coverage
105121
environment:
@@ -108,57 +124,78 @@ jobs:
108124
GOTESTSUM_JSONFILE: /tmp/test-results/tests.json
109125
command: |
110126
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
120130
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 >>
121135
122136
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
126144
steps:
127-
- attach_workspace:
128-
name: "Attach tools"
129-
at: "/go"
130145
- run:
131146
name: Run fmt and lint for sources
132147
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
139150
140151
workflows:
141152
version: 2
142-
workflows:
153+
go1.16:
143154
jobs:
144155
- tools:
145-
context: org-global
146-
156+
name: go1.16-tools
157+
go-version: "1.16"
147158
- test:
148-
context: org-global
159+
name: go1.16-test
160+
go-version: "1.16"
149161
requires:
150-
- tools
162+
- go1.16-tools
151163
pre-steps:
152164
- setup
153165
post-steps:
154166
- store_test_results:
155167
path: /tmp/test-results
156168
- store_artifacts:
157169
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
158177

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
159195
- lint:
160-
context: org-global
196+
name: go1.17-lint
197+
go-version: "1.17-rc"
161198
requires:
162-
- tools
199+
- go1.17-tools
163200
pre-steps:
164201
- setup

0 commit comments

Comments
 (0)