Skip to content
Snippets Groups Projects
Commit 7d16e6ab authored by Olivier Benz's avatar Olivier Benz
Browse files

Test multi-arch build

- Update JupyterLab to version 3.0.10
- Update tini to v0.19.0
parent e7ece042
No related branches found
No related tags found
No related merge requests found
image: docker
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
R_VERSION_UPDATE: "false"
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- export VERSION_MAJ_MIN_PAT=`cat geospatial/latest.Dockerfile | head -n1 | sed 's/.*\([0-9].[0-9].[0-9]\)/\1/'`
- export VERSION_MAJ_MIN=`echo "${VERSION_MAJ_MIN_PAT:0:3}"`
- export VERSION_MAJ=`echo "${VERSION_MAJ_MIN_PAT:0:1}"`
build-latest:
.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:-4.0.3}
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|.*verse:\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"
geospatial/$CI_APP_TAG.Dockerfile | head -1`
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"
R_VERSION_UPDATE: "true"
before_script:
- *before-script-build
build:latest-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
-f geospatial/$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" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- geospatial/latest.Dockerfile
build:latest-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
-f geospatial/$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" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- geospatial/latest.Dockerfile
build:version-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-f geospatial/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- geospatial/4.0.3.Dockerfile
build:version-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- cd geospatial && docker build --pull -t $CI_REGISTRY_IMAGE:latest -f latest.Dockerfile .
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ
- docker push $CI_REGISTRY_IMAGE:latest
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-f geospatial/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- geospatial/4.0.3.Dockerfile
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" && $R_VERSION_UPDATE != "true"
changes:
- geospatial/latest.Dockerfile
build-version:
stage: build
build-manifest:version-linux-multiarch:
extends: .build
stage: deploy
script:
- cd geospatial && docker build --pull -t $CI_REGISTRY_IMAGE:4.0.3 -f 4.0.3.Dockerfile .
- docker push $CI_REGISTRY_IMAGE:4.0.3
- |
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" && $R_VERSION_UPDATE != "true"
changes:
......
......@@ -53,6 +53,7 @@ RUN apt-get update \
geoR \
geosphere \
## from bioconductor
## ‘rhdf5’ and ‘rhdf5filters’ have non-zero exit status on aarch64
&& R -e "BiocManager::install('rhdf5', update=FALSE, ask=FALSE)" \
## Clean up
&& rm -rf /tmp/* \
......
image: docker
services:
- docker:dind
.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:-4.0.3}
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-ver:\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"
r-ver/$CI_APP_TAG.Dockerfile | head -1`
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"`
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
.build:
image: registry.gitlab.b-data.ch/docker/docker-buildx:latest
stage: build
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- *before-script-build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- export VERSION_MAJ_MIN_PAT=`sed -n "s|.*r-ver:\([0-9]\.[0-9]\.[0-9]\).*|\1|p" r-ver/latest.Dockerfile`
- export VERSION_MAJ_MIN=`echo "${VERSION_MAJ_MIN_PAT:0:3}"`
- export VERSION_MAJ=`echo "${VERSION_MAJ_MIN_PAT:0:1}"`
build:latest-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
cd r-ver && docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
-f $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:
- r-ver/latest.Dockerfile
build-latest:
stage: build
build:latest-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- cd r-ver && docker build --pull -t $CI_REGISTRY_IMAGE:latest -f latest.Dockerfile .
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ
- docker push $CI_REGISTRY_IMAGE:latest
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ
- >
cd r-ver && docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
-f $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_REF_NAME == "master"
- if: $CI_COMMIT_BRANCH == "master" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- r-ver/latest.Dockerfile
build-version:
stage: build
build:version-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- cd r-ver && docker build --pull -t $CI_REGISTRY_IMAGE:4.0.3 -f 4.0.3.Dockerfile .
- docker push $CI_REGISTRY_IMAGE:4.0.3
- >
cd r-ver && docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-f $CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
rules:
- if: $CI_COMMIT_REF_NAME == "freeze-version"
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- r-ver/4.0.3.Dockerfile
trigger-latest-build:
build:version-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- >
cd r-ver && docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-f $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:
- r-ver/4.0.3.Dockerfile
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:
- r-ver/latest.Dockerfile
build-manifest:version-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
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version"
changes:
- r-ver/4.0.3.Dockerfile
trigger-latest-build:
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_TIDYVERSE -F ref=master https://gitlab.b-data.ch/api/v4/projects/167/trigger/pipeline
rules:
......@@ -51,10 +158,10 @@ trigger-latest-build:
- r-ver/latest.Dockerfile
trigger-version-build:
stage: deploy
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_TIDYVERSE -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/167/trigger/pipeline
rules:
......
......@@ -17,7 +17,7 @@ ENV NB_USER=${NB_USER:-jovyan} \
NB_UID=${NB_UID:-1000} \
NB_GID=${NB_GID:-100} \
JUPYTERHUB_VERSION=${JUPYTERHUB_VERSION:-1.3.0} \
JUPYTERLAB_VERSION=${JUPYTERLAB_VERSION:-3.0.9} \
JUPYTERLAB_VERSION=${JUPYTERLAB_VERSION:-3.0.10} \
CODE_SERVER_RELEASE=${CODE_SERVER_RELEASE:-3.9.1} \
CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/extensions \
PANDOC_VERSION=${PANDOC_VERSION:-2.10.1}
......@@ -65,9 +65,9 @@ RUN apt-get update \
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Bold\ Italic.ttf \
&& fc-cache -fv \
## Install pandoc
&& curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-amd64.deb \
&& dpkg -i pandoc-${PANDOC_VERSION}-1-amd64.deb \
&& rm pandoc-${PANDOC_VERSION}-1-amd64.deb \
&& curl -sLO https://dl.b-data.ch/pandoc/releases/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-$(dpkg --print-architecture).deb \
&& dpkg -i pandoc-${PANDOC_VERSION}-1-$(dpkg --print-architecture).deb \
&& rm pandoc-${PANDOC_VERSION}-1-$(dpkg --print-architecture).deb \
## configure git not to request password each time
&& git config --system credential.helper "cache --timeout=3600" \
## Add user
......@@ -76,16 +76,24 @@ RUN apt-get update \
## Install code-server
RUN mkdir -p ${CODE_BUILTIN_EXTENSIONS_DIR} \
&& cd /opt/code-server \
&& curl -sL https://github.com/cdr/code-server/releases/download/v${CODE_SERVER_RELEASE}/code-server-${CODE_SERVER_RELEASE}-linux-amd64.tar.gz | tar zxf - --strip-components=1 \
&& curl -sL https://github.com/cdr/code-server/releases/download/v${CODE_SERVER_RELEASE}/code-server-${CODE_SERVER_RELEASE}-linux-$(dpkg --print-architecture).tar.gz | tar zxf - --strip-components=1 \
&& curl -sL https://upload.wikimedia.org/wikipedia/commons/9/9a/Visual_Studio_Code_1.35_icon.svg -o vscode.svg \
&& cd /
ENV PATH=/opt/code-server/bin:$PATH
## Install JupyterLab
RUN curl -sLO https://bootstrap.pypa.io/get-pip.py \
RUN dpkgArch="$(dpkg --print-architecture)" \
&& curl -sLO https://bootstrap.pypa.io/get-pip.py \
&& python3 get-pip.py \
&& rm get-pip.py \
## Install python3-dev to build argon2-cffi on aarch64
## https://github.com/hynek/argon2-cffi/issues/73
&& if [ "$dpkgArch" = "arm64" ]; then \
DEPS=python3-dev; \
apt-get update; \
apt-get install -y --no-install-recommends $DEPS; \
fi \
## Install Python packages
&& pip3 install \
jupyter-server-proxy \
......@@ -95,6 +103,10 @@ RUN curl -sLO https://bootstrap.pypa.io/get-pip.py \
notebook \
nbconvert \
radian \
## Remove python3-dev
&& if [ "$dpkgArch" = "arm64" ]; then \
apt-get remove --purge -y $DEPS; \
fi \
## Install Node.js
&& curl -sL https://deb.nodesource.com/setup_12.x | bash \
&& DEPS="libpython-stdlib \
......@@ -158,7 +170,7 @@ RUN install2.r --error --deps TRUE \
/root/.local
## Install Tini
RUN curl -sL https://github.com/krallin/tini/releases/download/v0.18.0/tini -o /usr/local/bin/tini \
RUN curl -sL https://github.com/krallin/tini/releases/download/v0.19.0/tini-$(dpkg --print-architecture) -o /usr/local/bin/tini \
&& chmod +x /usr/local/bin/tini
## Switch back to ${NB_USER} to avoid accidental container runs as root
......
image: docker
services:
- docker:dind
.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:-4.0.3}
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-ver:\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"
tidyverse/$CI_APP_TAG.Dockerfile | head -1`
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"`
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
R_VERSION_UPDATE: "false"
.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_UPDATE: "true"
before_script:
- *before-script-build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- export VERSION_MAJ_MIN_PAT=`cat tidyverse/latest.Dockerfile | head -n1 | sed 's/.*\([0-9].[0-9].[0-9]\)/\1/'`
- export VERSION_MAJ_MIN=`echo "${VERSION_MAJ_MIN_PAT:0:3}"`
- export VERSION_MAJ=`echo "${VERSION_MAJ_MIN_PAT:0:1}"`
build:latest-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
-f tidyverse/$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" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- tidyverse/latest.Dockerfile
build-latest:
stage: build
build:latest-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- cd tidyverse && docker build --pull -t $CI_REGISTRY_IMAGE:latest -f latest.Dockerfile .
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ
- docker push $CI_REGISTRY_IMAGE:latest
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
-f tidyverse/$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" && $R_VERSION_UPDATE != "true"
- if: $CI_COMMIT_BRANCH == "master" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- tidyverse/latest.Dockerfile
build-version:
stage: build
build:version-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- cd tidyverse && docker build --pull -t $CI_REGISTRY_IMAGE:4.0.3 -f 4.0.3.Dockerfile .
- docker push $CI_REGISTRY_IMAGE:4.0.3
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-f tidyverse/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true"
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- tidyverse/4.0.3.Dockerfile
trigger-latest-build:
build:version-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-f tidyverse/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- tidyverse/4.0.3.Dockerfile
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:
- tidyverse/latest.Dockerfile
build-manifest:version-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
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version"
changes:
- tidyverse/4.0.3.Dockerfile
trigger-latest-build:
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_VERSE -F ref=master https://gitlab.b-data.ch/api/v4/projects/168/trigger/pipeline
rules:
......@@ -52,10 +159,10 @@ trigger-latest-build:
- tidyverse/latest.Dockerfile
trigger-version-build:
stage: deploy
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_VERSE -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/168/trigger/pipeline
rules:
......
......@@ -17,9 +17,18 @@ RUN apt-get update \
unixodbc-dev \
libsasl2-dev \
libtiff-dev \
## Install patched version or RPostgreSQL
## Source: https://gitlab.b-data.ch/benz0li/rpostgresql
&& install2.r --error DBI \
&& curl -sSL https://gitlab.b-data.ch/benz0li/rpostgresql/-/package_files/6/download \
-o RPostgreSQL_0.6-2.tar.gz \
&& R CMD INSTALL RPostgreSQL_0.6-2.tar.gz \
&& rm RPostgreSQL_0.6-2.tar.gz \
## Install other packages in regular fashion
&& install2.r --error BiocManager \
&& install2.r --error \
--deps TRUE \
--skipinstalled \
tidyverse \
dplyr \
devtools \
......
image: docker
services:
- docker:dind
.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:-4.0.3}
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|.*tidyverse:\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"
verse/$CI_APP_TAG.Dockerfile | head -1`
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"`
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
R_VERSION_UPDATE: "false"
.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_UPDATE: "true"
before_script:
- *before-script-build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- export VERSION_MAJ_MIN_PAT=`cat verse/latest.Dockerfile | head -n1 | sed 's/.*\([0-9].[0-9].[0-9]\)/\1/'`
- export VERSION_MAJ_MIN=`echo "${VERSION_MAJ_MIN_PAT:0:3}"`
- export VERSION_MAJ=`echo "${VERSION_MAJ_MIN_PAT:0:1}"`
build:latest-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64
-f verse/$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" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- verse/latest.Dockerfile
build-latest:
stage: build
build:latest-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8
-f verse/$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" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- verse/latest.Dockerfile
build:version-linux-amd64:
extends: .build
tags:
- arch:amd64
- os:linux
script:
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-f verse/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/
changes:
- verse/4.0.3.Dockerfile
build:version-linux-arm64v8:
extends: .build
tags:
- arch:arm64/v8
- os:linux
script:
- cd verse && docker build --pull -t $CI_REGISTRY_IMAGE:latest -f latest.Dockerfile .
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$VERSION_MAJ
- docker push $CI_REGISTRY_IMAGE:latest
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN_PAT
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ_MIN
- docker push $CI_REGISTRY_IMAGE:$VERSION_MAJ
- >
docker build --pull -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-f verse/$CI_APP_TAG.Dockerfile .
- docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $R_VERSION_UPDATE != "true" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/
changes:
- verse/4.0.3.Dockerfile
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" && $R_VERSION_UPDATE != "true"
changes:
- verse/latest.Dockerfile
build-version:
stage: build
build-manifest:version-linux-multiarch:
extends: .build
stage: deploy
script:
- cd verse && docker build --pull -t $CI_REGISTRY_IMAGE:4.0.3 -f 4.0.3.Dockerfile .
- docker push $CI_REGISTRY_IMAGE:4.0.3
- |
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" && $R_VERSION_UPDATE != "true"
changes:
- verse/4.0.3.Dockerfile
trigger-latest-build:
stage: deploy
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_GEOSPATIAL -F ref=master https://gitlab.b-data.ch/api/v4/projects/169/trigger/pipeline
rules:
......@@ -52,10 +159,10 @@ trigger-latest-build:
- verse/latest.Dockerfile
trigger-version-build:
stage: deploy
extends: .build
stage: .post
before_script:
- apk add --update curl
- rm -rf /var/cache/apk/*
- apk add --update --no-cache curl
script:
- curl -X POST -F token=$JUPYTERLAB_R_GEOSPATIAL -F ref=freeze-version https://gitlab.b-data.ch/api/v4/projects/169/trigger/pipeline
rules:
......
......@@ -73,7 +73,8 @@ RUN wget "https://travis-bin.yihui.name/texlive-local.deb" \
&& tlmgr update --self \
&& tlmgr install \
ae \
context \
## context fails to install on aarch64 with no output
#context \
listings \
makeindex \
parskip \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment