diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..28dd9c2 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,493 @@ +image: docker:latest + +variables: + IMAGE_TAG_DEBIAN: "2-bullseye" + + RT_TESTS_MAJOR: "2" + RT_TESTS_MINOR: "0" + RT_TESTS_PATCH: "0" + + STRESS_TESTS_MAJOR: "2" + STRESS_TESTS_MINOR: "0" + 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 + +before_script: + - docker info + +stages: + - build-rt-tests + - build-rt-tests-multiarch + - deploy-major + - deploy-minor + - deploy-patch + - deploy-patch-date + - deploy-multiarch-major + - deploy-multiarch-minor + - deploy-multiarch-patch + - deploy-multiarch-patch-date + +# 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 + - 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 + 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 + 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 + 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 + 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 + +# 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_PW is properly set in the project +# specific Gitlab CI settings. +.docker-deploy-major: + when: manual + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} + +docker-deploy-rt-tests-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-major + +docker-deploy-stress-tests-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-major + +docker-deploy-rt-tests-arm64-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-major + +docker-deploy-stress-tests-arm64-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-major + +.docker-deploy-minor: + when: manual + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} + +docker-deploy-rt-tests-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-minor + +docker-deploy-stress-tests-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-minor + +docker-deploy-rt-tests-arm64-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-minor + +docker-deploy-stress-tests-arm64-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-minor + +.docker-deploy-patch: + when: manual + script: + - *do_docker_experimental + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} > /dev/null && true; RESULT=$? + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - (if [ ${RESULT} == 1 ] ; then docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-patch: + extends: .docker-deploy-patch + 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-patch + +docker-deploy-stress-tests-patch: + extends: .docker-deploy-patch + 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-patch + +docker-deploy-rt-tests-arm64-patch: + extends: .docker-deploy-patch + 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-patch + +docker-deploy-stress-tests-arm64-patch: + extends: .docker-deploy-patch + 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-patch + +.docker-deploy-patch-date: + when: manual + script: + - *do_docker_experimental + - export DATE=$(date +%Y%m%d) + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} > /dev/null && true; RESULT=$? + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - (if [ ${RESULT} == 1 ] ; then docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-patch-date: + extends: .docker-deploy-patch-date + 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-patch-date + +docker-deploy-stress-tests-patch-date: + extends: .docker-deploy-patch-date + 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-patch-date + +docker-deploy-rt-tests-arm64-patch-date: + extends: .docker-deploy-patch-date + 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-patch-date + +docker-deploy-stress-tests-arm64-patch-date: + extends: .docker-deploy-patch-date + 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-patch-date + +.docker-deploy-multiarch-major: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + - docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + +docker-deploy-rt-tests-multiarch-major: + extends: .docker-deploy-multiarch-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-major + +docker-deploy-stress-tests-multiarch-major: + extends: .docker-deploy-multiarch-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-major + +.docker-deploy-multiarch-minor: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + - docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + +docker-deploy-rt-tests-multiarch-minor: + extends: .docker-deploy-multiarch-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-minor + +docker-deploy-stress-tests-multiarch-minor: + extends: .docker-deploy-multiarch-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-minor + +.docker-deploy-multiarch-patch: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} > /dev/null && true; RESULT=$? + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} + - (if [ ${RESULT} == 1 ] ; then docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-multiarch-patch: + extends: .docker-deploy-multiarch-patch + 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-patch + +docker-deploy-stress-tests-multiarch-patch: + extends: .docker-deploy-multiarch-patch + 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-patch + +.docker-deploy-multiarch-patch-date: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - export DATE=$(date +%Y%m%d) + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} > /dev/null && true; RESULT=$? + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH}-${DATE} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH}-${DATE} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - (if [ ${RESULT} == 1 ] ; then docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-multiarch-patch-date: + extends: .docker-deploy-multiarch-patch-date + 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-patch-date + +docker-deploy-stress-tests-multiarch-patch-date: + extends: .docker-deploy-multiarch-patch-date + 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-patch-date