11---
2- image : docker:stable
2+ image : docker:latest
33
44variables :
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
148229hadolint :
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
218299build: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
223308build: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
228317build: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
233326build: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
239336clair: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
270362deploy: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
280367deploy: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
290372deploy: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