Skip to content

Feature 2022.02.0 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 123 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
1d53990
Remove nodesource' nodejs
yuvipanda Feb 7, 2020
cbda2eb
Move npm config setting to the conda buildpack
yuvipanda Feb 8, 2020
ef1497d
Explicitly specify where npm is
yuvipanda Mar 9, 2020
df92b99
Move where npm config is set
yuvipanda Mar 10, 2020
072d706
Explicitly install nodejs
yuvipanda Jul 3, 2021
6d1dc4a
Freeze new environment.yaml files
yuvipanda Jul 3, 2021
6db7273
Revert "Freeze new environment.yaml files"
yuvipanda Nov 19, 2021
2739908
Merge remote-tracking branch 'upstream/main' into no-node
yuvipanda Nov 19, 2021
3b02cc4
Run freeze.py
manics Nov 19, 2021
7aee21f
add nodejs to locked py35 env
minrk Nov 23, 2021
00769c0
Merge pull request #847 from yuvipanda/no-node
minrk Nov 23, 2021
cf8f3b9
Add explicit support for labels build parameter
TimoRoth Nov 20, 2021
fa512e7
Set labels in Dockerfile BuildPack
TimoRoth Nov 23, 2021
86df151
Add --label command line option
TimoRoth Nov 23, 2021
730e622
Support R 4.1
yuvipanda Dec 16, 2021
2f1fc81
Quieter R builds
yuvipanda Dec 16, 2021
4d6dd53
Merge pull request #1097 from TimoRoth/docker_build
minrk Dec 16, 2021
0ba4c68
Fix R syntax error
yuvipanda Dec 16, 2021
e5e00bd
Clarify what version of R we are testing for
yuvipanda Dec 16, 2021
540001e
Merge pull request #1102 from yuvipanda/more-r
betatim Dec 16, 2021
1146d4f
Merge pull request #1103 from yuvipanda/quieter-r
betatim Dec 16, 2021
9f48271
Add command line option to pass extra build args
TimoRoth Nov 24, 2021
ad1dea1
Use str.partition() for --label argument parsing
TimoRoth Dec 16, 2021
476a259
Get binary R packages from packagemanager.rstudio.com
yuvipanda Dec 17, 2021
4aa1d15
Merge pull request #1100 from TimoRoth/extra_bargs
yuvipanda Dec 17, 2021
290b008
Fix some code comment references to MRAN
yuvipanda Dec 17, 2021
1ed05b5
Install devtools, shiny & irkernel from a pin
yuvipanda Dec 17, 2021
5d173a3
Make black happy
yuvipanda Dec 17, 2021
bca7d84
Cleanupg RStudio & Shiny server install
yuvipanda Dec 20, 2021
054b602
Add test for r3.6
yuvipanda Dec 20, 2021
006b017
Update jupyterlab 3.2.5 jupyter-resource-usage 0.6.1
manics Dec 23, 2021
da20e9f
refreeze!
manics Dec 23, 2021
62c0de2
Add help message to freeze.py
manics Dec 23, 2021
020160b
Merge pull request #1106 from manics/freeze.py--help
betatim Dec 28, 2021
d688997
Merge pull request #1105 from manics/update-jupyterlab
betatim Jan 3, 2022
fd6314d
Solidify logic for picking rspm vs mran
yuvipanda Jan 4, 2022
685c8a0
Satisfy black
yuvipanda Jan 4, 2022
3ea55e9
Fix call to rstudio_base_scripts
yuvipanda Jan 4, 2022
d75c007
Test that older r snapshots get MRAN
yuvipanda Jan 4, 2022
ffbace3
Check for MRAN differently
yuvipanda Jan 4, 2022
5246a0e
Explicitly install r-base-core
yuvipanda Jan 4, 2022
0b76e9e
Always install IRKernel as a binary package
yuvipanda Jan 4, 2022
c398de3
Update r 3.6 package version pins
yuvipanda Jan 4, 2022
7c36566
Fix test for particular version of R 3.6
yuvipanda Jan 4, 2022
8d194b2
Remove unused constants
yuvipanda Jan 5, 2022
dbb5ff7
Clarify when mran raises valueerror
yuvipanda Jan 5, 2022
54636c6
Bump default R version to 4.1
yuvipanda Jan 5, 2022
e2aefcf
Update test to match new default R version
yuvipanda Jan 5, 2022
ceb4f8a
Hardcode rspm URL as snapshot for IRKernel
yuvipanda Jan 7, 2022
05e504a
Cleanup some comments
yuvipanda Jan 7, 2022
3cb3fbf
Remove unnecessary print()
yuvipanda Jan 7, 2022
7fd9a3d
Move 3.6.1 back to 3.6.1-3bionic
yuvipanda Jan 7, 2022
8a817eb
add tests for R conda
aplamada Jan 7, 2022
457f718
Merge pull request #1104 from yuvipanda/rspm
manics Jan 8, 2022
4352535
Merge pull request #1107 from yuvipanda/new-r
manics Jan 8, 2022
b2b0f75
Merge branch 'jupyterhub:main' into test_R_conda
aplamada Jan 8, 2022
c04fff3
Say 'apt repository' rather than PPA
yuvipanda Jan 10, 2022
aa17545
Merge pull request #1111 from yuvipanda/no-ppa
manics Jan 10, 2022
a37a205
Merge pull request #1108 from aplamada/test_R_conda
manics Jan 11, 2022
f508bf1
replace mamba & conda with micromamba
madhur-tandon Apr 20, 2021
2bfbf44
adhere to lint
madhur-tandon Apr 30, 2021
f9388c3
use latest micromamba
madhur-tandon Apr 30, 2021
6cc7567
use micromamba 0.12.2
madhur-tandon May 3, 2021
3288bca
fix tests + change name of script
madhur-tandon May 3, 2021
2e702f0
rename file and add conda-forge channel to .condarc
madhur-tandon May 17, 2021
9c109f9
use latest micromamba and fix MAMBA_ROOT_PREFIX
madhur-tandon May 17, 2021
8926cdc
minor fixes
madhur-tandon May 17, 2021
e12c436
add MAMBA_EXE environment variable
madhur-tandon May 17, 2021
b08c7dc
use env update instead of install
madhur-tandon May 31, 2021
d2a2c07
use experimental build of micromamba
madhur-tandon Jun 1, 2021
2d27bb2
revert back to using install
madhur-tandon Jun 1, 2021
22d4781
use strict channel priority
madhur-tandon Jun 1, 2021
abc1fe9
trigger
wolfv Jul 10, 2021
7ad3c17
trigger
wolfv Jul 10, 2021
7c4f2a5
fix up urls
wolfv Jul 10, 2021
3c2ded3
fix rm targets
wolfv Jul 10, 2021
089f6a8
Use micromamba 0.15.2
SylvainCorlay Sep 1, 2021
245fc1b
use 0.16.0
wolfv Oct 8, 2021
c96a230
try nightly
wolfv Oct 8, 2021
b6091c9
use wget better
wolfv Oct 8, 2021
e12ffc4
use mamba with fixed zstd linkage
wolfv Oct 12, 2021
7d4ac3b
Use micromamba 0.17 and install conda & mamba into base env
wolfv Nov 18, 2021
5f82b2c
Update micromamba installation
SylvainCorlay Nov 25, 2021
374efff
Fix CI by calling shell init
SylvainCorlay Dec 5, 2021
65a36cc
PR review comments: update micromamba, use MAMBA_EXE environment vari…
SylvainCorlay Jan 21, 2022
19acf46
remove r-recommended package
minrk Jan 25, 2022
ad0034c
note why --no-install-recommends is important for r packages
minrk Jan 25, 2022
bf99b93
Merge pull request #1117 from minrk/r-base-core
yuvipanda Jan 25, 2022
f6737cf
Use a smaller R library in our tests
yuvipanda Jan 25, 2022
945c452
set USER root after each directive block
minrk Jan 20, 2022
9066d07
Use testthat, rather than tinytest
yuvipanda Jan 25, 2022
3f07830
Merge pull request #1118 from yuvipanda/no-ggplot2
minrk Jan 25, 2022
813d28b
Merge pull request #1115 from minrk/set-user-root
manics Jan 25, 2022
6ab41ef
Delete /tmp/downloaded_packages after running install.R
yuvipanda Jan 25, 2022
a0f83c0
Re-add call to clean
SylvainCorlay Jan 25, 2022
e3d0a9a
Merge pull request #1119 from yuvipanda/delete-tmp
minrk Jan 26, 2022
8ab5c81
remove deprecated call to distutils strtobool
minrk Jan 26, 2022
885cb46
Allow passing in traitlets via commandline
yuvipanda Jan 26, 2022
3af3855
Allow passing in extra args to Docker initialization
yuvipanda Jan 26, 2022
d728a64
get version comparison from semver
minrk Jan 26, 2022
a5df995
Clarify how kwargs is set
yuvipanda Jan 26, 2022
2c27b09
Merge pull request #1122 from minrk/rm-distutils
yuvipanda Jan 26, 2022
a856862
Update ipywidgets jupyter-offlinenotebook jupyterlab
manics Jan 26, 2022
fd7597c
Update Changelog for release 2022.01.0
manics Jan 10, 2022
cbc7699
Merge pull request #1127 from manics/update-refreeze
yuvipanda Jan 26, 2022
25bc273
Remove -f command-line argument
SylvainCorlay Jan 27, 2022
7f89926
Merge pull request #1062 from wolfv/micromamba
minrk Jan 27, 2022
710d533
add `--help-all` support
minrk Jan 27, 2022
b8a2c88
Merge pull request #1124 from yuvipanda/extra-args
minrk Jan 27, 2022
8c21b96
Merge pull request #1123 from yuvipanda/commandline-args
manics Jan 27, 2022
f2f8bb6
update Python in dockerfile tests
minrk Jan 27, 2022
8422002
put micromamba in /usr/local/bin
minrk Jan 27, 2022
42f83f0
use mamba for installs once available
minrk Jan 28, 2022
47ea95a
Merge pull request #1128 from minrk/micromamba-usr-local
minrk Feb 1, 2022
753af0e
Last few changelog additions
manics Feb 2, 2022
e40242c
Merge pull request #1113 from manics/release
manics Feb 6, 2022
41f3478
Update Dockerfile to current Alpine (ALPINE_VERSION=3.15.0)
holzman Feb 10, 2022
46441c0
Merge pull request #1136 from holzman/alpine-3.15
manics Feb 11, 2022
c83efb0
Merge pull request #1130 from minrk/bump-python-docker
manics Feb 12, 2022
c8d86b9
Pass build_args to `render()` during `--no-build` for consistency wi…
yoogottamk Feb 13, 2022
d8c1978
Merge pull request #1135 from yoogottamk/dry-run-build-args
manics Feb 14, 2022
6960605
Merge remote-tracking branch 'jupyterhub/main'
shota-matsumoto-lm Feb 15, 2022
dabafe5
Add --use-deprecated=legacy-resolver in Dockerfile
shota-matsumoto-lm Feb 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG ALPINE_VERSION=3.12.0
ARG ALPINE_VERSION=3.15.0
FROM alpine:${ALPINE_VERSION}

RUN apk add --no-cache git python3 python3-dev py-pip build-base
Expand All @@ -22,7 +22,7 @@ RUN pip3 install hg-evolve --user --no-cache-dir

# install repo2docker
COPY --from=0 /tmp/wheelhouse /tmp/wheelhouse
RUN pip3 install --no-cache-dir /tmp/wheelhouse/*.whl --ignore-installed \
RUN pip3 install --use-deprecated=legacy-resolver --no-cache-dir /tmp/wheelhouse/*.whl --ignore-installed \
&& pip3 list

# add git-credential helper
Expand Down
50 changes: 50 additions & 0 deletions docs/source/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,56 @@ Changelog
=========


Version 2022.02.0
=================

`Full changelog <https://github.com/jupyterhub/repo2docker/compare/2021.08.0...2022.01.0>`_

New features
------------

- Update ipywidgets jupyter-offlinenotebook jupyterlab :pr:`1127` by :user:`manics`
- Allow passing in extra args to Docker initialization :pr:`1124` by :user:`yuvipanda`
- Allow passing in traitlets via commandline :pr:`1123` by :user:`yuvipanda`
- Bump default R version to 4.1 :pr:`1107` by :user:`yuvipanda`
- Update jupyterlab 3.2.5 jupyter-resource-usage 0.6.1 :pr:`1105` by :user:`manics`
- Get binary R packages from packagemanager.rstudio.com :pr:`1104` by :user:`yuvipanda`
- Support R 4.1 :pr:`1102` by :user:`yuvipanda`
- Add command line option to pass extra build args :pr:`1100` by :user:`TimoRoth`
- Set labels when building image from Dockerfile :pr:`1097` by :user:`TimoRoth`
- jupyterlab 3.1.17 :pr:`1092` by :user:`minrk`
- Bump JupyterLab to 3.1.11 :pr:`1081` by :user:`choldgraf`
- Bootstrap base env with micromamba :pr:`1062` by :user:`wolfv `
- Default UI to JupyterLab :pr:`1035` by :user:`SylvainCorlay`

API changes
-----------

Bug fixes
---------

Other merged PRs
----------------

- Put micromamba in /usr/local/bin and use mamba for installs :pr:`1128` by :user:`minrk`
- Remove deprecated calls to distutils :pr:`1122` by :user:`minrk`
- Delete /tmp/downloaded_packages after running install.R :pr:`1119` by :user:`yuvipanda`
- Use a smaller R library in our tests :pr:`1118` by :user:`yuvipanda`
- Only get R itself (r-base-core) from apt, not CRAN packages :pr:`1117` by :user:`minrk`
- set USER root after each directive block :pr:`1115` by :user:`minrk`
- Say 'apt repository' rather than PPA :pr:`1111` by :user:`yuvipanda`
- add tests for R conda :pr:`1108` by :user:`aplamada`
- Add help message to freeze.py :pr:`1106` by :user:`manics`
- Quieter R builds :pr:`1103` by :user:`yuvipanda`
- update user_interface doc to reflect that lab is default :pr:`1085` by :user:`minrk`
- Updates to dev docs + Recommonmark -> MyST Parser :pr:`1082` by :user:`choldgraf`
- Fix Docker build (again) :pr:`1078` by :user:`manics`
- [mrg] __init__.py: r_version: fixed description :pr:`1074` by :user:`magnush0lm`
- Typo fix in utils docstring :pr:`1072` by :user:`jgarte`
- Rename requirements.py-3.5.txt to requirements.py-3.5.pip :pr:`1061` by :user:`manics`
- Remove nodesource' nodejs :pr:`847` by :user:`yuvipanda`


Version 2021.08.0
=================

Expand Down
52 changes: 46 additions & 6 deletions repo2docker/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,20 @@ def get_argparser():
description="Fetch a repository and build a container image"
)

argparser.add_argument(
"--help-all",
dest="help_all",
action="store_true",
help="Display all configurable options and exit.",
)

argparser.add_argument(
"--version",
dest="version",
action="store_true",
help="Print the repo2docker version and exit.",
)

argparser.add_argument(
"--config",
default="repo2docker_config.py",
Expand Down Expand Up @@ -204,15 +218,24 @@ def get_argparser():

argparser.add_argument("--appendix", type=str, help=Repo2Docker.appendix.help)

argparser.add_argument("--subdir", type=str, help=Repo2Docker.subdir.help)
argparser.add_argument(
"--label",
dest="labels",
action="append",
help="Extra label to set on the image, in form name=value",
default=[],
)

argparser.add_argument(
"--version",
dest="version",
action="store_true",
help="Print the repo2docker version and exit.",
"--build-arg",
dest="build_args",
action="append",
help="Extra build arg to pass to the build process, in form name=value",
default=[],
)

argparser.add_argument("--subdir", type=str, help=Repo2Docker.subdir.help)

argparser.add_argument(
"--cache-from", action="append", default=[], help=Repo2Docker.cache_from.help
)
Expand All @@ -229,15 +252,24 @@ def make_r2d(argv=None):
if argv is None:
argv = sys.argv[1:]

argparser = get_argparser()

# version must be checked before parse, as repo/cmd are required and
# will spit out an error if allowed to be parsed first.
if "--version" in argv:
print(__version__)
sys.exit(0)

args = get_argparser().parse_args(argv)
if "--help-all" in argv:
argparser.print_help()
print("\nAll configurable options:\n")
Repo2Docker().print_help(classes=True)
sys.exit(0)

args, traitlet_args = argparser.parse_known_args(argv)

r2d = Repo2Docker()
r2d.parse_command_line(traitlet_args)

if args.debug:
r2d.log_level = logging.DEBUG
Expand All @@ -246,6 +278,14 @@ def make_r2d(argv=None):
if args.appendix:
r2d.appendix = args.appendix

for l in args.labels:
key, _, val = l.partition("=")
r2d.labels[key] = val

for a in args.build_args:
key, _, val = a.partition("=")
r2d.extra_build_args[key] = val

r2d.repo = args.repo
r2d.ref = args.ref

Expand Down
47 changes: 38 additions & 9 deletions repo2docker/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ class Repo2Docker(Application):
name = "jupyter-repo2docker"
version = __version__
description = __doc__
# disable aliases/flags because we don't use the traitlets for CLI parsing
# other than --Class.trait=value
aliases = {}
flags = {}

@default("log_level")
def _default_log_level(self):
Expand Down Expand Up @@ -239,6 +243,26 @@ def _user_name_default(self):
""",
)

labels = Dict(
{},
help="""
Extra labels to set on the final image.

Each Label is a key-value pair, with the key being the name of the label
and the value its value.
""",
config=True,
)

extra_build_args = Dict(
{},
help="""
Extra build args to pass to the image build process.
This is pretty much only useful for custom Dockerfile based builds.
""",
config=True,
)

json_logs = Bool(
False,
help="""
Expand Down Expand Up @@ -472,7 +496,7 @@ def json_excepthook(self, etype, evalue, traceback):
extra=dict(phase="failed"),
)

def initialize(self):
def initialize(self, *args, **kwargs):
"""Init repo2docker configuration before start"""
# FIXME: Remove this function, move it to setters / traitlet reactors
if self.json_logs:
Expand Down Expand Up @@ -749,23 +773,28 @@ def build(self):
picked_buildpack.labels["repo2docker.repo"] = repo_label
picked_buildpack.labels["repo2docker.ref"] = self.ref

picked_buildpack.labels.update(self.labels)

build_args = {
"NB_USER": self.user_name,
"NB_UID": str(self.user_id),
}
if self.target_repo_dir:
build_args["REPO_DIR"] = self.target_repo_dir
build_args.update(self.extra_build_args)

if self.dry_run:
print(picked_buildpack.render())
print(picked_buildpack.render(build_args))
else:
self.log.debug(
picked_buildpack.render(), extra=dict(phase="building")
picked_buildpack.render(build_args),
extra=dict(phase="building"),
)
if self.user_id == 0:
raise ValueError(
"Root as the primary user in the image is not permitted."
)

build_args = {
"NB_USER": self.user_name,
"NB_UID": str(self.user_id),
}
if self.target_repo_dir:
build_args["REPO_DIR"] = self.target_repo_dir
self.log.info(
"Using %s builder\n",
bp.__class__.__name__,
Expand Down
89 changes: 45 additions & 44 deletions repo2docker/buildpacks/_r_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,66 +3,67 @@

Keeping this in r.py would lead to cyclic imports.
"""
from ..semver import parse_version as V

# Via https://rstudio.com/products/rstudio/download-server/debian-ubuntu/
RSTUDIO_URL = "https://download2.rstudio.org/server/bionic/amd64/rstudio-server-1.2.5001-amd64.deb"
# This is MD5, because that is what RStudio download page provides!
RSTUDIO_CHECKSUM = "d33881b9ab786c09556c410e7dc477de"

# Via https://www.rstudio.com/products/shiny/download-server/
SHINY_URL = "https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.12.933-amd64.deb"
SHINY_CHECKSUM = "9aeef6613e7f58f21c97a4600921340e"

# Version of MRAN to pull devtools from.
DEVTOOLS_VERSION = "2018-02-01"
def rstudio_base_scripts(r_version):
"""Base steps to install RStudio and shiny-server."""

# IRKernel version - specified as a tag in the IRKernel repository
IRKERNEL_VERSION = "1.1"
# Shiny server (not the package!) seems to be the same version for all R versions
shiny_server_url = "https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.17.973-amd64.deb"
shiny_proxy_version = "1.1"
shiny_sha256sum = "80f1e48f6c824be7ef9c843bb7911d4981ac7e8a963e0eff823936a8b28476ee"

if V(r_version) <= V("4.1"):
# Older RStudio and jupyter-rsession-proxy for v4.1 and below
rstudio_url = "https://download2.rstudio.org/server/bionic/amd64/rstudio-server-1.3.959-amd64.deb"
rstudio_sha256sum = (
"187af05cab1221282487fdc33f4b161484c3228eaade3d6697b1d41c206ee6d9"
)
rsession_proxy_version = "1.4"
else:
rstudio_url = "https://download2.rstudio.org/server/bionic/amd64/rstudio-server-2021.09.1-372-amd64.deb"
rstudio_sha256sum = (
"c58df09468870b89f1796445853dce2dacaa0fc5b7bb1f92b036fa8da1d1f8a3"
)
rsession_proxy_version = "2.0.1"

def rstudio_base_scripts():
"""Base steps to install RStudio and shiny-server."""
return [
(
"root",
# Install RStudio!
# we should have --no-install-recommends on all our apt-get install commands,
# but here it's important because these recommend r-base,
# which will upgrade the installed version of R, undoing our pinned version
r"""
curl --silent --location --fail {rstudio_url} > /tmp/rstudio.deb && \
echo '{rstudio_checksum} /tmp/rstudio.deb' | md5sum -c - && \
apt-get update && \
apt install -y /tmp/rstudio.deb && \
rm /tmp/rstudio.deb && \
apt-get -qq purge && \
apt-get -qq clean && \
rm -rf /var/lib/apt/lists/*
""".format(
rstudio_url=RSTUDIO_URL, rstudio_checksum=RSTUDIO_CHECKSUM
curl --silent --location --fail {rstudio_url} > /tmp/rstudio.deb && \
curl --silent --location --fail {shiny_server_url} > /tmp/shiny.deb && \
echo '{rstudio_sha256sum} /tmp/rstudio.deb' | sha256sum -c - && \
echo '{shiny_sha256sum} /tmp/shiny.deb' | sha256sum -c - && \
apt-get update > /dev/null && \
apt install -y --no-install-recommends /tmp/rstudio.deb /tmp/shiny.deb && \
rm /tmp/rstudio.deb && \
apt-get -qq purge && \
apt-get -qq clean && \
rm -rf /var/lib/apt/lists/*
""".format(
rstudio_url=rstudio_url,
rstudio_sha256sum=rstudio_sha256sum,
shiny_server_url=shiny_server_url,
shiny_sha256sum=shiny_sha256sum,
),
),
(
"root",
# Install Shiny Server!
"${NB_USER}",
# Install jupyter-rsession-proxy
r"""
curl --silent --location --fail {url} > {deb} && \
echo '{checksum} {deb}' | md5sum -c - && \
dpkg -i {deb} && \
rm {deb}
pip install --no-cache \
jupyter-rsession-proxy=={rsession_proxy_version} \
jupyter-shiny-proxy=={shiny_proxy_version}
""".format(
url=SHINY_URL, checksum=SHINY_CHECKSUM, deb="/tmp/shiny.deb"
rsession_proxy_version=rsession_proxy_version,
shiny_proxy_version=shiny_proxy_version,
),
),
(
"${NB_USER}",
# Install nbrsessionproxy
r"""
pip install --no-cache-dir jupyter-server-proxy==1.4.0 && \
pip install --no-cache-dir https://github.com/jupyterhub/jupyter-rsession-proxy/archive/d5efed5455870556fc414f30871d0feca675a4b4.zip && \
pip install --no-cache-dir https://github.com/ryanlovett/jupyter-shiny-proxy/archive/47557dc47e2aeeab490eb5f3eeae414cdde4a6a9.zip && \
jupyter serverextension enable jupyter_server_proxy --sys-prefix && \
jupyter nbextension install --py jupyter_server_proxy --sys-prefix && \
jupyter nbextension enable --py jupyter_server_proxy --sys-prefix
""",
),
(
# Not all of these locations are configurable; so we make sure
# they exist and have the correct permissions
Expand Down
Loading