Skip to content
Snippets Groups Projects
.gitlab-ci.yml 33.2 KiB
Newer Older
Olivier Benz's avatar
Olivier Benz committed
.env:
  variables:
Olivier Benz's avatar
Olivier Benz committed
    R_VERSION: "4.4.3"
    QGIS_VERSION: "3.42.0"
    OTB_VERSION: "9.1.0"
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}
    if [[ $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "freeze-version" ]]; then
      export CI_APP_TAG=${CI_APP_TAG:-$R_VERSION}
    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
  - >
    export VERSION_MAJ_MIN=`echo $R_VERSION |
    sed -n "s|\([[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"`
    
    export VERSION_MAJ=`echo $R_VERSION |
    sed -n "s|\([[:digit:]]\+\).*|\1|p"`

.build:
  image: glcr.b-data.ch/docker/docker:dind
  extends: .env
  services:
    - name: glcr.b-data.ch/docker/docker:dind
      alias: docker
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: "/certs"
    BUILDX_NO_DEFAULT_ATTESTATIONS: "true"
  before_script:
    - *before-script-build
  retry: 2

.post:
  image: glcr.b-data.ch/docker/docker:dind
  stage: .post
  extends: .env

stages:
  - .pre
  - build1
  - build2
  - test
  - deploy
  - .post

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

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

build:version-linux-amd64:
  extends: .build
  stage: build1
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      cd qgisprocess && docker build --pull
Olivier Benz's avatar
Olivier Benz committed
      --build-arg BASE_IMAGE
      --build-arg BASE_IMAGE_TAG
      --build-arg BUILD_ON_IMAGE
      --build-arg SAGA_VERSION
Olivier Benz's avatar
Olivier Benz committed
      --build-arg OTB_VERSION
      --build-arg PROC_SAGA_NG_VERSION
Olivier Benz's avatar
Olivier Benz committed
      --build-arg NCPUS=$((`nproc`/2+1))
      --build-arg BUILD_START=$(date -uIseconds)
      -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
      -f $R_VERSION.Dockerfile .
    - >
      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-root-linux-amd64
      -f ../common/subtags/root/Dockerfile .
    - >
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
      changes:
        - qgisprocess/$R_VERSION.Dockerfile

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

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

build-manifest:version-linux-multiarch:
  extends: .build
  stage: build1
  needs: ["build:version-linux-amd64", "build:version-linux-arm64v8"]
  script:
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i"
        export CI_MANIFEST_LIST_ROOT="$CI_MANIFEST_LIST_ROOT $CI_APP_REPO:$CI_APP_TAG-root-$i"
        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"
      done
    - |
      docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:$CI_APP_TAG-root $CI_MANIFEST_LIST_ROOT
      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
      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
        docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG-root \
          $CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
        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
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-root
      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
      changes:
        - qgisprocess/$R_VERSION.Dockerfile

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)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      -t $CI_APP_REPO:latest-devtools-linux-amd64
      -f common/subtags/devtools/latest.Dockerfile .
    - >
      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-root-linux-amd64
      -t $CI_APP_REPO:latest-devtools-root-linux-amd64
      -f common/subtags/root/Dockerfile .
    - >
      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 .
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      docker push $CI_APP_REPO:latest-devtools-linux-amd64
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
      docker push $CI_APP_REPO:latest-devtools-root-linux-amd64
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
      changes:
        - qgisprocess/latest.Dockerfile
        - 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)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      -t $CI_APP_REPO:latest-devtools-linux-arm64v8
      -f common/subtags/devtools/latest.Dockerfile .
    - >
      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-root-linux-arm64v8
      -t $CI_APP_REPO:latest-devtools-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
    - >
      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 .
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      docker push $CI_APP_REPO:latest-devtools-linux-arm64v8
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
      docker push $CI_APP_REPO:latest-devtools-root-linux-arm64v8
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
      changes:
        - qgisprocess/latest.Dockerfile
        - 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)
      -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)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
      -f common/subtags/root/Dockerfile .
    - >
      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 .
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-amd64
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-amd64
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
      changes:
        - qgisprocess/$R_VERSION.Dockerfile
        - 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)
      -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)
      -t $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
      -f common/subtags/root/Dockerfile .
    - >
      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 .
    - |
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
      docker push $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
      changes:
        - qgisprocess/$R_VERSION.Dockerfile
        - 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"
        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"
      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
      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
      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
        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
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-root
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root
    - |
      docker manifest create $CI_APP_REPO:latest-devtools $CI_MANIFEST_LIST
      docker manifest create $CI_APP_REPO:latest-devtools-root $CI_MANIFEST_LIST_ROOT
      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
      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools \
          $CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
        docker manifest annotate --variant v8 $CI_APP_REPO:latest-devtools-root \
          $CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
        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
      fi
      docker manifest push $CI_APP_REPO:latest-devtools
      docker manifest push $CI_APP_REPO:latest-devtools-root
      docker manifest push $CI_APP_REPO:latest-devtools-docker
      docker manifest push $CI_APP_REPO:latest-devtools-docker-root
    - |
      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
    - |
      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
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $UPDATE_MODE != "true"
      changes:
        - qgisprocess/latest.Dockerfile
        - 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"
        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"
      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
      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
      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
        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
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-root
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker
      docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
      changes:
        - qgisprocess/$R_VERSION.Dockerfile
        - common/subtags/devtools/$R_VERSION.Dockerfile