From 307b03056889e4490735f14472492f61918d61ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=20Gl=C3=A4=C3=9F-St=C3=B6cker?= Date: Wed, 20 Oct 2021 17:54:00 +0200 Subject: [PATCH 1/7] first version of docker multiarch build ci --- .gitlab-ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cc53c2ea8..339081438 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -268,6 +268,7 @@ docker_release: services: - docker:20-dind before_script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - cp -r front/dist api/frontend - (if [ "$CI_COMMIT_REF_NAME" == "develop" ] || [ "$CI_COMMIT_REF_NAME" == "stable" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); @@ -275,11 +276,8 @@ docker_release: - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi - if [[ "$CI_COMMIT_REF_NAME" =~ ^[0-9]+(.[0-9]+){1,2}$ ]]; then export stable=1 && export major="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1)" && export minor="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1,2)"; fi - cd api - - docker build -t $IMAGE $DOCKER_LATEST_TAG . - - docker push $IMAGE - - if [[ ! -z "$DOCKER_LATEST_TAG" ]]; then docker push $IMAGE_LATEST; fi - - if [[ $stable == 1 ]]; then docker tag $IMAGE $IMAGE_NAME:$major && docker push $IMAGE_NAME:$major; fi - - if [[ $stable == 1 ]]; then docker tag $IMAGE $IMAGE_NAME:$minor && docker push $IMAGE_NAME:$minor; fi + - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA + - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE -t $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-$(date +%Y-%m-%d) -t $IMAGE_LATEST . only: - develop@funkwhale/funkwhale - stable@funkwhale/funkwhale -- GitLab From 9d573a24f65f1789922e36e841b184d63142577a Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 3 Nov 2021 16:42:08 +0100 Subject: [PATCH 2/7] Distinguish different docker builds on CI level --- .gitlab-ci.yml | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 339081438..f12d5f8ea 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -262,7 +262,7 @@ pages: tags: - docker -docker_release: +.docker_publish: stage: deploy image: egon0/docker-with-buildx-and-git:bash services: @@ -271,17 +271,44 @@ docker_release: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - cp -r front/dist api/frontend - - (if [ "$CI_COMMIT_REF_NAME" == "develop" ] || [ "$CI_COMMIT_REF_NAME" == "stable" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); script: - - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi - - if [[ "$CI_COMMIT_REF_NAME" =~ ^[0-9]+(.[0-9]+){1,2}$ ]]; then export stable=1 && export major="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1)" && export minor="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1,2)"; fi + +docker_publish_stable_release: + # Publish a docker image for releases + extends: .docker_publish + rules: + - if: $CI_COMMIT_TAG && '$CI_COMMIT_REF_NAME =~ ^[0-9]+(.[0-9]+){1,2}$' + script: + # Check if this is the latest release + - ./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG - && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; + - export major="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1)" + - export minor="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1,2)"; fi + - cd api + - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA + - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE -t $DOCKER_LATEST_TAG -t $major -t $minor . + +docker_publish_unstable_release: + # Publish a docker image for releases + extends: .docker_publish + rules: + - if: $CI_COMMIT_TAG && '$CI_COMMIT_REF_NAME !~ ^[0-9]+(.[0-9]+){1,2}$' + script: + # Check if this is the latest release - cd api - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE -t $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-$(date +%Y-%m-%d) -t $IMAGE_LATEST . + - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE . + +docker_published_non-release: + # Publish a docker image for each commit on develop + extends: .docker_publish only: - develop@funkwhale/funkwhale - stable@funkwhale/funkwhale - - tags@funkwhale/funkwhale + script: + - ./scripts/set-api-build-metadata.sh $CI_COMMIT_SHA + - cd api + - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA + - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE . docker_all_in_one_release: stage: deploy -- GitLab From 0cbf8136b67062b5aebc86e3a09a6e1bf1a8ad3a Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 5 Nov 2021 10:28:57 +0100 Subject: [PATCH 3/7] Fix tag regexes --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f12d5f8ea..c73768b07 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -277,7 +277,7 @@ docker_publish_stable_release: # Publish a docker image for releases extends: .docker_publish rules: - - if: $CI_COMMIT_TAG && '$CI_COMMIT_REF_NAME =~ ^[0-9]+(.[0-9]+){1,2}$' + - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME =~ /^[0-9]+(.[0-9]+){1,2}$/ script: # Check if this is the latest release - ./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG - && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; @@ -291,7 +291,7 @@ docker_publish_unstable_release: # Publish a docker image for releases extends: .docker_publish rules: - - if: $CI_COMMIT_TAG && '$CI_COMMIT_REF_NAME !~ ^[0-9]+(.[0-9]+){1,2}$' + - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME !~ /^[0-9]+(.[0-9]+){1,2}$/ script: # Check if this is the latest release - cd api -- GitLab From a695898ea9ad02e6cf5a4bcc2da57f253954fad0 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 5 Nov 2021 10:42:22 +0100 Subject: [PATCH 4/7] Specify build platforms --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c73768b07..ad632f446 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,6 +12,7 @@ variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" + BUILD_PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7 stages: - review -- GitLab From 4f029f2659cf52fbdcd0708af4960fa300fe5387 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 5 Nov 2021 12:59:55 +0100 Subject: [PATCH 5/7] Only build docker images on runners with multiarch capabilities --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ad632f446..2eaaaa4e9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -266,6 +266,8 @@ pages: .docker_publish: stage: deploy image: egon0/docker-with-buildx-and-git:bash + tags: + - multiarch services: - docker:20-dind before_script: -- GitLab From 0eb6aaa7360c4182b25f894ba70ac304620ee7cb Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 5 Nov 2021 13:37:59 +0100 Subject: [PATCH 6/7] Fix stable image tagging --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2eaaaa4e9..a710afdf3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -288,7 +288,7 @@ docker_publish_stable_release: - export minor="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1,2)"; fi - cd api - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE -t $DOCKER_LATEST_TAG -t $major -t $minor . + - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE -t $DOCKER_LATEST_TAG -t $IMAGE_NAME:$major -t $IMAGE_NAME:$minor . docker_publish_unstable_release: # Publish a docker image for releases -- GitLab From a7ec77e6427f5ecc28a26b85ce46620e77b3d03e Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 5 Nov 2021 14:34:55 +0100 Subject: [PATCH 7/7] Use the short COMMIT_SHA as version appendix --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a710afdf3..bc9bc5ea9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -308,7 +308,7 @@ docker_published_non-release: - develop@funkwhale/funkwhale - stable@funkwhale/funkwhale script: - - ./scripts/set-api-build-metadata.sh $CI_COMMIT_SHA + - ./scripts/set-api-build-metadata.sh $CI_COMMIT_SHORT_SHA - cd api - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE . -- GitLab