/
config.yml
180 lines (164 loc) · 5.05 KB
/
config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
version: 2.1
orbs:
win: circleci/windows@2.2.0
references:
environment: &ENVIRONMENT
GOMAXPROCS: 4
GO111MODULE: "on"
GOPROXY: https://proxy.golang.org/
TEST_RESULTS_DIR: &TEST_RESULTS_DIR /tmp/test-results
WIN_TEST_RESULTS: &WIN_TEST_RESULTS c:\Users\circleci\AppData\Local\Temp\test-results
commands:
git-verify:
steps:
- run:
name: "Verify no code was generated"
command: |
if [[ -z $(git status --porcelain) ]]; then
echo "Git directory is clean."
else
echo "Git is dirty. Run `make fmt` and `make generate` locally and commit any formatting fixes or generated code."
git status --porcelain
exit 1
fi
run-gotests:
parameters:
cmd:
type: string
platform:
type: string
steps:
- run:
name: "Run go tests"
command: |
PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname)
echo "Running $(echo $PACKAGE_NAMES | wc -w) packages"
echo $PACKAGE_NAMES
<< parameters.cmd >> --format=short-verbose --junitfile $TEST_RESULTS_DIR/hcl2/gotestsum-report.xml -- -p 2 -cover -coverprofile=<< parameters.platform >>_cov_$CIRCLE_NODE_INDEX.part $PACKAGE_NAMES
jobs:
go-checks:
docker:
- image: circleci/golang:<< parameters.go-version >>
environment:
<<: *ENVIRONMENT
parameters:
go-version:
type: string
steps:
- checkout
- run: go mod verify
- run: make fmt
- git-verify
linux-tests:
docker:
- image: circleci/golang:<< parameters.go-version >>
environment:
<<: *ENVIRONMENT
parameters:
go-version:
type: string
parallelism: 4
steps:
- checkout
- attach_workspace:
at: .
- run: mkdir -p $TEST_RESULTS_DIR/hcl2
- run-gotests:
cmd: "gotestsum"
platform: "linux"
# save coverage report parts
- persist_to_workspace:
root: .
paths:
- linux_cov_*.part
- store_test_results:
path: *TEST_RESULTS_DIR
- store_artifacts:
path: *TEST_RESULTS_DIR
win-tests:
executor:
name: win/default
shell: bash --login -eo pipefail
environment:
<<: *ENVIRONMENT
working_directory: c:\gopath\src\github.com\hashicorp\hcl
parameters:
go-version:
type: string
gotestsum-version:
type: string
steps:
- add_ssh_keys:
fingerprints:
- "3f:fc:7c:7b:7f:45:55:70:d0:7a:6b:26:7f:0d:50:e9"
- run: git config --global core.autocrlf false
- checkout
- attach_workspace:
at: .
# - git-verify
- run:
name: Setup (remove pre-installed golang version)
command: |
rm -rf "c:\Go"
mkdir -p $TEST_RESULTS_DIR/hcl2
- restore_cache:
keys:
- win-golang-<< parameters.go-version >>-cache-v1
- win-gomod-cache-{{ checksum "go.mod" }}-v1
- run:
name: Install go version << parameters.go-version >>
command: |
if [ ! -d "c:\go" ]; then
echo "Cache not found, installing new version of go"
curl --fail --location https://dl.google.com/go/go<< parameters.go-version >>.windows-amd64.zip --output go.zip
unzip go.zip -d "/c"
fi
- run:
name: Go mod download
command: |
go mod verify
go mod download
- save_cache:
key: win-golang-<< parameters.go-version >>-cache-v1
paths:
- /go
- save_cache:
key: win-gomod-cache-{{ checksum "go.mod" }}-v1
paths:
- c:\Windows\system32\config\systemprofile\go\pkg\mod
- run:
name: Install gotestsum
command: |
curl --fail --location https://github.com/gotestyourself/gotestsum/releases/download/v<< parameters.gotestsum-version >>/gotestsum_<< parameters.gotestsum-version >>_windows_amd64.tar.gz --output gotestsum.tar.gz
tar -xvzf gotestsum.tar.gz
- run-gotests:
cmd: "./gotestsum.exe"
platform: "win"
# save coverage report parts
- persist_to_workspace:
root: .
paths:
- win_cov_*.part
- store_test_results:
path: *WIN_TEST_RESULTS
- store_artifacts:
path: *WIN_TEST_RESULTS
workflows:
hcl2:
jobs:
# - go-checks:
# matrix:
# parameters:
# go-version: ["1.14"]
# name: go-checks-<< matrix.go-version >>
- linux-tests:
matrix:
parameters:
go-version: ["1.18"]
name: linux-test-go-<< matrix.go-version >>
- win-tests:
matrix:
parameters:
go-version: ["1.18"]
gotestsum-version: ["0.4.1"]
name: win-test-go-<< matrix.go-version >>