Skip to content

Commit 9021be5

Browse files
committed
Freeze Python v3.10.13
1 parent 82cd170 commit 9021be5

File tree

7 files changed

+590
-2
lines changed

7 files changed

+590
-2
lines changed

CUDA_VERSION_MATRIX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Topmost entry = Tag `latest`
55
| Python | CUDA | cuBLAS | cuDNN | NCCL | TensorRT | Linux distro |
66
|:-----------|:-------|:----------|:------|:-------|:----------|:-------------|
77
| 3.11.4 | 11.8.0 | 11.11.3.6 | 8.9.0 | 2.15.5 | 8.5.3[^2] | Ubuntu 22.04 |
8+
| 3.10.13 | 11.8.0 | 11.11.3.6 | 8.9.0 | 2.15.5 | 8.5.3[^2] | Ubuntu 22.04 |
89
| 3.11.3 | 11.8.0 | 11.11.3.6 | 8.9.0 | 2.15.5 | 8.5.3[^2] | Ubuntu 22.04 |
910
| 3.10.12 | 11.8.0 | 11.11.3.6 | 8.9.0 | 2.15.5 | 8.5.3[^2] | Ubuntu 22.04 |
1011
| 3.11.2[^1] | 11.8.0 | 11.11.3.6 | 8.7.0 | 2.15.5 | 8.5.3[^2] | Ubuntu 22.04 |

VERSION_MATRIX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Topmost entry = Tag `latest`
55
| Python | Jupyter Hub | Jupyter Lab | code‑server (Code) | Git | Git LFS | Pandoc | Quarto[^2] | CTAN date[^2] | Linux distro |
66
|:-----------|:------------|:------------|:-------------------|:-------|:--------|:-------|:------------|:--------------|:-------------|
77
| 3.11.4 | 4.0.2 | 3.6.5 | 4.16.1 (1.80.2) | 2.42.0 | 3.4.0 | 3.1.1 | 1.3.450 | | Debian 12 |
8+
| 3.10.13 | 4.0.2 | 3.6.5 | 4.16.1 (1.80.2) | 2.42.0 | 3.4.0 | 3.1.1 | 1.3.450 | 2023‑08‑24 | Debian 12 |
89
| 3.11.3 | 4.0.0 | 3.6.4 | 4.13.0 (1.78.2) | 2.41.0 | 3.3.0 | 3.1.1 | 1.3.361 | 2023‑06‑06 | Debian 11 |
910
| 3.10.12 | 4.0.0 | 3.6.4 | 4.13.0 (1.78.2) | 2.41.0 | 3.3.0 | 3.1.1 | 1.3.361 | 2023‑06‑06 | Debian 11 |
1011
| 3.11.2[^1] | 3.1.1 | 3.6.3 | 4.9.1 (1.73.1) | 2.40.0 | 3.3.0 | 2.19.2 | 1.2.475[^3] | 2023‑04‑05 | Debian 11 |

base/.gitlab-ci.yml

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
.env:
22
variables:
3-
PYTHON_VERSION: "3.11.4"
3+
PYTHON_VERSION: "3.10.13"
44

55
.before-script-build: &before-script-build
66
- |
@@ -346,6 +346,25 @@ build-manifest:version-linux-multiarch:
346346
docker manifest push $CI_APP_REPO:$CI_APP_TAG-root
347347
docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker
348348
docker manifest push $CI_APP_REPO:$CI_APP_TAG-docker-root
349+
- |
350+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
351+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-root $CI_MANIFEST_LIST_ROOT
352+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker $CI_MANIFEST_LIST_DOCKER
353+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
354+
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
355+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
356+
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
357+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-root \
358+
$CI_APP_REPO:$CI_APP_TAG-root-linux-arm64v8
359+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker \
360+
$CI_APP_REPO:$CI_APP_TAG-docker-linux-arm64v8
361+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root \
362+
$CI_APP_REPO:$CI_APP_TAG-docker-root-linux-arm64v8
363+
fi
364+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
365+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-root
366+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker
367+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-docker-root
349368
rules:
350369
- if: $CI_COMMIT_BRANCH == "freeze-version"
351370
changes:
@@ -722,6 +741,25 @@ build-manifest:version-devtools-linux-multiarch:
722741
docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-root
723742
docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker
724743
docker manifest push $CI_APP_REPO:$CI_APP_TAG-devtools-docker-root
744+
- |
745+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools $CI_MANIFEST_LIST
746+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root $CI_MANIFEST_LIST_ROOT
747+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker $CI_MANIFEST_LIST_DOCKER
748+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root $CI_MANIFEST_LIST_DOCKER_ROOT
749+
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
750+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools \
751+
$CI_APP_REPO:$CI_APP_TAG-devtools-linux-arm64v8
752+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root \
753+
$CI_APP_REPO:$CI_APP_TAG-devtools-root-linux-arm64v8
754+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker \
755+
$CI_APP_REPO:$CI_APP_TAG-devtools-docker-linux-arm64v8
756+
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root \
757+
$CI_APP_REPO:$CI_APP_TAG-devtools-docker-root-linux-arm64v8
758+
fi
759+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools
760+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-root
761+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker
762+
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN-devtools-docker-root
725763
rules:
726764
- if: $CI_COMMIT_BRANCH == "freeze-version"
727765
changes:

base/3.10.13.Dockerfile

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
ARG BASE_IMAGE=debian
2+
ARG BASE_IMAGE_TAG=12
3+
ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
4+
ARG PYTHON_VERSION=3.10.13
5+
ARG CUDA_IMAGE_FLAVOR
6+
7+
ARG NB_USER=jovyan
8+
ARG NB_UID=1000
9+
ARG JUPYTERHUB_VERSION=4.0.2
10+
ARG JUPYTERLAB_VERSION=3.6.5
11+
ARG CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/lib/vscode/extensions
12+
ARG CODE_SERVER_VERSION=4.16.1
13+
ARG GIT_VERSION=2.42.0
14+
ARG GIT_LFS_VERSION=3.4.0
15+
ARG PANDOC_VERSION=3.1.1
16+
17+
FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}${CUDA_IMAGE_FLAVOR:+-}${CUDA_IMAGE_FLAVOR} as files
18+
19+
ARG NB_UID
20+
ENV NB_GID=100
21+
22+
RUN mkdir /files
23+
24+
COPY assets /files
25+
COPY conf/ipython /files
26+
COPY conf/jupyter /files
27+
COPY conf/jupyterlab /files
28+
COPY conf/user /files
29+
COPY scripts /files
30+
31+
RUN chown -R ${NB_UID}:${NB_GID} /files/var/backups/skel \
32+
## Ensure file modes are correct when using CI
33+
## Otherwise set to 777 in the target image
34+
&& find /files -type d -exec chmod 755 {} \; \
35+
&& find /files -type f -exec chmod 644 {} \; \
36+
&& find /files/usr/local/bin -type f -exec chmod 755 {} \;
37+
38+
FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
39+
FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
40+
41+
FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}${CUDA_IMAGE_FLAVOR:+-}${CUDA_IMAGE_FLAVOR}
42+
43+
LABEL org.opencontainers.image.licenses="MIT" \
44+
org.opencontainers.image.source="https://gitlab.b-data.ch/jupyterlab/python/docker-stack" \
45+
org.opencontainers.image.vendor="b-data GmbH" \
46+
org.opencontainers.image.authors="Olivier Benz <olivier.benz@b-data.ch>"
47+
48+
ARG DEBIAN_FRONTEND=noninteractive
49+
50+
ARG BUILD_ON_IMAGE
51+
ARG CUDA_IMAGE_FLAVOR
52+
ARG NB_USER
53+
ARG NB_UID
54+
ARG JUPYTERHUB_VERSION
55+
ARG JUPYTERLAB_VERSION
56+
ARG CODE_BUILTIN_EXTENSIONS_DIR
57+
ARG CODE_SERVER_VERSION
58+
ARG GIT_VERSION
59+
ARG GIT_LFS_VERSION
60+
ARG PANDOC_VERSION
61+
ARG BUILD_START
62+
63+
ARG CODE_WORKDIR
64+
65+
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION}${CUDA_IMAGE_FLAVOR:+-}${CUDA_IMAGE_FLAVOR} \
66+
NB_USER=${NB_USER} \
67+
NB_UID=${NB_UID} \
68+
JUPYTERHUB_VERSION=${JUPYTERHUB_VERSION} \
69+
JUPYTERLAB_VERSION=${JUPYTERLAB_VERSION} \
70+
CODE_SERVER_VERSION=${CODE_SERVER_VERSION} \
71+
GIT_VERSION=${GIT_VERSION} \
72+
GIT_LFS_VERSION=${GIT_LFS_VERSION} \
73+
PANDOC_VERSION=${PANDOC_VERSION} \
74+
BUILD_DATE=${BUILD_START}
75+
76+
ENV NB_GID=100
77+
78+
## Install Git
79+
COPY --from=gsi /usr/local /usr/local
80+
## Install Git LFS
81+
COPY --from=glfsi /usr/local /usr/local
82+
83+
USER root
84+
85+
RUN dpkgArch="$(dpkg --print-architecture)" \
86+
## Unminimise if the system has been minimised
87+
&& if [ $(command -v unminimize) ]; then \
88+
yes | unminimize; \
89+
fi \
90+
&& apt-get update \
91+
&& apt-get -y install --no-install-recommends \
92+
bash-completion \
93+
build-essential \
94+
curl \
95+
file \
96+
fontconfig \
97+
g++ \
98+
gcc \
99+
gfortran \
100+
gnupg \
101+
htop \
102+
info \
103+
jq \
104+
libclang-dev \
105+
man-db \
106+
nano \
107+
procps \
108+
psmisc \
109+
screen \
110+
sudo \
111+
swig \
112+
tmux \
113+
vim-tiny \
114+
wget \
115+
zsh \
116+
## Git: Additional runtime dependencies
117+
libcurl3-gnutls \
118+
liberror-perl \
119+
## Git: Additional runtime recommendations
120+
less \
121+
ssh-client \
122+
## Python: Additional dev dependencies
123+
&& if [ -z "$PYTHON_VERSION" ]; then \
124+
apt-get -y install --no-install-recommends \
125+
python3-dev \
126+
## Install Python package installer
127+
## (dep: python3-distutils, python3-setuptools and python3-wheel)
128+
python3-pip \
129+
## Install venv module for python3
130+
python3-venv; \
131+
## make some useful symlinks that are expected to exist
132+
## ("/usr/bin/python" and friends)
133+
for src in pydoc3 python3 python3-config; do \
134+
dst="$(echo "$src" | tr -d 3)"; \
135+
[ -s "/usr/bin/$src" ]; \
136+
[ ! -e "/usr/bin/$dst" ]; \
137+
ln -svT "$src" "/usr/bin/$dst"; \
138+
done; \
139+
else \
140+
## Force update pip, setuptools and wheel
141+
curl -sLO https://bootstrap.pypa.io/get-pip.py; \
142+
python get-pip.py \
143+
pip \
144+
setuptools \
145+
wheel; \
146+
rm get-pip.py; \
147+
fi \
148+
## Install font MesloLGS NF
149+
&& mkdir -p /usr/share/fonts/truetype/meslo \
150+
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Regular.ttf \
151+
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Bold.ttf \
152+
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Italic.ttf \
153+
&& 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 \
154+
&& fc-cache -fsv \
155+
## Git: Set default branch name to main
156+
&& git config --system init.defaultBranch main \
157+
## Git: Store passwords for one hour in memory
158+
&& git config --system credential.helper "cache --timeout=3600" \
159+
## Git: Merge the default branch from the default remote when "git pull" is run
160+
&& git config --system pull.rebase false \
161+
## Install pandoc
162+
&& curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
163+
&& dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
164+
&& rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
165+
## Delete potential user with UID 1000
166+
&& if $(grep -q 1000 /etc/passwd); then \
167+
userdel $(id -un 1000); \
168+
fi \
169+
## Do not set user limits for sudo/sudo-i
170+
&& sed -i 's/.*pam_limits.so/#&/g' /etc/pam.d/sudo \
171+
&& if [ -f "/etc/pam.d/sudo-i" ]; then \
172+
sed -i 's/.*pam_limits.so/#&/g' /etc/pam.d/sudo-i; \
173+
fi \
174+
## Add user
175+
&& useradd -l -m -s $(which zsh) -N -u ${NB_UID} ${NB_USER} \
176+
&& mkdir -p /var/backups/skel \
177+
&& chown ${NB_UID}:${NB_GID} /var/backups/skel \
178+
## Install Tini
179+
&& curl -sL https://github.com/krallin/tini/releases/download/v0.19.0/tini-${dpkgArch} -o /usr/local/bin/tini \
180+
&& chmod +x /usr/local/bin/tini \
181+
## Clean up
182+
&& rm -rf /tmp/* \
183+
&& rm -rf /var/lib/apt/lists/* \
184+
${HOME}/.cache
185+
186+
ENV PATH=/opt/code-server/bin:$PATH \
187+
CS_DISABLE_GETTING_STARTED_OVERRIDE=1
188+
189+
## Install code-server
190+
RUN mkdir /opt/code-server \
191+
&& cd /opt/code-server \
192+
&& curl -sL https://github.com/coder/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server-${CODE_SERVER_VERSION}-linux-$(dpkg --print-architecture).tar.gz | tar zxf - --no-same-owner --strip-components=1 \
193+
&& curl -sL https://upload.wikimedia.org/wikipedia/commons/9/9a/Visual_Studio_Code_1.35_icon.svg -o vscode.svg \
194+
## Include custom fonts
195+
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
196+
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
197+
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Bold.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
198+
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Bold-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
199+
&& sed -i 's|</head>| <link rel="stylesheet" type="text/css" href="{{BASE}}/_static/src/browser/media/css/fonts.css">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
200+
## Install code-server extensions
201+
&& cd /tmp \
202+
&& curl -sLO https://dl.b-data.ch/vsix/alefragnani.project-manager-12.7.0.vsix \
203+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension alefragnani.project-manager-12.7.0.vsix \
204+
&& curl -sLO https://dl.b-data.ch/vsix/piotrpalarz.vscode-gitignore-generator-1.0.3.vsix \
205+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension piotrpalarz.vscode-gitignore-generator-1.0.3.vsix \
206+
&& curl -sLO https://dl.b-data.ch/vsix/mutantdino.resourcemonitor-1.0.7.vsix \
207+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension mutantdino.resourcemonitor-1.0.7.vsix \
208+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension GitLab.gitlab-workflow \
209+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension ms-python.python \
210+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension ms-toolsai.jupyter \
211+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension christian-kohler.path-intellisense \
212+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension eamodio.gitlens@11.7.0 \
213+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension mhutchie.git-graph \
214+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension redhat.vscode-yaml \
215+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension grapecity.gc-excelviewer \
216+
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension editorconfig.editorconfig \
217+
## Create folders temp and tmp for Jupyter extension
218+
&& cd /opt/code-server/lib/vscode/extensions/ms-toolsai.jupyter-* \
219+
&& mkdir -m 1777 temp \
220+
&& mkdir -m 1777 tmp \
221+
## Clean up
222+
&& rm -rf /tmp/* \
223+
${HOME}/.config \
224+
${HOME}/.local
225+
226+
## Install JupyterLab
227+
RUN export PIP_BREAK_SYSTEM_PACKAGES=1 \
228+
&& pip install \
229+
jupyter-server-proxy \
230+
jupyterhub==${JUPYTERHUB_VERSION} \
231+
jupyterlab==${JUPYTERLAB_VERSION} \
232+
jupyterlab-git \
233+
jupyterlab-lsp \
234+
notebook \
235+
nbconvert \
236+
python-lsp-server[all] \
237+
## Include custom fonts
238+
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
239+
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
240+
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Bold.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
241+
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Bold-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
242+
&& sed -i 's|</head>|<link rel="stylesheet" type="text/css" href="{{page_config.fullStaticUrl}}/assets/css/fonts.css"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
243+
## Clean up
244+
&& rm -rf /tmp/* \
245+
${HOME}/.cache
246+
247+
## Switch back to ${NB_USER} to avoid accidental container runs as root
248+
USER ${NB_USER}
249+
250+
ENV HOME=/home/${NB_USER} \
251+
CODE_WORKDIR=${CODE_WORKDIR:-/home/${NB_USER}/projects} \
252+
SHELL=/usr/bin/zsh \
253+
TERM=xterm-256color
254+
255+
WORKDIR ${HOME}
256+
257+
## Install Oh My Zsh with Powerlevel10k theme
258+
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended \
259+
&& git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${HOME}/.oh-my-zsh/custom/themes/powerlevel10k \
260+
&& sed -i 's/ZSH="\/home\/jovyan\/.oh-my-zsh"/ZSH="$HOME\/.oh-my-zsh"/g' ${HOME}/.zshrc \
261+
&& sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="powerlevel10k\/powerlevel10k"/g' ${HOME}/.zshrc \
262+
&& echo "\n# set PATH so it includes user's private bin if it exists\nif [ -d \"\$HOME/bin\" ] && [[ \"\$PATH\" != *\"\$HOME/bin\"* ]] ; then\n PATH=\"\$HOME/bin:\$PATH\"\nfi" >> ${HOME}/.zshrc \
263+
&& echo "\n# set PATH so it includes user's private bin if it exists\nif [ -d \"\$HOME/.local/bin\" ] && [[ \"\$PATH\" != *\"\$HOME/.local/bin\"* ]] ; then\n PATH=\"\$HOME/.local/bin:\$PATH\"\nfi" >> ${HOME}/.zshrc \
264+
&& echo "\n# Update last-activity timestamps while in screen/tmux session\nif [ ! -z \"\$TMUX\" -o ! -z \"\$STY\" ] ; then\n busy &\nfi" >> ${HOME}/.bashrc \
265+
&& echo "\n# Update last-activity timestamps while in screen/tmux session\nif [ ! -z \"\$TMUX\" -o ! -z \"\$STY\" ] ; then\n setopt nocheckjobs\n busy &\nfi" >> ${HOME}/.zshrc \
266+
&& echo "\n# To customize prompt, run \`p10k configure\` or edit ~/.p10k.zsh." >> ${HOME}/.zshrc \
267+
&& echo "[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh" >> ${HOME}/.zshrc \
268+
## Create user's private bin
269+
&& mkdir -p ${HOME}/.local/bin \
270+
## Create backup of home directory
271+
&& cp -a ${HOME}/. /var/backups/skel
272+
273+
## Copy files as late as possible to avoid cache busting
274+
COPY --from=files /files /
275+
COPY --from=files /files/var/backups/skel ${HOME}
276+
277+
EXPOSE 8888
278+
279+
## Configure container startup
280+
ENTRYPOINT ["tini", "-g", "--"]
281+
CMD ["start-notebook.sh"]

0 commit comments

Comments
 (0)