Skip to content
Snippets Groups Projects
.gitlab-ci.yml 37.2 KiB
Newer Older
Olivier Benz's avatar
Olivier Benz committed
.env:
  variables:
Olivier Benz's avatar
Olivier Benz committed
    R_VERSION: "4.4.2"
Olivier Benz's avatar
Olivier Benz committed
    TAG_VERSION_MAJ_MIN: "false"
Olivier Benz's avatar
Olivier Benz committed
    TAG_VERSION_MAJ: "false"
Olivier Benz's avatar
Olivier Benz committed
.before-script-build: &before-script-build
  - |
    if [[ ! -z "$CI_BUILD_PLATFORMS" ]]; then
      export OS_ARCH=`echo $CI_BUILD_PLATFORMS | tr ' ' '\n' | \
      sed 's|\/||2' | sed 's|\/|-|' | tr '\n' ' '`
    fi
  - |
    export CI_APP_REPO=${CI_APP_REPO:-$CI_REGISTRY_IMAGE}
Olivier Benz's avatar
Olivier Benz committed
    if [[ $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "freeze-version" ]]; then
      export CI_APP_TAG=${CI_APP_TAG:-$R_VERSION}
Olivier Benz's avatar
Olivier Benz committed
    else
      export CI_APP_TAG=${CI_APP_TAG:-$CI_COMMIT_SHA}
    fi
  - >
    echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER
    --password-stdin $CI_REGISTRY
Olivier Benz's avatar
Olivier Benz committed
  - >
Olivier Benz's avatar
Olivier Benz committed
    export VERSION_MAJ_MIN=`echo $R_VERSION |
Olivier Benz's avatar
Olivier Benz committed
    sed -n "s|\([[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"`
    
Olivier Benz's avatar
Olivier Benz committed
    export VERSION_MAJ=`echo $R_VERSION |
Olivier Benz's avatar
Olivier Benz committed
    sed -n "s|\([[:digit:]]\+\).*|\1|p"`
Olivier Benz's avatar
Olivier Benz committed

.build:
  image: glcr.b-data.ch/docker/docker:dind
Olivier Benz's avatar
Olivier Benz committed
  extends: .env
Olivier Benz's avatar
Olivier Benz committed
  services:
    - name: glcr.b-data.ch/docker/docker:dind
      alias: docker
Olivier Benz's avatar
Olivier Benz committed
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: "/certs"
    BUILDX_NO_DEFAULT_ATTESTATIONS: "true"
Olivier Benz's avatar
Olivier Benz committed
  before_script:
    - *before-script-build
  retry: 2
Olivier Benz's avatar
Olivier Benz committed
.post:
  image: glcr.b-data.ch/docker/docker:dind
Olivier Benz's avatar
Olivier Benz committed
  stage: .post
Olivier Benz's avatar
Olivier Benz committed
  extends: .env
Olivier Benz's avatar
Olivier Benz committed
stages:
  - .pre
  - build1
  - build2
  - test
  - deploy
  - .post

Olivier Benz's avatar
Olivier Benz committed
build:latest-linux-amd64:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE
      --build-arg R_VERSION
      --build-arg NCPUS=$((`nproc`/2+1))
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-linux-amd64
      -f geospatial/latest.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
Olivier Benz's avatar
Olivier Benz committed
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-linux-amd64
      -t $CI_APP_REPO:latest-docker-linux-amd64
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-docker-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-amd64
      -t $CI_APP_REPO:latest-docker-root-linux-amd64
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/latest.Dockerfile

build:latest-linux-arm64v8:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  tags:
    - arch:arm64/v8
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE
      --build-arg R_VERSION
      --build-arg NCPUS=$((`nproc`/2+1))
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-linux-arm64v8
      -f geospatial/latest.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
Olivier Benz's avatar
Olivier Benz committed
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
      -t $CI_APP_REPO:latest-docker-linux-arm64v8
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
      -t $CI_APP_REPO:latest-docker-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/latest.Dockerfile

build:version-linux-amd64:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE
      --build-arg NCPUS=$((`nproc`/2+1))
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
      -f geospatial/$R_VERSION.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-linux-amd64
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-docker-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-amd64
      -f common/subtags/root/Dockerfile .
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

build:version-linux-arm64v8:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  tags:
    - arch:arm64/v8
    - os:linux
Olivier Benz's avatar
Olivier Benz committed
  script:
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE
      --build-arg NCPUS=$((`nproc`/2+1))
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      -f geospatial/$R_VERSION.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

build-manifest:latest-linux-multiarch:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  needs: ["build:latest-linux-amd64", "build:latest-linux-arm64v8"]
Olivier Benz's avatar
Olivier Benz committed
  script:
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_ROOT="$CI_MANIFEST_LIST_ROOT $CI_APP_REPO:$CI_APP_TAG-root-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_DOCKER="$CI_MANIFEST_LIST_DOCKER $CI_APP_REPO:$CI_APP_TAG-docker-$i"
        export CI_MANIFEST_LIST_DOCKER_ROOT="$CI_MANIFEST_LIST_DOCKER_ROOT $CI_APP_REPO:$CI_APP_TAG-docker-root-$i"
Olivier Benz's avatar
Olivier Benz committed
      done
Olivier Benz's avatar
Olivier Benz committed
    - |
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-root \
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-docker \
          $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:latest $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:latest-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:latest-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:latest-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest \
Olivier Benz's avatar
Olivier Benz committed
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-root \
Olivier Benz's avatar
Olivier Benz committed
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-docker \
          $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:latest
      docker manifest push $CI_APP_REPO:latest-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:latest-docker
      docker manifest push $CI_APP_REPO:latest-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-root \
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker \
          $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-root \
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-docker \
          $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-docker
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-docker-root
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true"
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
build-manifest:version-linux-multiarch:
  extends: .build
Olivier Benz's avatar
Olivier Benz committed
  stage: build1
Olivier Benz's avatar
Olivier Benz committed
  needs: ["build:version-linux-amd64", "build:version-linux-arm64v8"]
Olivier Benz's avatar
Olivier Benz committed
  script:
Olivier Benz's avatar
Olivier Benz committed
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_ROOT="$CI_MANIFEST_LIST_ROOT $CI_APP_REPO:$CI_APP_TAG-root-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_DOCKER="$CI_MANIFEST_LIST_DOCKER $CI_APP_REPO:$CI_APP_TAG-docker-$i"
        export CI_MANIFEST_LIST_DOCKER_ROOT="$CI_MANIFEST_LIST_DOCKER_ROOT $CI_APP_REPO:$CI_APP_TAG-docker-root-$i"
Olivier Benz's avatar
Olivier Benz committed
      done
Olivier Benz's avatar
Olivier Benz committed
    - |
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-root \
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-docker \
          $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker-root
Olivier Benz's avatar
Olivier Benz committed
      
      if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-root $CI_MANIFEST_LIST_ROOT
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker $CI_MANIFEST_LIST_DOCKER
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
        if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
            $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-root \
            $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker \
            $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root \
            $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
        fi
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-root
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root
      fi
      
      if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
        docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-root $CI_MANIFEST_LIST_ROOT
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-docker $CI_MANIFEST_LIST_DOCKER
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
        if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
            $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-root \
            $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-docker \
            $CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-docker-root \
            $CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
        fi
        docker manifest push $CI_APP_REPO:$VERSION_MAJ
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-root
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-docker
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-docker-root
      fi
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
trigger-latest-build:
  extends: .post
  stage: .post
  needs: ["build-manifest:latest-linux-multiarch"]
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
  script:
    - curl -X POST -F token=$JUPYTERLAB_R_QGISPROCESS -F ref=main https://gitlab.b-data.ch/api/v4/projects/332/trigger/pipeline
  rules:
    - if: $CUDA_IMAGE
      when: never
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true"
      changes:
        - geospatial/latest.Dockerfile

trigger-version-build:
  extends: .post
  stage: .post
  needs: ["build-manifest:version-linux-multiarch"]
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
  script:
    - curl -X POST -F token=$JUPYTERLAB_R_QGISPROCESS -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/332/trigger/pipeline
  rules:
    - if: $CUDA_IMAGE
      when: never
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
      changes:
        - geospatial/$R_VERSION.Dockerfile

trigger-latest-cuda-build:
  extends: .post
  stage: .post
  needs: ["build-manifest:latest-linux-multiarch"]
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
  script:
    - curl -X POST -F token=$JUPYTERLAB_CUDA_R_QGISPROCESS -F ref=main https://gitlab.b-data.ch/api/v4/projects/333/trigger/pipeline
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CUDA_IMAGE
      changes:
        - geospatial/latest.Dockerfile

trigger-version-cuda-build:
  extends: .post
  stage: .post
  needs: ["build-manifest:version-linux-multiarch"]
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
  script:
    - curl -X POST -F token=$JUPYTERLAB_CUDA_R_QGISPROCESS -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/333/trigger/pipeline
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CUDA_IMAGE
      changes:
        - geospatial/$R_VERSION.Dockerfile

Olivier Benz's avatar
Olivier Benz committed
build:latest-devtools-linux-amd64:
  extends: .build
  stage: build2
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO
      --build-arg R_VERSION
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-devtools-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/devtools/latest.Dockerfile .
    - >
      docker build
Olivier Benz's avatar
Olivier Benz committed
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-devtools-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      -t $CI_APP_REPO:latest-devtools-docker-linux-amd64
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-amd64
      -t $CI_APP_REPO:latest-devtools-docker-root-linux-amd64
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:latest-devtools-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:latest-devtools-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      docker push $CI_APP_REPO:latest-devtools-docker-linux-amd64
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-amd64
      docker push $CI_APP_REPO:latest-devtools-docker-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/latest.Dockerfile

build:latest-devtools-linux-arm64v8:
  extends: .build
  stage: build2
  tags:
    - arch:arm64/v8
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO
      --build-arg R_VERSION
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-devtools-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/devtools/latest.Dockerfile .
    - >
      docker build
Olivier Benz's avatar
Olivier Benz committed
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:latest-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      -t $CI_APP_REPO:latest-devtools-docker-linux-arm64v8
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
      -t $CI_APP_REPO:latest-devtools-docker-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:latest-devtools-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:latest-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      docker push $CI_APP_REPO:latest-devtools-docker-linux-arm64v8
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
      docker push $CI_APP_REPO:latest-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/latest.Dockerfile

build:version-devtools-linux-amd64:
  extends: .build
  stage: build2
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      -f common/subtags/devtools/$R_VERSION.Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-amd64
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-amd64
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
  rules:
Olivier Benz's avatar
Olivier Benz committed
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/$R_VERSION.Dockerfile

build:version-devtools-linux-arm64v8:
  extends: .build
  stage: build2
  tags:
    - arch:arm64/v8
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      -f common/subtags/devtools/$R_VERSION.Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      -f common/subtags/docker/Dockerfile .
    - >
      docker build
      --build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
  rules:
Olivier Benz's avatar
Olivier Benz committed
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/$R_VERSION.Dockerfile

build-manifest:latest-devtools-linux-multiarch:
  extends: .build
  stage: build2
  needs: ["build:latest-devtools-linux-amd64", "build:latest-devtools-linux-arm64v8"]
  script:
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-devtools-$i"
        export CI_MANIFEST_LIST_ROOT="$CI_MANIFEST_LIST_ROOT $CI_APP_REPO:$CI_APP_TAG-devtools-root-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_DOCKER="$CI_MANIFEST_LIST_DOCKER $CI_APP_REPO:$CI_APP_TAG-devtools-docker-$i"
        export CI_MANIFEST_LIST_DOCKER_ROOT="$CI_MANIFEST_LIST_DOCKER_ROOT $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-$i"
Olivier Benz's avatar
Olivier Benz committed
      done
    - |
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools \
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-docker \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:latest-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:latest-devtools-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:latest-devtools-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:latest-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools \
Olivier Benz's avatar
Olivier Benz committed
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools-root \
Olivier Benz's avatar
Olivier Benz committed
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools-docker \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:latest-devtools
      docker manifest push $CI_APP_REPO:latest-devtools-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:latest-devtools-docker
      docker manifest push $CI_APP_REPO:latest-devtools-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools \
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools \
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-docker \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-docker
      docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true"
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/latest.Dockerfile

build-manifest:version-devtools-linux-multiarch:
  extends: .build
  stage: build2
  needs: ["build:version-devtools-linux-amd64", "build:version-devtools-linux-arm64v8"]
  script:
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-devtools-$i"
        export CI_MANIFEST_LIST_ROOT="$CI_MANIFEST_LIST_ROOT $CI_APP_REPO:$CI_APP_TAG-devtools-root-$i"
Olivier Benz's avatar
Olivier Benz committed
        export CI_MANIFEST_LIST_DOCKER="$CI_MANIFEST_LIST_DOCKER $CI_APP_REPO:$CI_APP_TAG-devtools-docker-$i"
        export CI_MANIFEST_LIST_DOCKER_ROOT="$CI_MANIFEST_LIST_DOCKER_ROOT $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-$i"
Olivier Benz's avatar
Olivier Benz committed
      done
    - |
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-root $CI_MANIFEST_LIST_ROOT
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-docker $CI_MANIFEST_LIST_DOCKER
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
Olivier Benz's avatar
Olivier Benz committed
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools \
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-docker \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-root
Olivier Benz's avatar
Olivier Benz committed
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root
Olivier Benz's avatar
Olivier Benz committed
      
      if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools $CI_MANIFEST_LIST
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root $CI_MANIFEST_LIST_ROOT
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker $CI_MANIFEST_LIST_DOCKER
        docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
        if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools \
            $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root \
            $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker \
            $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root \
            $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
        fi
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker
        docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root
      fi
      
      if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools $CI_MANIFEST_LIST
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-root $CI_MANIFEST_LIST_ROOT
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-docker $CI_MANIFEST_LIST_DOCKER
        docker manifest create $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
        if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools \
            $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-root \
            $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-docker \
            $CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
          docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root \
            $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
        fi
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-root
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-docker
        docker manifest push $CI_APP_REPO:$VERSION_MAJ-devtools-docker-root
      fi
Olivier Benz's avatar
Olivier Benz committed
  rules:
Olivier Benz's avatar
Olivier Benz committed
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
Olivier Benz's avatar
Olivier Benz committed
      changes:
Olivier Benz's avatar
Olivier Benz committed
        - geospatial/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
        - common/subtags/devtools/$R_VERSION.Dockerfile