Skip to content

Commit 96f790a

Browse files
committed
🚀 Rewrites GitLab CI
1 parent 413f110 commit 96f790a

1 file changed

Lines changed: 172 additions & 67 deletions

File tree

.gitlab-ci.yml

Lines changed: 172 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
image: docker:stable
2+
image: docker:latest
33

44
variables:
55
ADDON_GITHUB_REPO: hassio-addons/addon-influxdb
@@ -13,15 +13,16 @@ stages:
1313
- build
1414
- scan
1515
- deploy
16+
- manifest
1617
- publish
1718

1819
# Generic DIND template
1920
.dind: &dind
2021
before_script:
2122
- docker info
22-
- docker login -u gitlab-ci-token -p "${CI_JOB_TOKEN}" registry.gitlab.com
2323
services:
24-
- docker:dind
24+
- name: docker:dind
25+
command: ["--experimental"]
2526

2627
# Generic preflight template
2728
.preflight: &preflight
@@ -33,30 +34,33 @@ stages:
3334
.build: &build
3435
<<: *dind
3536
stage: build
36-
script:
37+
before_script:
38+
- docker info
3739
- |
38-
docker run \
39-
--privileged \
40-
--volume /var/run/docker.sock:/var/run/docker.sock \
41-
--volume "$PWD":/docker \
42-
hassioaddons/build-env:latest \
43-
--image "addon" \
44-
--cache-from "${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}" \
45-
--cache-tag "test" \
46-
--git-url "https://github.com/${ADDON_GITHUB_REPO}" \
47-
--target "${ADDON_TARGET}" \
48-
--tag-latest \
49-
--git \
50-
--${ADDON_ARCH}
40+
if [ "$(apk --print-arch)" = "amd64" ]; then
41+
docker run --rm --privileged hassioaddons/qemu-user-static:latest
42+
fi
5143
- |
52-
docker tag \
53-
"addon:latest" \
54-
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
44+
echo "${CI_JOB_TOKEN}" | docker login \
45+
--username gitlab-ci-token \
46+
--password-stdin \
47+
registry.gitlab.com
48+
- docker pull "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache" || true
49+
script:
50+
- |
51+
docker build \
52+
--build-arg "BUILD_FROM=${FROM}" \
53+
--build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" \
54+
--build-arg "BUILD_ARCH=${ADDON_ARCH}" \
55+
--build-arg "BUILD_REF=${CI_COMMIT_SHA}" \
56+
--build-arg "BUILD_VERSION=${CI_COMMIT_TAG:-${CI_COMMIT_SHA:0:7}}" \
57+
--cache-from "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache" \
58+
--tag \
59+
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
60+
"${ADDON_TARGET}"
5561
- |
5662
docker push \
5763
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
58-
tags:
59-
- build
6064
6165
# Generic scan template
6266
.scan: &scan
@@ -106,28 +110,103 @@ stages:
106110
stage: deploy
107111
before_script:
108112
- docker info
109-
- docker login -u gitlab-ci-token -p "${CI_JOB_TOKEN}" registry.gitlab.com
110113
- docker pull "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
111-
- docker pull hassioaddons/build-env:latest
114+
- |
115+
echo "${CI_JOB_TOKEN}" | docker login \
116+
--username gitlab-ci-token \
117+
--password-stdin \
118+
registry.gitlab.com
119+
- |
120+
echo "${DOCKER_PASSWORD}" | docker login \
121+
--username "${DOCKER_LOGIN}" \
122+
--password-stdin
112123
script:
113124
- |
114-
docker run \
115-
--privileged \
116-
--volume /var/run/docker.sock:/var/run/docker.sock \
117-
--volume "$PWD":/docker \
118-
hassioaddons/build-env:latest \
119-
--image "${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}" \
120-
--cache-from "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}" \
121-
--cache-tag "${CI_COMMIT_SHA}" \
122-
--git-url "https://github.com/${ADDON_GITHUB_REPO}" \
123-
--target "${ADDON_TARGET}" \
124-
--login "${DOCKER_LOGIN}" \
125-
--password "${DOCKER_PASSWORD}" \
126-
--git \
127-
--push \
128-
--${ADDON_ARCH}
125+
docker tag \
126+
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
127+
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache"
128+
- docker push "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache"
129+
- TAG="${CI_COMMIT_TAG#v}"
130+
- TAG="${TAG:-${CI_COMMIT_SHA:0:7}}"
131+
- |
132+
docker tag \
133+
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
134+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${ADDON_ARCH}-${TAG}"
135+
- |
136+
docker push \
137+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${ADDON_ARCH}-${TAG}"
138+
- |
139+
docker tag \
140+
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
141+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}:${TAG}"
142+
- |
143+
docker push \
144+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}:${TAG}"
129145
tags:
130146
- deploy
147+
only:
148+
- master
149+
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
150+
except:
151+
- /^(?!master).+@/
152+
153+
# Generic manifest template
154+
.manifest: &manifest
155+
<<: *dind
156+
stage: manifest
157+
before_script:
158+
- mkdir -p ~/.docker
159+
- echo '{"experimental":"enabled"}' > ~/.docker/config.json
160+
- docker info
161+
- |
162+
echo "${DOCKER_PASSWORD}" | docker login \
163+
--username "${DOCKER_LOGIN}" \
164+
--password-stdin
165+
script:
166+
- TAG="${TAG#v}"
167+
- TAG="${TAG:-${CI_COMMIT_SHA:0:7}}"
168+
- REF="${CI_COMMIT_TAG#v}"
169+
- REF="${REF:-${CI_COMMIT_SHA:0:7}}"
170+
- |
171+
docker manifest create \
172+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
173+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:aarch64-${REF}" \
174+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:amd64-${REF}" \
175+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:armhf-${REF}" \
176+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:i386-${REF}"
177+
- |
178+
docker manifest annotate \
179+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
180+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:aarch64-${REF}" \
181+
--os=linux \
182+
--arch=arm64 \
183+
--variant=v8
184+
- |
185+
docker manifest annotate \
186+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
187+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:amd64-${REF}" \
188+
--os=linux \
189+
--arch=amd64
190+
- |
191+
docker manifest annotate \
192+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
193+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:armhf-${REF}" \
194+
--os=linux \
195+
--arch=arm \
196+
--variant=v6
197+
- |
198+
docker manifest annotate \
199+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
200+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:i386-${REF}" \
201+
--os=linux \
202+
--arch=386
203+
- |
204+
docker manifest push \
205+
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}"
206+
tags:
207+
- manifest
208+
except:
209+
- /^(?!master).+@/
131210

132211
# Generic publish template
133212
.publish: &publish
@@ -143,11 +222,13 @@ stages:
143222
--addon "${ADDON_GITHUB_REPO}"
144223
tags:
145224
- publish
225+
except:
226+
- /^(?!master).+@/
146227

147228
# Preflight jobs
148229
hadolint:
149230
<<: *preflight
150-
image: hadolint/hadolint:latest
231+
image: hadolint/hadolint:v1.6.6
151232
before_script:
152233
- hadolint --version
153234
script:
@@ -214,26 +295,42 @@ markdownlint:
214295
script:
215296
- mdl --style all --warnings .
216297

217-
# Build jobs
298+
# Build Jobs
218299
build:armhf:
219300
<<: *build
220301
variables:
221302
ADDON_ARCH: armhf
303+
FROM: hassioaddons/ubuntu-base-armhf:2.0.0
304+
tags:
305+
- build
306+
- armhf
222307

223308
build:aarch64:
224309
<<: *build
225310
variables:
226311
ADDON_ARCH: aarch64
312+
FROM: hassioaddons/ubuntu-base-aarch64:2.0.0
313+
tags:
314+
- build
315+
- aarch64
227316

228317
build:i386:
229318
<<: *build
230319
variables:
231320
ADDON_ARCH: i386
321+
FROM: hassioaddons/ubuntu-base-i386:2.0.0
322+
tags:
323+
- build
324+
- i386
232325

233326
build:amd64:
234327
<<: *build
235328
variables:
236329
ADDON_ARCH: amd64
330+
FROM: hassioaddons/ubuntu-base-amd64:2.0.0
331+
tags:
332+
- build
333+
- amd64
237334

238335
# Scan jobs
239336
clair:armhf:
@@ -261,72 +358,80 @@ deploy:armhf:
261358
<<: *deploy
262359
variables:
263360
ADDON_ARCH: armhf
264-
only:
265-
- master
266-
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
267-
except:
268-
- /^(?!master).+@/
269361

270362
deploy:aarch64:
271363
<<: *deploy
272364
variables:
273365
ADDON_ARCH: aarch64
274-
only:
275-
- master
276-
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
277-
except:
278-
- /^(?!master).+@/
279366

280367
deploy:i386:
281368
<<: *deploy
282369
variables:
283370
ADDON_ARCH: i386
284-
only:
285-
- master
286-
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
287-
except:
288-
- /^(?!master).+@/
289371

290372
deploy:amd64:
291373
<<: *deploy
292374
variables:
293375
ADDON_ARCH: amd64
376+
377+
# Manifest jobs
378+
manifest:sha:
379+
<<: *manifest
294380
only:
295381
- master
382+
383+
manifest:version:
384+
<<: *manifest
385+
variables:
386+
TAG: "${CI_COMMIT_TAG}"
387+
only:
296388
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
297-
except:
298-
- /^(?!master).+@/
389+
390+
manifest:stable:
391+
<<: *manifest
392+
variables:
393+
TAG: latest
394+
only:
395+
- /^v\d+\.\d+\.\d+(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?$/
396+
397+
manifest:beta:
398+
<<: *manifest
399+
variables:
400+
TAG: beta
401+
only:
402+
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
403+
404+
manifest:edge:
405+
<<: *manifest
406+
variables:
407+
TAG: edge
408+
only:
409+
- master
299410

300411
# Publish jobs
301-
stable:
412+
publish:stable:
302413
<<: *publish
303414
variables:
304415
REPOSITORY: hassio-addons/repository
305416
only:
306417
- /^v\d+\.\d+\.\d+(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?$/
307-
except:
308-
- /^(?!master).+@/
309418
environment:
310419
name: stable
311420

312-
beta:
421+
publish:beta:
313422
<<: *publish
314423
variables:
315424
REPOSITORY: hassio-addons/repository-beta
316425
only:
317426
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
318-
except:
319-
- /^(?!master).+@/
320427
environment:
321428
name: beta
322429

323-
edge:
430+
publish:edge:
324431
<<: *publish
325432
variables:
326433
REPOSITORY: hassio-addons/repository-edge
327434
only:
328435
- master
329-
except:
330-
- /^(?!master).+@/
331436
environment:
332437
name: edge

0 commit comments

Comments
 (0)