Skip to content
Snippets Groups Projects
.gitlab-ci.yml 6.1 KiB
Newer Older
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 == "master" ]]; then
      export CI_APP_TAG=${CI_APP_TAG:-latest}
    elif [[ $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
  - >
    export VERSION_MAJ_MIN_PAT=$R_VERSION
    
    export VERSION_MAJ_MIN=`echo $VERSION_MAJ_MIN_PAT |
    sed -n "s|\([[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"`
    
    export VERSION_MAJ=`echo $VERSION_MAJ_MIN_PAT |
    sed -n "s|\([[:digit:]]\+\).*|\1|p"`
Olivier Benz's avatar
Olivier Benz committed

Olivier Benz's avatar
Olivier Benz committed
.build:
  image: registry.gitlab.b-data.ch/docker/docker-buildx:latest
  stage: build
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: "/certs"
    R_VERSION: "4.2.0"
    CRAN: "https://cloud.r-project.org"
Olivier Benz's avatar
Olivier Benz committed
  before_script:
    - *before-script-build
Olivier Benz's avatar
Olivier Benz committed

Olivier Benz's avatar
Olivier Benz committed
build:latest-linux-amd64:
  extends: .build
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg CRAN
      --build-arg R_VERSION
      -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
      -f r-ver/latest.Dockerfile .
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "master" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
      changes:
        - r-ver/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

Olivier Benz's avatar
Olivier Benz committed
build:latest-linux-arm64v8:
  extends: .build
  tags:
    - arch:arm64/v8
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg CRAN
      --build-arg R_VERSION
      -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
Olivier Benz's avatar
Olivier Benz committed
      -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
      -f r-ver/latest.Dockerfile .
    - docker push -a $CI_APP_REPO
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "master" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
      changes:
        - r-ver/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

build:version-linux-amd64:
  extends: .build
  tags:
    - arch:amd64
    - os:linux
  script:
    - >
      docker build --pull
      --build-arg CRAN
      --build-arg R_VERSION
      -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
      -f r-ver/$R_VERSION.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
      changes:
        - r-ver/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

build:version-linux-arm64v8:
  extends: .build
  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 CRAN
      --build-arg R_VERSION
      -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      -f r-ver/$R_VERSION.Dockerfile .
Olivier Benz's avatar
Olivier Benz committed
    - docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
      changes:
        - r-ver/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

build-manifest:latest-linux-multiarch:
  extends: .build
  stage: deploy
  script:
    - |
      for i in $OS_ARCH; do
        export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i"
      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
      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
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG
    - |
Olivier Benz's avatar
Olivier Benz committed
      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN_PAT $CI_MANIFEST_LIST
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_PAT \
          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT
    - |
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
      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
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
    - |
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
      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
      fi
      docker manifest push $CI_APP_REPO:$VERSION_MAJ
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
      changes:
        - r-ver/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
build-manifest:version-linux-multiarch:
  extends: .build
  stage: deploy
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"
      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
      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
      fi
      docker manifest push $CI_APP_REPO:$CI_APP_TAG
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version"
      changes:
        - r-ver/$R_VERSION.Dockerfile
Olivier Benz's avatar
Olivier Benz committed
trigger-latest-build:
Olivier Benz's avatar
Olivier Benz committed
  extends: .build
  stage: .post
Olivier Benz's avatar
Olivier Benz committed
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
Olivier Benz's avatar
Olivier Benz committed
  script:
    - curl -X POST -F token=$ROCKER_RSTUDIO -F ref=master https://gitlab.b-data.ch/api/v4/projects/185/trigger/pipeline
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
Olivier Benz's avatar
Olivier Benz committed
      changes:
        - r-ver/latest.Dockerfile
Olivier Benz's avatar
Olivier Benz committed

trigger-version-build:
Olivier Benz's avatar
Olivier Benz committed
  extends: .build
  stage: .post
Olivier Benz's avatar
Olivier Benz committed
  before_script:
    - apk upgrade --no-cache
    - apk add --update --no-cache curl
Olivier Benz's avatar
Olivier Benz committed
  script:
    - curl -X POST -F token=$ROCKER_RSTUDIO -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/185/trigger/pipeline
Olivier Benz's avatar
Olivier Benz committed
  rules:
    - if: $CI_COMMIT_BRANCH == "freeze-version"
      changes:
        - r-ver/$R_VERSION.Dockerfile