Skip to content

squashme: fix build steps #718

squashme: fix build steps

squashme: fix build steps #718

# This set of github actions is used to automatically build the
# docker images for all of the containers we support. The build
# process is quite long as it involves building quite a few
# container images (maybe 20-30). We have considered trying to
# reduce this build time but it's a bit non trivial in our
# current configuration - the obvious q is to, say, detect if
# there are changes to e.g. docker/cuda and only build the cuda
# images in this case. The problem with this is that building the
# cuda images involves building the base python image, so we would
# build that, push it and tag it and then we would end up with a
# situation in which the cuda image is based on a renku-python image
# which has a tag which differs from, say, the r or julia images.
#
# Some solution might be possible which looks at previous commits
# and existing tags on docker images but this is a bit complex and
# probably requires having a clear model of dependencies and how
# they interact and what we're trying to achieve.
#
# It's probbaly worth noting here that the same action is used multiple
# times with multiple input parameters in the `matrix` variable to
# build different versions of the image.
name: Renku Docker Image CI
on: [push]
env:
DOCKER_PREFIX: renku/renkulab
DEFAULT_PYTHON_VERSION: "3.10"
jobs:
lint:
strategy:
fail-fast: true
matrix:
DOCKERFILE_PATH:
- docker/py/Dockerfile
- docker/r/Dockerfile
- docker/cuda/Dockerfile
- docker/vnc/Dockerfile
- docker/matlab/Dockerfile
- docker/matlab-jupyter/Dockerfile
- docker/julia/Dockerfile
- docker/batch/Dockerfile
- docker/qgis/Dockerfile
- docker/vscode/base.Dockerfile
- docker/vscode/conda.Dockerfile
- docker/vscode/poetry.Dockerfile
- docker/vscode/R.Dockerfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hadolint/[email protected]
with:
dockerfile: ${{ matrix.DOCKERFILE_PATH }}
config: .hadolint.yaml
build-py:
needs: lint
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- BASE_PYTHON_VERSION: "3.11"
REGISTRY: quay.io
- BASE_PYTHON_VERSION: "3.10"
REGISTRY: docker.io
- BASE_PYTHON_VERSION: "3.9"
REGISTRY: docker.io
- BASE_PYTHON_VERSION: "3.8"
REGISTRY: docker.io
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-py
tags: |
type=sha,prefix=${{ matrix.BASE_PYTHON_VERSION }}-
- name: Build and load
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ matrix.REGISTRY }}/jupyter/base-notebook:python-${{ matrix.BASE_PYTHON_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/py
labels: ${{ steps.meta.outputs.labels }}
load: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
- name: Image Acceptance Tests
uses: cypress-io/github-action@v6
env:
TEST_IMAGE_NAME: ${{ env.DOCKER_PREFIX }}-py:${{ steps.meta.outputs.version }}
TEST_USER_NAME: jovyan
TEST_SPEC: jupyterlab.cy.ts
with:
working-directory: tests
command: npx mocha -r ts-node/register index.ts
# export the base images for other jobs to use
- name: Build and export
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ matrix.REGISTRY }}/jupyter/base-notebook:python-${{ matrix.BASE_PYTHON_VERSION }}
cache-from: type=gha
context: docker/py
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-py-homedir-env:
needs: lint
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
BASE_PYTHON_VERSION:
- "3.10"
- "3.9"
- "3.8"
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-py-homedir-envs
tags: |
type=sha,prefix=${{ matrix.BASE_PYTHON_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.BASE_PYTHON_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.BASE_PYTHON_VERSION == env.DEFAULT_PYTHON_VERSION }}
- name: Build and load
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=jupyter/base-notebook:python-${{ matrix.BASE_PYTHON_VERSION }}
CONDA_ENVS_DIRS=/home/jovyan/work/envs
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/py
labels: ${{ steps.meta.outputs.labels }}
load: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
- name: Image Acceptance Tests
uses: cypress-io/github-action@v6
env:
TEST_IMAGE_NAME: ${{ env.DOCKER_PREFIX }}-py-homedir-envs:${{ steps.meta.outputs.version }}
TEST_USER_NAME: jovyan
TEST_SPEC: jupyterlab.cy.ts
with:
working-directory: tests
command: npx mocha -r ts-node/register index.ts
# export the default base image for other jobs to use
- name: Build and export
if: matrix.BASE_PYTHON_VERSION == env.DEFAULT_PYTHON_VERSION
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=jupyter/base-notebook:python-${{ matrix.BASE_PYTHON_VERSION }}
CONDA_ENVS_DIRS=/home/jovyan/work/envs
cache-from: type=gha
context: docker/py
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-py-multiarch:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- BASE_PYTHON_VERSION: "3.11"
REGISTRY: quay.io
- BASE_PYTHON_VERSION: "3.10"
REGISTRY: docker.io
- BASE_PYTHON_VERSION: "3.9"
REGISTRY: docker.io
- BASE_PYTHON_VERSION: "3.8"
REGISTRY: docker.io
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-py
tags: |
type=sha,prefix=${{ matrix.BASE_PYTHON_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.BASE_PYTHON_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.BASE_PYTHON_VERSION == env.DEFAULT_PYTHON_VERSION }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: docker/py
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-to: type=gha,mode=max
cache-from: type=gha
build-args: |
BASE_IMAGE=${{ matrix.REGISTRY }}/jupyter/base-notebook:python-${{ matrix.BASE_PYTHON_VERSION }}
platforms: linux/amd64,linux/arm64
provenance: false
build-cuda:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
# taken from tensorflow compatibility chart at https://www.tensorflow.org/install/source#gpu
- CUDA_VERSION: "11.2"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-2=11.2.152-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-2"
LIBCUDNN_PACKAGE: "libcudnn8=8.1.1.33-1+cuda11.2"
- CUDA_VERSION: "11.3"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-3=11.3.109-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-3"
LIBCUDNN_PACKAGE: "libcudnn8=8.2.1.32-1+cuda11.3"
- CUDA_VERSION: "11.4"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-4=11.4.148-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-4"
LIBCUDNN_PACKAGE: "libcudnn8=8.2.4.15-1+cuda11.4"
- CUDA_VERSION: "11.5"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-5=11.5.117-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-5"
LIBCUDNN_PACKAGE: "libcudnn8=8.3.2.44-1+cuda11.5"
- CUDA_VERSION: "11.7"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-7=11.7.60-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-7"
LIBCUDNN_PACKAGE: "libcudnn8=8.5.0.96-1+cuda11.7"
- CUDA_VERSION: "11.8"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-11-8=11.8.89-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-11-8"
LIBCUDNN_PACKAGE: "libcudnn8=8.6.0.163-1+cuda11.8"
ADD_2204_APT_REPOS: "true"
- CUDA_VERSION: "12.2"
EXTRA_LIBRARIES: ""
CUDA_CUDART_PACKAGE: "cuda-cudart-12-2=12.2.140-1"
CUDA_COMPAT_PACKAGE: "cuda-compat-12-2"
LIBCUDNN_PACKAGE: "libcudnn8=8.9.5.29-1+cuda12.2"
ADD_2204_APT_REPOS: "true"
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-py:${DEFAULT_PYTHON_VERSION}-${sha_short}" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-cuda
tags: |
type=sha,prefix=${{ matrix.CUDA_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.CUDA_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.CUDA_VERSION == '11.7' }}
- name: Build and load
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
CUDA_COMPAT_PACKAGE=${{ matrix.CUDA_COMPAT_PACKAGE }}
CUDA_CUDART_PACKAGE=${{ matrix.CUDA_CUDART_PACKAGE }}
CUDA_VERSION=${{ matrix.CUDA_VERSION }}
EXTRA_LIBRARIES=${{ matrix.EXTRA_LIBRARIES }}
LIBCUDNN_PACKAGE=${{ matrix.LIBCUDNN_PACKAGE }}
ADD_2204_APT_REPOS=${{ matrix.ADD_2204_APT_REPOS }}
context: docker/cuda
labels: ${{ steps.meta.outputs.labels }}
load: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: |
type=inline
type=registry,ref=${{ steps.vars.outputs.renku_base }}
provenance: false
- name: Image Acceptance Tests
uses: cypress-io/github-action@v6
env:
TEST_IMAGE_NAME: ${{ env.DOCKER_PREFIX }}-cuda:${{ steps.meta.outputs.version }}
TEST_USER_NAME: jovyan
TEST_SPEC: jupyterlab.cy.ts
with:
working-directory: tests
command: npx mocha -r ts-node/register index.ts
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
CUDA_COMPAT_PACKAGE=${{ matrix.CUDA_COMPAT_PACKAGE }}
CUDA_CUDART_PACKAGE=${{ matrix.CUDA_CUDART_PACKAGE }}
CUDA_VERSION=${{ matrix.CUDA_VERSION }}
EXTRA_LIBRARIES=${{ matrix.EXTRA_LIBRARIES }}
LIBCUDNN_PACKAGE=${{ matrix.LIBCUDNN_PACKAGE }}
context: docker/cuda
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-py-ext:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- EXTENSION: vnc
PYTHON_VERSION: "3.10"
- EXTENSION: vnc
PYTHON_VERSION: "3.11"
- EXTENSION: batch
PYTHON_VERSION: "3.10"
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-${{ matrix.EXTENSION }}
tags: |
type=sha,prefix=${{ matrix.PYTHON_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.PYTHON_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }},prefix=${{ matrix.PYTHON_VERSION }}-
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ env.DOCKER_PREFIX }}-py:${{ matrix.PYTHON_VERSION }}-${{ steps.vars.outputs.sha_short }}
context: docker/${{ matrix.EXTENSION }}
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
platforms: linux/amd64,linux/arm64
build-matlab-ext:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- EXTENSION: matlab-jupyter
PYTHON_VERSION: "3.10"
- EXTENSION: matlab-jupyter
PYTHON_VERSION: "3.11"
steps:
- name: Docker Login
uses: Azure/docker-login@v1
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-${{ matrix.EXTENSION }}
tags: |
type=sha,prefix=${{ matrix.PYTHON_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.PYTHON_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }},prefix=${{ matrix.PYTHON_VERSION }}-
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ env.DOCKER_PREFIX }}-py:${{ matrix.PYTHON_VERSION }}-${{ steps.vars.outputs.sha_short }}
context: docker/${{ matrix.EXTENSION }}
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
platforms: linux/amd64
build-vnc-ext:
needs: build-py-ext
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
VNC-EXTENSION:
- matlab
- qgis
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-py:${DEFAULT_PYTHON_VERSION}-${sha_short}" >> $GITHUB_OUTPUT
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-${{ matrix.VNC-EXTENSION }}
tags: |
type=sha,prefix=
type=semver,pattern={{version}},prefix=
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }},prefix=
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ env.DOCKER_PREFIX }}-vnc:${{ env.DEFAULT_PYTHON_VERSION }}-${{ steps.vars.outputs.sha_short }}
context: docker/${{ matrix.VNC-EXTENSION }}
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
build-julia-ext:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- JULIA_VERSION: "1.7.1"
JULIA_CHECKSUM: "44658e9c7b45e2b9b5b59239d190cca42de05c175ea86bc346c294a8fe8d9f11"
- JULIA_VERSION: "1.8.5"
JULIA_CHECKSUM: "e71a24816e8fe9d5f4807664cbbb42738f5aa9fe05397d35c81d4c5d649b9d05"
- JULIA_VERSION: "1.9.0"
JULIA_CHECKSUM: "00c614466ef9809c2eb23480e38d196a2c577fff2730c4f83d135b913d473359"
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-py:${DEFAULT_PYTHON_VERSION}-${sha_short}" >> $GITHUB_OUTPUT
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-julia
tags: |
type=sha,prefix=${{ matrix.JULIA_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.JULIA_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.JULIA_VERSION == '1.9.0' }}
- name: Build and load
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
JULIA_VERSION_ARG=${{ matrix.JULIA_VERSION }}
JULIA_CHECKSUM=${{ matrix.JULIA_CHECKSUM }}
context: docker/julia
labels: ${{ steps.meta.outputs.labels }}
load: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha
provenance: false
- name: Image Acceptance Tests
uses: cypress-io/github-action@v6
env:
TEST_IMAGE_NAME: ${DOCKER_PREFIX}-julia:${{ matrix.JULIA_VERSION }}-${{ steps.vars.outputs.sha_short }}
TEST_USER_NAME: jovyan
TEST_SPEC: jupyterlab.cy.ts
with:
working-directory: tests
command: npx mocha -r ts-node/register index.ts
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
context: docker/julia
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
build-r-ubuntu:
needs: build-py
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- RVERSION: 4.1.0
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: 4.1.1
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: 4.1.2
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: 4.2.0
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: 4.2.3
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: 4.3.1
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.12.1+402
- RVERSION: devel
BASE_IMAGE_NAME: rocker/verse
EXTENSION: r
RSTUDIO_VERSION: 2023.12.1+402
- RVERSION: RELEASE_3_14
BASE_IMAGE_NAME: bioconductor/bioconductor_docker
EXTENSION: bioc
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: RELEASE_3_15
BASE_IMAGE_NAME: bioconductor/bioconductor_docker
EXTENSION: bioc
RSTUDIO_VERSION: 2023.03.2+454
- RVERSION: RELEASE_3_16
BASE_IMAGE_NAME: bioconductor/bioconductor_docker
EXTENSION: bioc
RSTUDIO_VERSION: 2023.12.1+402
- RVERSION: RELEASE_3_17
BASE_IMAGE_NAME: bioconductor/bioconductor_docker
EXTENSION: bioc
RSTUDIO_VERSION: 2023.12.1+402
- RVERSION: RELEASE_3_18
BASE_IMAGE_NAME: bioconductor/bioconductor_docker
EXTENSION: bioc
RSTUDIO_VERSION: 2023.12.1+402
# NOTE: The devel version of bioconductor uses unstable R so it often breaks or fails to build
# - RVERSION: devel
# BASE_IMAGE_NAME: bioconductor/bioconductor_docker
# EXTENSION: bioc
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-py:${DEFAULT_PYTHON_VERSION}-${sha_short}" >> $GITHUB_OUTPUT
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-${{ matrix.EXTENSION }}
tags: |
type=sha,prefix=${{ matrix.RVERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.RVERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.RVERSION == 'devel' }}
- name: Clean cache
run: |
df -h
rm -rf /opt/hostedtoolcache/*
df -h
- name: Build and load
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
BASE_IMAGE=${{ matrix.BASE_IMAGE_NAME }}:${{ matrix.RVERSION }}
RSTUDIO_VERSION_OVERRIDE=${{ matrix.RSTUDIO_VERSION }}
context: docker/r
labels: ${{ steps.meta.outputs.labels }}
load: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
- name: Image Acceptance Tests
uses: cypress-io/github-action@v6
env:
TEST_IMAGE_NAME: ${{ env.DOCKER_PREFIX }}-${{ matrix.EXTENSION }}:${{ matrix.RVERSION }}-${{ steps.vars.outputs.sha_short }}
TEST_ENV: rstudio
TEST_USER_NAME: rstudio
TEST_SPEC: rstudio.cy.ts
with:
working-directory: tests
start: docker images
command: npx mocha -r ts-node/register index.ts
- name: Build and push
uses: docker/build-push-action@v6
with:
build-args: |
RENKU_BASE=${{ steps.vars.outputs.renku_base }}
BASE_IMAGE=${{ matrix.BASE_IMAGE_NAME }}:${{ matrix.RVERSION }}
RSTUDIO_VERSION_OVERRIDE=${{ matrix.RSTUDIO_VERSION }}
context: docker/r
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
provenance: false
build-vscode-base:
needs: lint
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- DEBIAN_VERSION: bookworm
LATEST: true
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-vscode
tags: |
type=sha,prefix=${{ matrix.DEBIAN_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.DEBIAN_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.LATEST }}
- name: Build and export
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=debian:${{ matrix.DEBIAN_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/vscode
file: docker/vscode/base.Dockerfile
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-vscode-conda:
needs: build-vscode-base
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- CONDA_VERSION: 24.9.2-0
BASE_DEBIAN_VERSION: bookworm
- CONDA_VERSION: latest
BASE_DEBIAN_VERSION: bookworm
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-vscode:${{ matrix.BASE_DEBIAN_VERSION }}-${sha_short}" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-vscode-conda
tags: |
type=sha,prefix=${{ matrix.CONDA_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.CONDA_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.CONDA_VERSION == 'latest' }}
- name: Build and export
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ steps.vars.outputs.renku_base }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/vscode
file: docker/vscode/conda.Dockerfile
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-vscode-poetry:
needs: build-vscode-base
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- PYTHON_VERSION: 3.12.7
BASE_DEBIAN_VERSION: bookworm
PYENV_VERSION: v2.4.17
POETRY_VERSION: 1.8.4
LATEST: true
- PYTHON_VERSION: 3.11.10
BASE_DEBIAN_VERSION: bookworm
PYENV_VERSION: v2.4.17
POETRY_VERSION: 1.8.4
LATEST: false
- PYTHON_VERSION: 3.10.15
BASE_DEBIAN_VERSION: bookworm
PYENV_VERSION: v2.4.17
POETRY_VERSION: 1.8.4
LATEST: false
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-vscode:${{ matrix.BASE_DEBIAN_VERSION }}-${sha_short}" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-vscode-poetry
tags: |
type=sha,prefix=py-${{ matrix.PYTHON_VERSION }}-
type=semver,pattern={{version}},prefix=py-${{ matrix.PYTHON_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.LATEST }}
- name: Build and export
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ steps.vars.outputs.renku_base }}
PYTHON_VERSION=${{ matrix.PYTHON_VERSION }}
POETRY_VERSION=${{ matrix.POETRY_VERSION }}
PYENV_VERSION=${{ matrix.PYENV_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/vscode
file: docker/vscode/poetry.Dockerfile
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false
build-vscode-r:
needs: build-vscode-base
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- R_VERSION: 4.4.2
BASE_DEBIAN_VERSION: bookworm
LATEST: true
- R_VERSION: 4.3.3
BASE_DEBIAN_VERSION: bookworm
LATEST: false
- R_VERSION: 4.2.3
BASE_DEBIAN_VERSION: bookworm
LATEST: false
steps:
- name: Docker Login
uses: docker/login-action@v3
with:
username: ${{ secrets.RENKU_DOCKER_USERNAME }}
password: ${{ secrets.RENKU_DOCKER_PASSWORD }}
- uses: actions/checkout@v4
- name: Set outputs
id: vars
run: |
sha_short=$(git rev-parse --short HEAD)
echo "sha_short=$sha_short" >> $GITHUB_OUTPUT
echo "renku_base=${DOCKER_PREFIX}-vscode:${{ matrix.BASE_DEBIAN_VERSION }}-${sha_short}" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/[email protected]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_PREFIX }}-vscode-r
tags: |
type=sha,prefix=${{ matrix.R_VERSION }}-
type=semver,pattern={{version}},prefix=${{ matrix.R_VERSION }}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' && matrix.LATEST }}
- name: Build and export
uses: docker/build-push-action@v6
with:
build-args: |
BASE_IMAGE=${{ steps.vars.outputs.renku_base }}
R_VERSION=${{ matrix.R_VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: docker/vscode
file: docker/vscode/R.Dockerfile
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
provenance: false