Newer
Older
.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
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_PAT=`sed -n
"s|.*R_VERSION:-\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"
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"`
.build:
image: registry.gitlab.b-data.ch/docker/docker-buildx:latest
stage: build
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
CRAN: https://cloud.r-project.org
build:latest-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --build-arg CRAN=$CRAN --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
-f r-ver/$CI_APP_TAG.Dockerfile .
- |
docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
build:latest-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- >
docker build --build-arg CRAN=$CRAN --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
-f r-ver/$CI_APP_TAG.Dockerfile .
- |
docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
build:version-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --build-arg CRAN=$CRAN --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-f r-ver/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
build:version-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
- >
docker build --build-arg CRAN=$CRAN --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-f r-ver/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
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
- >
docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
&& docker manifest push $CI_APP_REPO:$CI_APP_TAG
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN_PAT $CI_MANIFEST_LIST
&& docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
&& docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
&& docker manifest push $CI_APP_REPO:$VERSION_MAJ
rules:
- if: $CI_COMMIT_BRANCH == "master"
changes:
build-manifest:version-linux-multiarch:
extends: .build
stage: deploy
- |
for i in $OS_ARCH; do
export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i"
done
- >
docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
&& docker manifest push $CI_APP_REPO:$CI_APP_TAG
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version"
changes:
script:
- curl -X POST -F token=$R_TIDYVERSE -F ref=master https://gitlab.b-data.ch/api/v4/projects/173/trigger/pipeline
- curl -X POST -F token=$R_PLUMBER -F ref=master https://gitlab.b-data.ch/api/v4/projects/176/trigger/pipeline
rules:
- if: $CI_COMMIT_BRANCH == "master" && $R_VERSION_UPDATE != "true"
changes:
script:
- curl -X POST -F token=$ROCKER_RSTUDIO -F ref=master https://gitlab.b-data.ch/api/v4/projects/185/trigger/pipeline
script:
- curl -X POST -F token=$ROCKER_RSTUDIO -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/185/trigger/pipeline
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version"
changes: