mirror of
https://github.com/toradex/rt-validation.git
synced 2026-02-21 06:22:59 +00:00
308 lines
12 KiB
YAML
308 lines
12 KiB
YAML
image: docker:latest
|
|
|
|
variables:
|
|
IMAGE_TAG_DEBIAN: "2-bullseye"
|
|
|
|
RT_TESTS_MAJOR: "2"
|
|
RT_TESTS_MINOR: "4"
|
|
RT_TESTS_PATCH: "0"
|
|
|
|
STRESS_TESTS_MAJOR: "2"
|
|
STRESS_TESTS_MINOR: "4"
|
|
STRESS_TESTS_PATCH: "0"
|
|
|
|
# This should be set by docker image already, just to be sure...
|
|
DOCKER_HOST: tcp://docker:2375
|
|
|
|
# Use overlayfs driver for better performance
|
|
DOCKER_TLS_CERTDIR: ""
|
|
DOCKER_DRIVER: overlay2
|
|
|
|
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
|
|
GITLAB_DOCKERREGISTRY_SUFFIX: ${CI_COMMIT_REF_SLUG}-${CI_PIPELINE_ID}
|
|
GITLAB_DOCKERREGISTRY_SUFFIX_LATEST: ${CI_COMMIT_REF_SLUG}-latest
|
|
|
|
services:
|
|
- name: docker:dind
|
|
|
|
stages:
|
|
- lint
|
|
- repository tagging
|
|
- build-rt-tests
|
|
- build-rt-tests-multiarch
|
|
- deploy
|
|
- deploy-multiarch
|
|
|
|
# Docker image builds
|
|
#
|
|
# Build the Docker images specified in DOCKERFILE_FOLDER/IMAGE_NAME and push
|
|
# it to Gitlab's internal Docker registry
|
|
.docker-build:
|
|
variables:
|
|
IMAGE_ARCH: linux/arm
|
|
script:
|
|
# Try to download latest image for cache, but don't fail if it does not exist
|
|
- docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} || true
|
|
- docker info
|
|
- export DATE=$(date +%Y%m%d)
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
- docker build --build-arg IMAGE_TAG=${IMAGE_TAG}
|
|
--build-arg IMAGE_ARCH=${IMAGE_ARCH}
|
|
--cache-from ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST}
|
|
${DOCKER_NO_CACHE:+--no-cache}
|
|
--label container.name=${IMAGE_NAME}
|
|
--label container.version=${MAJOR}.${MINOR}.${PATCH}-${DATE}
|
|
--label git.branch=${CI_COMMIT_BRANCH}
|
|
--label git.hash=${CI_COMMIT_SHA}
|
|
--label pipeline.id=${CI_PIPELINE_ID}
|
|
-f ${DOCKERFILE_FOLDER}Dockerfile
|
|
-t ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
-t ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST}
|
|
${DOCKERFILE_FOLDER}
|
|
- docker push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
- docker push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST}
|
|
|
|
docker-build-rt-tests:
|
|
extends: .docker-build
|
|
needs: []
|
|
before_script:
|
|
- export MAJOR="${RT_TESTS_MAJOR}"
|
|
- export MINOR="${RT_TESTS_MINOR}"
|
|
- export PATCH="${RT_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_TAG: ${IMAGE_TAG_DEBIAN}
|
|
IMAGE_NAME: arm32v7-rt-tests
|
|
DOCKERFILE_FOLDER: "./rt-tests/"
|
|
DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS}
|
|
stage: build-rt-tests
|
|
|
|
docker-build-stress-tests:
|
|
extends: .docker-build
|
|
needs: []
|
|
before_script:
|
|
- export MAJOR="${STRESS_TESTS_MAJOR}"
|
|
- export MINOR="${STRESS_TESTS_MINOR}"
|
|
- export PATCH="${STRESS_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_TAG: ${IMAGE_TAG_DEBIAN}
|
|
IMAGE_NAME: arm32v7-stress-tests
|
|
DOCKERFILE_FOLDER: "./stress-tests/"
|
|
DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS}
|
|
stage: build-rt-tests
|
|
|
|
docker-build-rt-tests-arm64:
|
|
extends: .docker-build
|
|
needs: []
|
|
before_script:
|
|
- export MAJOR="${RT_TESTS_MAJOR}"
|
|
- export MINOR="${RT_TESTS_MINOR}"
|
|
- export PATCH="${RT_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_ARCH: linux/arm64
|
|
IMAGE_TAG: ${IMAGE_TAG_DEBIAN}
|
|
IMAGE_NAME: arm64v8-rt-tests
|
|
DOCKERFILE_FOLDER: "./rt-tests/"
|
|
DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS}
|
|
stage: build-rt-tests
|
|
|
|
docker-build-stress-tests-arm64:
|
|
extends: .docker-build
|
|
needs: []
|
|
before_script:
|
|
- export MAJOR="${STRESS_TESTS_MAJOR}"
|
|
- export MINOR="${STRESS_TESTS_MINOR}"
|
|
- export PATCH="${STRESS_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_ARCH: linux/arm64
|
|
IMAGE_TAG: ${IMAGE_TAG_DEBIAN}
|
|
IMAGE_NAME: arm64v8-stress-tests
|
|
DOCKERFILE_FOLDER: "./stress-tests/"
|
|
DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS}
|
|
stage: build-rt-tests
|
|
|
|
lint_dockerfile:
|
|
stage: lint
|
|
image: hadolint/hadolint:latest-debian
|
|
script:
|
|
# Some rules cannot be applied in our specific cases.
|
|
# However, since we don't want to completely ignore these rules,
|
|
# we are changing the following rules to have the level "info":
|
|
# - DL3008: pin versions in apt-get install
|
|
# - DL3029 (do not use --platform flag with FROM)
|
|
- hadolint */Dockerfile --failure-threshold warning --info DL3008 --info DL3029
|
|
|
|
# Make sure to create access token in "Settings/Access Tokens" section with "write_repository" scope selected.
|
|
# Then in "Settings/CI/CD/" section add a variable with key "GIT_TOKEN" and a value of the access token. Also mask the variable.
|
|
tag:
|
|
stage: repository tagging
|
|
needs: []
|
|
before_script:
|
|
- if [ -z ${GIT_TOKEN} ]; then echo "Missing variable GIT_TOKEN." && exit 1; fi
|
|
- TAGS="rt-tests-${RT_TESTS_MAJOR}.${RT_TESTS_MINOR}.${RT_TESTS_PATCH} stress_tests-${RT_TESTS_MAJOR}.${RT_TESTS_MINOR}.${RT_TESTS_PATCH}"
|
|
script:
|
|
- apk update && apk add git
|
|
- git remote set-url origin https://gitlab-ci-token:${GIT_TOKEN}@${CI_REPOSITORY_URL#*@}
|
|
- for TAG in ${TAGS};
|
|
do
|
|
if git ls-remote --tags origin | grep ${TAG} > /dev/null; then
|
|
echo "${TAG} tag already exists.";
|
|
else
|
|
echo "Tagging repository with ${TAG} tag.";
|
|
git tag --delete ${TAG} > /dev/null 2>&1 || true;
|
|
git tag ${TAG};
|
|
git push -o ci.skip origin ${TAG};
|
|
fi
|
|
done
|
|
|
|
# Enable experimental features in Docker client (experimental feature are needed for manifest)
|
|
.do_docker_experimental: &do_docker_experimental
|
|
- mkdir -p $HOME/.docker
|
|
- "echo -e '{\n \"experimental\": \"enabled\"\n}' | tee $HOME/.docker/config.json"
|
|
- docker version
|
|
|
|
.docker-build-multiarch:
|
|
before_script:
|
|
- *do_docker_experimental
|
|
- rm -rf ~/.docker/manifests/*
|
|
script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
- docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
- docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
- docker manifest create ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
- docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm
|
|
- docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm64
|
|
- docker manifest inspect -v ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST}
|
|
- docker manifest push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST}
|
|
|
|
docker-build-rt-tests-multiarch:
|
|
extends: .docker-build-multiarch
|
|
variables:
|
|
IMAGE_NAME: rt-tests
|
|
IMAGE_NAME_32: arm32v7-rt-tests
|
|
IMAGE_NAME_64: arm64v8-rt-tests
|
|
stage: build-rt-tests-multiarch
|
|
|
|
docker-build-stress-tests-multiarch:
|
|
extends: .docker-build-multiarch
|
|
variables:
|
|
IMAGE_NAME: stress-tests
|
|
IMAGE_NAME_32: arm32v7-stress-tests
|
|
IMAGE_NAME_64: arm64v8-stress-tests
|
|
stage: build-rt-tests-multiarch
|
|
|
|
# Docker deploy jobs
|
|
#
|
|
# Make sure DOCKER_HUB_USER/DOCKER_HUB_TOKEN is properly set in the project
|
|
# specific Gitlab CI settings.
|
|
.docker-deploy:
|
|
when: manual
|
|
allow_failure: false
|
|
before_script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
when: manual
|
|
script:
|
|
- *do_docker_experimental
|
|
- export DATE=$(date +%Y%m%d)
|
|
- export DOCKER_TAGS_CHECK="${MAJOR}.${MINOR}.${PATCH} ${MAJOR}.${MINOR}.${PATCH}-${DATE}"
|
|
- export DOCKER_TAGS="${MAJOR} ${MAJOR}.${MINOR}"
|
|
- docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX}
|
|
- docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_TOKEN;
|
|
- for tag in ${DOCKER_TAGS_CHECK};
|
|
do
|
|
docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} > /dev/null && true; RESULT=$?;
|
|
(if [ $RESULT == 0 ] ; then echo "Image with ${tag} tag already exists." && exit 1 ; fi);
|
|
done
|
|
- for tag in ${DOCKER_TAGS} ${DOCKER_TAGS_CHECK};
|
|
do
|
|
docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag};
|
|
docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag};
|
|
done
|
|
|
|
docker-deploy-rt-tests:
|
|
extends: .docker-deploy
|
|
before_script:
|
|
- export MAJOR="${RT_TESTS_MAJOR}"
|
|
- export MINOR="${RT_TESTS_MINOR}"
|
|
- export PATCH="${RT_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: arm32v7-rt-tests
|
|
stage: deploy
|
|
|
|
docker-deploy-stress-tests:
|
|
extends: .docker-deploy
|
|
before_script:
|
|
- export MAJOR="${STRESS_TESTS_MAJOR}"
|
|
- export MINOR="${STRESS_TESTS_MINOR}"
|
|
- export PATCH="${STRESS_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: arm32v7-stress-tests
|
|
stage: deploy
|
|
|
|
docker-deploy-rt-tests-arm64:
|
|
extends: .docker-deploy
|
|
before_script:
|
|
- export MAJOR="${RT_TESTS_MAJOR}"
|
|
- export MINOR="${RT_TESTS_MINOR}"
|
|
- export PATCH="${RT_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: arm64v8-rt-tests
|
|
stage: deploy
|
|
|
|
docker-deploy-stress-tests-arm64:
|
|
extends: .docker-deploy
|
|
before_script:
|
|
- export MAJOR="${STRESS_TESTS_MAJOR}"
|
|
- export MINOR="${STRESS_TESTS_MINOR}"
|
|
- export PATCH="${STRESS_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: arm64v8-stress-tests
|
|
stage: deploy
|
|
|
|
.docker-deploy-multiarch:
|
|
script:
|
|
- *do_docker_experimental
|
|
- export DATE=$(date +%Y%m%d)
|
|
- export DOCKER_TAGS_CHECK="${MAJOR}.${MINOR}.${PATCH} ${MAJOR}.${MINOR}.${PATCH}-${DATE}"
|
|
- export DOCKER_TAGS="${MAJOR} ${MAJOR}.${MINOR}"
|
|
- rm -rf ~/.docker/manifests/*
|
|
- docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_TOKEN
|
|
- for tag in ${DOCKER_TAGS_CHECK};
|
|
do
|
|
docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} > /dev/null && true; RESULT=$?;
|
|
(if [ $RESULT == 0 ] ; then echo "Image with ${tag} tag already exists." && exit 1 ; fi);
|
|
done
|
|
- for tag in ${DOCKER_TAGS} ${DOCKER_TAGS_CHECK};
|
|
do
|
|
docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${tag};
|
|
docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${tag} --os linux --arch arm;
|
|
docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${tag} --os linux --arch arm64;
|
|
docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag};
|
|
docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag};
|
|
done
|
|
|
|
docker-deploy-rt-tests-multiarch:
|
|
extends: .docker-deploy-multiarch
|
|
needs: ["docker-deploy-rt-tests", "docker-deploy-rt-tests-arm64"]
|
|
before_script:
|
|
- export MAJOR="${RT_TESTS_MAJOR}"
|
|
- export MINOR="${RT_TESTS_MINOR}"
|
|
- export PATCH="${RT_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: rt-tests
|
|
IMAGE_NAME_32: arm32v7-rt-tests
|
|
IMAGE_NAME_64: arm64v8-rt-tests
|
|
stage: deploy-multiarch
|
|
|
|
docker-deploy-stress-tests-multiarch:
|
|
extends: .docker-deploy-multiarch
|
|
needs: ["docker-deploy-stress-tests", "docker-deploy-stress-tests-arm64"]
|
|
before_script:
|
|
- export MAJOR="${STRESS_TESTS_MAJOR}"
|
|
- export MINOR="${STRESS_TESTS_MINOR}"
|
|
- export PATCH="${STRESS_TESTS_PATCH}"
|
|
variables:
|
|
IMAGE_NAME: stress-tests
|
|
IMAGE_NAME_32: arm32v7-stress-tests
|
|
IMAGE_NAME_64: arm64v8-stress-tests
|
|
stage: deploy-multiarch
|