🚀 Rewrites GitLab CI

This commit is contained in:
Franck Nijhof 2018-06-13 20:24:27 +02:00 committed by Franck Nijhof
parent 70ca14ad7c
commit 2cd38a463a

View file

@ -1,9 +1,9 @@
--- ---
image: docker:stable image: docker:latest
variables: variables:
ADDON_GITHUB_REPO: hassio-addons/addon-tasmoadmin ADDON_GITHUB_REPO: hassio-addons/addon-tasmoadmin
ADDON_SLUG: tasmoadmin ADDON_SLUG: sonweb
ADDON_TARGET: tasmoadmin ADDON_TARGET: tasmoadmin
DOCKER_DRIVER: overlay2 DOCKER_DRIVER: overlay2
DOCKER_HUB_ORG: hassioaddons DOCKER_HUB_ORG: hassioaddons
@ -13,15 +13,16 @@ stages:
- build - build
- scan - scan
- deploy - deploy
- manifest
- publish - publish
# Generic DIND template # Generic DIND template
.dind: &dind .dind: &dind
before_script: before_script:
- docker info - docker info
- docker login -u gitlab-ci-token -p "${CI_JOB_TOKEN}" registry.gitlab.com
services: services:
- docker:dind - name: docker:dind
command: ["--experimental"]
# Generic preflight template # Generic preflight template
.preflight: &preflight .preflight: &preflight
@ -33,31 +34,33 @@ stages:
.build: &build .build: &build
<<: *dind <<: *dind
stage: build stage: build
before_script:
- docker info
- |
if [ "$(apk --print-arch)" = "amd64" ]; then
docker run --rm --privileged hassioaddons/qemu-user-static:latest
fi
- |
echo "${CI_JOB_TOKEN}" | docker login \
--username gitlab-ci-token \
--password-stdin \
registry.gitlab.com
- docker pull "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache" || true
script: script:
- | - |
docker run \ docker build \
--privileged \ --build-arg "BUILD_FROM=${FROM}" \
--volume /var/run/docker.sock:/var/run/docker.sock \ --build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" \
--volume "$PWD":/docker \ --build-arg "BUILD_ARCH=${ADDON_ARCH}" \
hassioaddons/build-env:latest \ --build-arg "BUILD_REF=${CI_COMMIT_SHA}" \
--image "addon" \ --build-arg "BUILD_VERSION=${CI_COMMIT_TAG:-${CI_COMMIT_SHA:0:7}}" \
--cache-from "${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}" \ --cache-from "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache" \
--cache-tag "test" \ --tag \
--git-url "https://github.com/${ADDON_GITHUB_REPO}" \ "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
--target "${ADDON_TARGET}" \ "${ADDON_TARGET}"
--tag-latest \
--git \
--${ADDON_ARCH}
- |
docker tag \
"addon:latest" \
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
- | - |
docker push \ docker push \
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
tags:
- build
# Generic scan template # Generic scan template
.scan: &scan .scan: &scan
<<: *dind <<: *dind
@ -106,28 +109,103 @@ stages:
stage: deploy stage: deploy
before_script: before_script:
- docker info - docker info
- docker login -u gitlab-ci-token -p "${CI_JOB_TOKEN}" registry.gitlab.com
- docker pull "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" - docker pull "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}"
- docker pull hassioaddons/build-env:latest - |
echo "${CI_JOB_TOKEN}" | docker login \
--username gitlab-ci-token \
--password-stdin \
registry.gitlab.com
- |
echo "${DOCKER_PASSWORD}" | docker login \
--username "${DOCKER_LOGIN}" \
--password-stdin
script: script:
- | - |
docker run \ docker tag \
--privileged \ "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
--volume /var/run/docker.sock:/var/run/docker.sock \ "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache"
--volume "$PWD":/docker \ - docker push "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:cache"
hassioaddons/build-env:latest \ - TAG="${CI_COMMIT_TAG#v}"
--image "${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}" \ - TAG="${TAG:-${CI_COMMIT_SHA:0:7}}"
--cache-from "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}" \ - |
--cache-tag "${CI_COMMIT_SHA}" \ docker tag \
--git-url "https://github.com/${ADDON_GITHUB_REPO}" \ "registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
--target "${ADDON_TARGET}" \ "${DOCKER_HUB_ORG}/${ADDON_SLUG}:${ADDON_ARCH}-${TAG}"
--login "${DOCKER_LOGIN}" \ - |
--password "${DOCKER_PASSWORD}" \ docker push \
--git \ "${DOCKER_HUB_ORG}/${ADDON_SLUG}:${ADDON_ARCH}-${TAG}"
--push \ - |
--${ADDON_ARCH} docker tag \
"registry.gitlab.com/${CI_PROJECT_PATH}/${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}:${TAG}"
- |
docker push \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}-${ADDON_ARCH}:${TAG}"
tags: tags:
- deploy - deploy
only:
- master
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/
# Generic manifest template
.manifest: &manifest
<<: *dind
stage: manifest
before_script:
- mkdir -p ~/.docker
- echo '{"experimental":"enabled"}' > ~/.docker/config.json
- docker info
- |
echo "${DOCKER_PASSWORD}" | docker login \
--username "${DOCKER_LOGIN}" \
--password-stdin
script:
- TAG="${TAG#v}"
- TAG="${TAG:-${CI_COMMIT_SHA:0:7}}"
- REF="${CI_COMMIT_TAG#v}"
- REF="${REF:-${CI_COMMIT_SHA:0:7}}"
- |
docker manifest create \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:aarch64-${REF}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:amd64-${REF}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:armhf-${REF}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:i386-${REF}"
- |
docker manifest annotate \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:aarch64-${REF}" \
--os=linux \
--arch=arm64 \
--variant=v8
- |
docker manifest annotate \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:amd64-${REF}" \
--os=linux \
--arch=amd64
- |
docker manifest annotate \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:armhf-${REF}" \
--os=linux \
--arch=arm \
--variant=v6
- |
docker manifest annotate \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}" \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:i386-${REF}" \
--os=linux \
--arch=386
- |
docker manifest push \
"${DOCKER_HUB_ORG}/${ADDON_SLUG}:${TAG}"
tags:
- manifest
except:
- /^(?!master).+@/
# Generic publish template # Generic publish template
.publish: &publish .publish: &publish
@ -143,11 +221,13 @@ stages:
--addon "${ADDON_GITHUB_REPO}" --addon "${ADDON_GITHUB_REPO}"
tags: tags:
- publish - publish
except:
- /^(?!master).+@/
# Preflight jobs # Preflight jobs
hadolint: hadolint:
<<: *preflight <<: *preflight
image: hadolint/hadolint:latest image: hadolint/hadolint:v1.6.6
before_script: before_script:
- hadolint --version - hadolint --version
script: script:
@ -176,7 +256,6 @@ shellcheck:
if [ "${FAILED}" = "1" ]; then if [ "${FAILED}" = "1" ]; then
exit 1 exit 1
fi fi
yamllint: yamllint:
<<: *preflight <<: *preflight
image: sdesbure/yamllint image: sdesbure/yamllint
@ -202,7 +281,6 @@ jsonlint:
if [ "${FAILED}" = "1" ]; then if [ "${FAILED}" = "1" ]; then
exit 1 exit 1
fi fi
markdownlint: markdownlint:
<<: *preflight <<: *preflight
image: image:
@ -214,26 +292,42 @@ markdownlint:
script: script:
- mdl --style all --warnings . - mdl --style all --warnings .
# Build jobs # Build Jobs
build:armhf: build:armhf:
<<: *build <<: *build
variables: variables:
ADDON_ARCH: armhf ADDON_ARCH: armhf
FROM: hassioaddons/base-armhf:1.4.2
tags:
- build
- armhf
build:aarch64: build:aarch64:
<<: *build <<: *build
variables: variables:
ADDON_ARCH: aarch64 ADDON_ARCH: aarch64
FROM: hassioaddons/base-aarch64:1.4.2
tags:
- build
- aarch64
build:i386: build:i386:
<<: *build <<: *build
variables: variables:
ADDON_ARCH: i386 ADDON_ARCH: i386
FROM: hassioaddons/base-i386:1.4.2
tags:
- build
- i386
build:amd64: build:amd64:
<<: *build <<: *build
variables: variables:
ADDON_ARCH: amd64 ADDON_ARCH: amd64
FROM: hassioaddons/base-amd64:1.4.2
tags:
- build
- amd64
# Scan jobs # Scan jobs
clair:armhf: clair:armhf:
@ -261,72 +355,80 @@ deploy:armhf:
<<: *deploy <<: *deploy
variables: variables:
ADDON_ARCH: armhf ADDON_ARCH: armhf
only:
- master
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/
deploy:aarch64: deploy:aarch64:
<<: *deploy <<: *deploy
variables: variables:
ADDON_ARCH: aarch64 ADDON_ARCH: aarch64
only:
- master
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/
deploy:i386: deploy:i386:
<<: *deploy <<: *deploy
variables: variables:
ADDON_ARCH: i386 ADDON_ARCH: i386
only:
- master
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/
deploy:amd64: deploy:amd64:
<<: *deploy <<: *deploy
variables: variables:
ADDON_ARCH: amd64 ADDON_ARCH: amd64
# Manifest jobs
manifest:sha:
<<: *manifest
only: only:
- master - master
manifest:version:
<<: *manifest
variables:
TAG: "${CI_COMMIT_TAG}"
only:
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/ - /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/ manifest:stable:
<<: *manifest
variables:
TAG: latest
only:
- /^v\d+\.\d+\.\d+(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?$/
manifest:beta:
<<: *manifest
variables:
TAG: beta
only:
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
manifest:edge:
<<: *manifest
variables:
TAG: edge
only:
- master
# Publish jobs # Publish jobs
stable: publish:stable:
<<: *publish <<: *publish
variables: variables:
REPOSITORY: hassio-addons/repository REPOSITORY: hassio-addons/repository
only: only:
- /^v\d+\.\d+\.\d+(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?$/ - /^v\d+\.\d+\.\d+(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?$/
except:
- /^(?!master).+@/
environment: environment:
name: stable name: stable
beta: publish:beta:
<<: *publish <<: *publish
variables: variables:
REPOSITORY: hassio-addons/repository-beta REPOSITORY: hassio-addons/repository-beta
only: only:
- /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/ - /^v\d+\.\d+\.\d+(?:-(?:beta|rc)(?:(?:(?:\+|\.)?[a-zA-Z0-9]+)*)?)?$/
except:
- /^(?!master).+@/
environment: environment:
name: beta name: beta
edge: publish:edge:
<<: *publish <<: *publish
variables: variables:
REPOSITORY: hassio-addons/repository-edge REPOSITORY: hassio-addons/repository-edge
only: only:
- master - master
except:
- /^(?!master).+@/
environment: environment:
name: edge name: edge