forked from radicle-dev/radicle-alpha
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcloudbuild.yaml
229 lines (200 loc) · 5.62 KB
/
cloudbuild.yaml
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
timeout: 3600s # Cache misses are slow to rebuild
substitutions:
# Bump the version if you make changes to `ci/Dockerfile
_BUILD_IMAGE: eu.gcr.io/opensourcecoin/radicle-ci:v4
options:
machineType: N1_HIGHCPU_8
steps:
- id: "Build CI base image"
name: gcr.io/cloud-builders/docker
entrypoint: 'bash'
args:
- '-c'
- |
set -euxo pipefail
if ! docker pull $_BUILD_IMAGE; then
docker build ci --tag $_BUILD_IMAGE
docker push $_BUILD_IMAGE
fi
- id: "Load cache"
name: $_BUILD_IMAGE
entrypoint: 'bash'
args:
- '-c'
- |
set -euxo pipefail
source scripts/ci.sh
load-cache
- id: "Build deps"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: 'bash'
args:
- '-c'
- |
set -euxo pipefail
stack config set system-ghc --global true
stack config set install-ghc --global false
stack build \
--no-terminal \
stylish-haskell hlint weeder
stack build \
--no-terminal \
--test \
--dependencies-only
- id: "Save cache"
waitFor: ["Build deps"]
name: $_BUILD_IMAGE
entrypoint: 'bash'
env:
- BRANCH_NAME=$BRANCH_NAME
args:
- '-c'
- |
set -euxo pipefail
source scripts/ci.sh
save-cache
- id: "Format"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
args: ['./scripts/check-fmt.sh']
- id: "Lint"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
args: ['stack', 'exec', '--', 'hlint', '.']
- id: "Build"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: bash
args:
- '-c'
- |
set -euxo pipefail
stack build \
--no-terminal \
--fast \
--pedantic \
--test \
--no-run-tests
- id: "Test"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: bash
args:
- '-c'
- |
set -euxo pipefail
stack test :doctest
stack test :spec
RADPATH="$(pwd)/rad" stack exec -- radicle test/all.rad
- id: "Lint (weeder)"
waitFor: ["Build"]
name: $_BUILD_IMAGE
env: ["STACK_ROOT=/workspace/.stack"]
args: ["stack", "exec", "--", "weeder", "--match"]
- id: "Build rad-daemon-radicle image"
waitFor:
- "Test"
name: $_BUILD_IMAGE
entrypoint: bash
env:
- STACK_ROOT=/workspace/.stack
- COMMIT_SHA=$COMMIT_SHA
- BRANCH_NAME=$BRANCH_NAME
args:
- "-c"
- |
set -euxo pipefail
./images/rad-daemon-radicle/ci-copy-bin.sh
image_name="eu.gcr.io/opensourcecoin/rad-daemon-radicle"
short_sha=$(echo "$COMMIT_SHA" | head --bytes=7)
# Looks like this: b2018.12.06-a76a52f
tag="b$(date +%Y.%m.%d)-${short_sha}"
docker build \
--tag "$image_name" \
--cache-from "$image_name" \
./images/rad-daemon-radicle
if [ "$BRANCH_NAME" == "master" ]; then
docker tag "$image_name" "$image_name:$tag"
docker push "$image_name"
docker push "$image_name:$tag"
fi
- id: "Build reference document and swagger spec"
waitFor:
- "Build"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: bash
args:
- '-c'
- |
set -euxo pipefail
mv docs/source/reference.rst oldref
mv docs/source/daemon-api.yaml oldswagger
RADPATH="$(pwd)/rad" stack exec radicle-ref-doc
if ! (diff oldref docs/source/reference.rst); then
echo "Reference docs are not checked in"
exit 1
fi
if ! (diff oldswagger docs/source/daemon-api.yaml); then
echo "Daemon swagger spec is not checked in"
exit 1
fi
- id: "Check tutorial"
waitFor:
- "Build"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: bash
args:
- '-c'
- |
set -euxo pipefail
RADPATH="$(pwd)/rad" stack exec radicle-doc docs/source/guide/Basics.lrad
- id: "Integration tests"
waitFor:
- "Build"
name: $_BUILD_IMAGE
env: ['STACK_ROOT=/workspace/.stack']
entrypoint: 'bash'
args:
- "-c"
- |
set -euxo pipefail
export COMPOSE_FILE=test/docker-compose.yaml
export RAD_BIN="$(stack path --local-install-root)/bin"
ls "$(stack path --local-install-root)/bin"
docker-compose up -d
sleep 1 # Wait for containers to be started
# Connect services to 'cloudbuild' network so they can be
# accessed by other steps
docker network connect cloudbuild test_ipfs-test-network_1 --alias ipfs-test-network
docker network connect cloudbuild test_radicle-daemon1_1 --alias radicle-daemon1
docker network connect cloudbuild test_radicle-daemon2_1 --alias radicle-daemon2
docker exec test_ipfs-test-network_1 /app/wait-until-ready
sleep 10
# Add the empty entry to the IPFS test network. Radicle requires it
echo '{"radicle": true}' | docker exec -i test_ipfs-test-network_1 ipfs dag put --pin
export RAD_IPFS_API_URL=http://ipfs-test-network:5001
export RADPATH="$(pwd)/rad"
export IS_CI_NET="yes"
stack test :e2e
- id: "Package"
waitFor:
- "Integration tests"
name: $_BUILD_IMAGE
env:
- STACK_ROOT=/workspace/.stack
- TAG_NAME=$TAG_NAME
entrypoint: 'bash'
args:
- "-c"
- |
set -euxo pipefail
if [[ "$TAG_NAME" == v* ]]; then
VERSION=${TAG_NAME/#'v'} TARGET=debian ./packaging/build-package.sh
cp \
"packaging/out/radicle_${TAG_NAME/#'v'}_amd64.deb" \
"packaging/out/radicle_latest_amd64.deb"
./packaging/upload.sh
fi