Skip to content

Commit

Permalink
Merge pull request #85 from Ouranosinc/update-to-jupyterlab-v3
Browse files Browse the repository at this point in the history
docker: update to JupyterLab v3 and fix broken jupyterlab-system-monitor plugin

# Overview

JupyterLab v3 was available since January 2021 but we had to pin to v2 since many of the plugins we use were broken at the time for v3.

Fast forward 7 months later, only the Google Drive plugin still do not support JupyterLab v3 so we decided to drop it since it was only used by one single user (`ls -larth  /data/jupyterhub_user_data/*/.home/.jupyter/lab/user-settings/@jupyterlab/google-drive /dev/null` shows who uses it).  We have not enabled the system-wide Google Drive config due to security concern so each user had to configure it themselves separately.

Staying on JupyterLab v2 caused us the reverse problem, some plugins stopped working with v2, example the jupyterlab-system-monitor one.  That one is becoming more crucial as we have more and more users and we would like users to be aware of their resource consumptions on the system.

This PR fixes #83, the jupyterlab-system-monitor problem.

## Changes

- Update to JupyterLab v3
- Update install steps for all plugins to be compatible with JupyterLab v3
- Drop Google Drive plugin since not compatible with v3
- Fix jupyterlab-system-monitor plugin, was broken with v2
- Unpin pandas as xarray issue pydata/xarray/issues/5588 fixed
- Picked up latest RavenPy 0.7.0
- Relevant packages changes:
```diff
<   - jupyterlab=2.2.9=pyhd8ed1ab_0
>   - jupyterlab=3.1.0=pyhd8ed1ab_0

<   - jupyterlab_server=1.2.0=py_0
>   - jupyterlab_server=2.6.1=pyhd8ed1ab_0

<   - jupyter-archive=2.2.0=pyhd8ed1ab_0
>   - jupyter-archive=3.0.1=pyhd8ed1ab_0

<   - jupyter_bokeh=2.0.4=pyhd8ed1ab_0
>   - jupyter_bokeh=3.0.2=pyhd8ed1ab_0

<   - jupyterlab-git=0.24.0=pyhd8ed1ab_0
>   - jupyterlab-git=0.31.0=pyhd8ed1ab_0

<   - nbdime=2.1.0=py_0
>   - nbdime=3.1.0=pyhd8ed1ab_0

# Pip to Conda package
<     - nbresuse==0.4.0  
>   - nbresuse=0.4.0=pyhd8ed1ab_0

>   - nbclassic=0.3.1=pyhd8ed1ab_1

>   - jupyterlab-system-monitor=0.8.0=pyhd8ed1ab_1
>   - jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
>   - jupyterlab-topbar=0.6.1=pyhd8ed1ab_2 
>     - jupyterlab-logout=0.5.0

<   - jupyter_conda=5.1.1=hd8ed1ab_0

<   - ravenpy=0.6.0=pyh1bb2064_2
>   - ravenpy=0.7.0=pyh1bb2064_0 

<   - pandas=1.2.5=py37h219a48f_0
>   - pandas=1.3.1=py37h219a48f_0

<   - xarray=0.18.2=pyhd8ed1ab_0
>   - xarray=0.19.0=pyhd8ed1ab_1

<   - dask=2021.7.0=pyhd8ed1ab_0
>   - dask=2021.7.1=pyhd8ed1ab_0

<   - regionmask=0.6.2=pyhd8ed1ab_0
>   - regionmask=0.7.0=pyhd8ed1ab_0
```

## Additional Information

Screenshot showing differences between v2 vs v3 and the working jupyterlab-system-monitor plugin.

![Screenshot from 2021-07-28 14-10-33](https://user-images.githubusercontent.com/11966697/127380391-7f3a6ad4-25c6-4a8b-ac01-8c8d9633d09c.png)

Bokeh and pyviz testing by running `ClimateDataAnalysis-5Visualization.ipynb` on the old and new Jupyter env and manually comparing the graphics generated.  They look similar.

Jenkins build all passed https://daccs-jenkins.crim.ca/job/PAVICS-e2e-workflow-tests/job/update-to-jupyterlab-v3/7/console (CRIM Jenkins)
Notebooks fixes required for the above passing Jenkins build:
* Ouranosinc/pavics-sdi#224
* bird-house/finch#196
* Ouranosinc/PAVICS-landing#30

Jenkins build for Raven nb, all passed: http://jenkins.ouranos.ca/job/PAVICS-e2e-workflow-tests/job/update-to-jupyterlab-v3/5/console

Matching PR to deploy this new Jupyter env to PAVICS: bird-house/birdhouse-deploy#185

Full diff of `conda env export`:
[210723-210728-conda-env-export.diff.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/6896271/210723-210728-conda-env-export.diff.txt)
```diff
20a21
>   - babel=2.9.1=pyh44b312d_0
71c72
<   - curl=7.77.0=hea6ffbf_0
---
>   - curl=7.78.0=hea6ffbf_0
74,76c75,77
<   - dash=1.20.0=pyhd8ed1ab_0
<   - dash-core-components=1.16.0=pyhd8ed1ab_0
<   - dash-html-components=1.1.3=pyhd8ed1ab_0
---
>   - dash=1.21.0=pyhd8ed1ab_0
>   - dash-core-components=1.17.1=pyhd8ed1ab_0
>   - dash-html-components=1.1.4=pyhd8ed1ab_0
78,80c79,81
<   - dash-table=4.11.3=pyhd8ed1ab_0
<   - dask=2021.7.0=pyhd8ed1ab_0
<   - dask-core=2021.7.0=pyhd8ed1ab_0
---
>   - dash-table=4.12.0=pyhd8ed1ab_0
>   - dask=2021.7.1=pyhd8ed1ab_0
>   - dask-core=2021.7.1=pyhd8ed1ab_0
85c86
<   - debugpy=1.4.0=py37hcd2ae1e_0
---
>   - debugpy=1.4.1=py37hcd2ae1e_0
90c91
<   - distributed=2021.7.0=py37h89c1867_0
---
>   - distributed=2021.7.1=py37h89c1867_0
127c128
<   - gitpython=3.1.19=pyhd8ed1ab_0
---
>   - gitpython=3.1.20=pyhd8ed1ab_0
138a140
>   - haversine=2.3.1=pyhd8ed1ab_0
173c175
<   - jupyter-archive=2.2.0=pyhd8ed1ab_0
---
>   - jupyter-archive=3.0.1=pyhd8ed1ab_0
175c177,179
<   - jupyter_bokeh=2.0.4=pyhd8ed1ab_0
---
>   - jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
>   - jupyter-server-mathjax=0.2.3=pyhd8ed1ab_0
>   - jupyter_bokeh=3.0.2=pyhd8ed1ab_0
177d180
<   - jupyter_conda=5.1.1=hd8ed1ab_0
184,185c187,190
<   - jupyterlab=2.2.9=pyhd8ed1ab_0
<   - jupyterlab-git=0.24.0=pyhd8ed1ab_0
---
>   - jupyterlab=3.1.0=pyhd8ed1ab_0
>   - jupyterlab-git=0.31.0=pyhd8ed1ab_0
>   - jupyterlab-system-monitor=0.8.0=pyhd8ed1ab_1
>   - jupyterlab-topbar=0.6.1=pyhd8ed1ab_2
187c192
<   - jupyterlab_server=1.2.0=py_0
---
>   - jupyterlab_server=2.6.1=pyhd8ed1ab_0
193c198
<   - krb5=1.19.1=hcc1bbae_0
---
>   - krb5=1.19.2=hcc1bbae_0
197c202
<   - ld_impl_linux-64=2.36.1=hea4e1c9_1
---
>   - ld_impl_linux-64=2.36.1=hea4e1c9_2
208c213
<   - libcurl=7.77.0=h2574ce0_0
---
>   - libcurl=7.78.0=h2574ce0_0
217c222
<   - libgcc-ng=11.1.0=hc902ee8_0
---
>   - libgcc-ng=11.1.0=hc902ee8_2
222c227
<   - libgomp=11.1.0=hc902ee8_0
---
>   - libgomp=11.1.0=hc902ee8_2
242c247
<   - libstdcxx-ng=11.1.0=h56837e0_0
---
>   - libstdcxx-ng=11.1.0=h56837e0_2
260c265
<   - mapclassify=2.4.2=pyhd8ed1ab_0
---
>   - mapclassify=2.4.3=pyhd8ed1ab_0
278a284
>   - nbclassic=0.3.1=pyhd8ed1ab_1
281c287
<   - nbdime=2.1.0=py_0
---
>   - nbdime=3.1.0=pyhd8ed1ab_0
282a289
>   - nbresuse=0.4.0=pyhd8ed1ab_0
308c315
<   - pandas=1.2.5=py37h219a48f_0
---
>   - pandas=1.3.1=py37h219a48f_0
321c328
<   - pip=21.1.3=pyhd8ed1ab_0
---
>   - pip=21.2.1=pyhd8ed1ab_0
380c387
<   - ravenpy=0.6.0=pyh1bb2064_2
---
>   - ravenpy=0.7.0=pyh1bb2064_0
382c389
<   - regionmask=0.6.2=pyhd8ed1ab_0
---
>   - regionmask=0.7.0=pyhd8ed1ab_0
444c451
<   - xarray=0.18.2=pyhd8ed1ab_0
---
>   - xarray=0.19.0=pyhd8ed1ab_1
481a489
>     - jupyterlab-logout==0.5.0
483d490
<     - nbresuse==0.4.0
```

Full new `conda env export`:
[210728-conda-env-export.yml.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/6896274/210728-conda-env-export.yml.txt)
```
name: birdy
channels:
  - cdat
  - conda-forge
  - defaults
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=1_gnu
  - affine=2.3.0=py_0
  - aiohttp=3.7.4.post0=py37h5e8e339_0
  - alembic=1.6.5=pyhd8ed1ab_0
  - alsa-lib=1.2.3=h516909a_0
  - ansi2html=1.6.0=py37h89c1867_1
  - anyio=3.3.0=py37h89c1867_0
  - appdirs=1.4.4=pyh9f0ad1d_0
  - argon2-cffi=20.1.0=py37h5e8e339_2
  - asciitree=0.3.3=py_2
  - async-timeout=3.0.1=py_1000
  - async_generator=1.10=py_0
  - attrs=21.2.0=pyhd8ed1ab_0
  - babel=2.9.1=pyh44b312d_0
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - beautifulsoup4=4.9.3=pyhb0f4dca_0
  - birdy=v0.8.0=pyh6c4a22f_1
  - bleach=3.3.1=pyhd8ed1ab_0
  - blinker=1.4=py_1
  - blosc=1.21.0=h9c3ff4c_0
  - bokeh=2.3.3=py37h89c1867_0
  - boltons=21.0.0=pyhd8ed1ab_0
  - boost-cpp=1.74.0=hc6e9bd1_3
  - bottleneck=1.3.2=py37h902c9e0_3
  - branca=0.4.2=pyhd8ed1ab_0
  - brotli=1.0.9=h7f98852_5
  - brotli-bin=1.0.9=h7f98852_5
  - brotli-python=1.0.9=py37hcd2ae1e_5
  - brotlipy=0.7.0=py37h5e8e339_1001
  - brunsli=0.1=h9c3ff4c_0
  - bzip2=1.0.8=h7f98852_4
  - c-ares=1.17.1=h7f98852_1
  - ca-certificates=2021.5.30=ha878542_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cachetools=4.2.2=pyhd8ed1ab_0
  - cairo=1.16.0=h6cf1ce9_1008
  - cartopy=0.19.0.post1=py37h0c48da3_0
  - cdat_info=8.2.1=pyh9f0ad1d_1
  - cdtime=3.1.4=py37h5ad02f4_2
  - cdutil=8.2.1=pyh9f0ad1d_0
  - certifi=2021.5.30=py37h89c1867_0
  - certipy=0.1.3=py_0
  - cf_xarray=0.6.0=pyh6c4a22f_0
  - cffi=1.14.6=py37hc58025e_0
  - cfgrib=0.9.9.0=pyhd8ed1ab_1
  - cfitsio=3.470=hb418390_7
  - cftime=1.5.0=py37h6f94858_0
  - chardet=4.0.0=py37h89c1867_1
  - charls=2.2.0=h9c3ff4c_0
  - charset-normalizer=2.0.0=pyhd8ed1ab_0
  - click=7.1.2=pyh9f0ad1d_0
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_0
  - climpred=2.1.4=pyhd8ed1ab_0
  - clisops=0.6.5=pyh6c4a22f_0
  - cloudpickle=1.6.0=py_0
  - colorama=0.4.4=pyh9f0ad1d_0
  - colorcet=2.0.6=pyhd8ed1ab_0
  - configurable-http-proxy=4.5.0=node15_he6ea98c_0
  - coverage=5.5=py37h5e8e339_0
  - cryptography=3.4.7=py37h5d9358c_0
  - curl=7.78.0=hea6ffbf_0
  - cycler=0.10.0=py_2
  - cytoolz=0.11.0=py37h5e8e339_3
  - dash=1.21.0=pyhd8ed1ab_0
  - dash-core-components=1.17.1=pyhd8ed1ab_0
  - dash-html-components=1.1.4=pyhd8ed1ab_0
  - dash-renderer=1.9.1=pyhd8ed1ab_0
  - dash-table=4.12.0=pyhd8ed1ab_0
  - dask=2021.7.1=pyhd8ed1ab_0
  - dask-core=2021.7.1=pyhd8ed1ab_0
  - dataclasses=0.8=pyhc8e2a94_1
  - datashader=0.13.0=pyh6c4a22f_0
  - datashape=0.5.4=py_1
  - dbus=1.13.6=h48d8840_2
  - debugpy=1.4.1=py37hcd2ae1e_0
  - decorator=5.0.9=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - descartes=1.1.0=py_4
  - distarray=2.12.2=pyhd8ed1ab_2
  - distributed=2021.7.1=py37h89c1867_0
  - docopt=0.6.2=py_1
  - docrep=0.3.2=pyh44b312d_0
  - dv3d=8.2.1=pyh9f0ad1d_0
  - eccodes=2.21.0=ha0e6eb6_0
  - entrypoints=0.3=pyhd8ed1ab_1003
  - eofs=1.4.0=py_0
  - esgf-compute-api=2.3.9=0_h1234567_
  - esmf=8.1.0=nompi_hed08645_0
  - esmpy=8.1.0=nompi_py37hff16fce_0
  - expat=2.4.1=h9c3ff4c_0
  - fasteners=0.16=pyhd8ed1ab_0
  - fastprogress=1.0.0=py_0
  - ffmpeg=4.2.3=h167e202_0
  - fiona=1.8.18=py37h527b4ca_0
  - flask=2.0.1=pyhd8ed1ab_0
  - flask-compress=1.10.1=pyhd8ed1ab_0
  - fontconfig=2.13.1=hba837de_1005
  - freetype=2.10.4=h0708190_1
  - freexl=1.0.6=h7f98852_0
  - fsspec=2021.7.0=pyhd8ed1ab_0
  - funcsigs=1.0.2=py_3
  - future=0.18.2=py37h89c1867_3
  - g2clib=1.6.3=hdfa6d74_0
  - gcsfs=2021.7.0=pyhd8ed1ab_0
  - gdal=3.1.4=py37h2ec2946_8
  - genutil=8.2.1=py37h161383b_1
  - geopandas=0.9.0=pyhd8ed1ab_1
  - geopandas-base=0.9.0=pyhd8ed1ab_1
  - geos=3.9.1=h9c3ff4c_2
  - geotiff=1.6.0=h2b14fbe_4
  - geoviews=1.9.1=pyhd8ed1ab_0
  - geoviews-core=1.9.1=pyha770c72_0
  - gettext=0.19.8.1=h0b5b191_1005
  - ghostscript=9.54.0=h9c3ff4c_1
  - giflib=5.2.1=h36c2ea0_2
  - gitdb=4.0.7=pyhd8ed1ab_0
  - gitpython=3.1.20=pyhd8ed1ab_0
  - glib=2.68.3=h9c3ff4c_0
  - glib-tools=2.68.3=h9c3ff4c_0
  - gmp=6.2.1=h58526e2_0
  - gnutls=3.6.13=h85f3911_1
  - google-auth=1.33.1=pyh6c4a22f_0
  - google-auth-oauthlib=0.4.4=pyhd8ed1ab_0
  - greenlet=1.1.0=py37hcd2ae1e_0
  - gst-plugins-base=1.18.4=hf529b03_2
  - gstreamer=1.18.4=h76c114f_2
  - h5netcdf=0.11.0=pyhd8ed1ab_0
  - h5py=3.3.0=nompi_py37ha3df211_100
  - haversine=2.3.1=pyhd8ed1ab_0
  - hdf4=4.2.15=h10796ff_3
  - hdf5=1.10.6=nompi_h6a2412b_1114
  - heapdict=1.0.1=py_0
  - holoviews=1.14.5=pyhd8ed1ab_0
  - hvplot=0.7.3=pyh6c4a22f_0
  - icu=68.1=h58526e2_0
  - idna=3.1=pyhd3deb0d_0
  - imagecodecs=2021.3.31=py37haf4b6ec_0
  - imageio=2.9.0=py_0
  - importlib-metadata=4.6.1=py37h89c1867_0
  - importlib_metadata=4.6.1=hd8ed1ab_0
  - importlib_resources=5.2.0=pyhd8ed1ab_0
  - iniconfig=1.1.1=pyh9f0ad1d_0
  - intake=0.6.2=pyhd8ed1ab_0
  - intake-esm=2021.1.15=pyhd8ed1ab_0
  - intake-geopandas=0.2.4=pyhd8ed1ab_0
  - intake-thredds=2021.6.16=pyhd8ed1ab_0
  - intake-xarray=0.5.0=pyhd8ed1ab_0
  - ipykernel=5.5.5=py37h085eea5_0
  - ipyleaflet=0.14.0=pyhd8ed1ab_1
  - ipython=7.25.0=py37h085eea5_1
  - ipython_genutils=0.2.0=py_1
  - ipywidgets=7.6.3=pyhd3deb0d_0
  - itsdangerous=2.0.1=pyhd8ed1ab_0
  - jasper=1.900.1=h07fcdf6_1006
  - jedi=0.18.0=py37h89c1867_2
  - jinja2=3.0.1=pyhd8ed1ab_0
  - joblib=1.0.1=pyhd8ed1ab_0
  - jpeg=9d=h36c2ea0_0
  - json-c=0.15=h98cffda_0
  - json5=0.9.5=pyh9f0ad1d_0
  - jsonpickle=2.0.0=pyhd8ed1ab_0
  - jsonschema=3.2.0=pyhd8ed1ab_3
  - jupyter=1.0.0=py37h89c1867_6
  - jupyter-archive=3.0.1=pyhd8ed1ab_0
  - jupyter-dash=0.4.0=pyhd8ed1ab_0
  - jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
  - jupyter-server-mathjax=0.2.3=pyhd8ed1ab_0
  - jupyter_bokeh=3.0.2=pyhd8ed1ab_0
  - jupyter_client=6.1.12=pyhd8ed1ab_0
  - jupyter_console=6.4.0=pyhd8ed1ab_0
  - jupyter_core=4.7.1=py37h89c1867_0
  - jupyter_server=1.10.1=pyhd8ed1ab_0
  - jupyter_telemetry=0.1.0=pyhd8ed1ab_1
  - jupyterhub=1.4.2=py37h89c1867_0
  - jupyterhub-base=1.4.2=py37h89c1867_0
  - jupyterlab=3.1.0=pyhd8ed1ab_0
  - jupyterlab-git=0.31.0=pyhd8ed1ab_0
  - jupyterlab-system-monitor=0.8.0=pyhd8ed1ab_1
  - jupyterlab-topbar=0.6.1=pyhd8ed1ab_2
  - jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
  - jupyterlab_server=2.6.1=pyhd8ed1ab_0
  - jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
  - jupytext=1.11.4=pyhd0ecf6b_0
  - jxrlib=1.1=h7f98852_2
  - kealib=1.4.14=hcc255d8_2
  - kiwisolver=1.3.1=py37h2527ec5_1
  - krb5=1.19.2=hcc1bbae_0
  - lame=3.100=h7f98852_1001
  - lazy-object-proxy=1.6.0=py37h5e8e339_0
  - lcms2=2.12=hddcbb42_0
  - ld_impl_linux-64=2.36.1=hea4e1c9_2
  - lerc=2.2.1=h9c3ff4c_0
  - libaec=1.0.5=h9c3ff4c_0
  - libblas=3.8.0=17_openblas
  - libbrotlicommon=1.0.9=h7f98852_5
  - libbrotlidec=1.0.9=h7f98852_5
  - libbrotlienc=1.0.9=h7f98852_5
  - libcblas=3.8.0=17_openblas
  - libcdms=3.1.2=h981a4fd_113
  - libcf=1.0.3=py37heda41dd_109
  - libclang=11.1.0=default_ha53f305_1
  - libcurl=7.78.0=h2574ce0_0
  - libdap4=3.20.6=hd7c4107_2
  - libdeflate=1.7=h7f98852_5
  - libdrs=3.1.2=h7918d09_113
  - libdrs_f=3.1.2=h5026c31_111
  - libedit=3.1.20191231=he28a2e2_2
  - libev=4.33=h516909a_1
  - libevent=2.1.10=hcdb4288_3
  - libffi=3.3=h58526e2_2
  - libgcc-ng=11.1.0=hc902ee8_2
  - libgdal=3.1.4=h38ff51b_8
  - libgfortran-ng=11.1.0=h69a702a_0
  - libgfortran5=11.1.0=h6c583b3_0
  - libglib=2.68.3=h3e27bee_0
  - libgomp=11.1.0=hc902ee8_2
  - libiconv=1.16=h516909a_0
  - libidn2=2.3.2=h7f98852_0
  - libkml=1.3.0=h238a007_1014
  - liblapack=3.8.0=17_openblas
  - libllvm10=10.0.1=he513fc3_3
  - libllvm11=11.1.0=hf817b99_2
  - libnetcdf=4.7.4=nompi_h56d31a8_107
  - libnghttp2=1.43.0=h812cca2_0
  - libogg=1.3.4=h7f98852_1
  - libopenblas=0.3.10=pthreads_h4812303_5
  - libopus=1.3.1=h7f98852_1
  - libpng=1.6.37=h21135ba_2
  - libpq=13.3=hd57d9b9_0
  - libprotobuf=3.17.2=h780b84a_1
  - librttopo=1.1.0=h1185371_6
  - libsodium=1.0.18=h36c2ea0_1
  - libspatialindex=1.9.3=h9c3ff4c_4
  - libspatialite=5.0.1=he52d314_3
  - libssh2=1.9.0=ha56f1ee_6
  - libstdcxx-ng=11.1.0=h56837e0_2
  - libtiff=4.2.0=hbd63e13_2
  - libunistring=0.9.10=h7f98852_0
  - libuuid=2.32.1=h7f98852_1000
  - libuv=1.41.1=h7f98852_0
  - libvorbis=1.3.7=h9c3ff4c_0
  - libwebp-base=1.2.0=h7f98852_2
  - libxcb=1.13=h7f98852_1003
  - libxkbcommon=1.0.3=he3ba5ed_0
  - libxml2=2.9.12=h72842e0_0
  - libxslt=1.1.33=h15afd5d_2
  - libzopfli=1.0.3=h9c3ff4c_0
  - llvmlite=0.36.0=py37h9d7f4d0_0
  - locket=0.2.0=py_2
  - lxml=4.6.3=py37h77fd288_0
  - lz4-c=1.9.3=h9c3ff4c_0
  - mako=1.1.4=pyh44b312d_0
  - mamba_gator=5.1.1=pyhd8ed1ab_0
  - mapclassify=2.4.3=pyhd8ed1ab_0
  - markdown=3.3.4=pyhd8ed1ab_0
  - markdown-it-py=1.1.0=pyhd8ed1ab_0
  - markupsafe=2.0.1=py37h5e8e339_0
  - matplotlib=3.4.2=py37h89c1867_0
  - matplotlib-base=3.4.2=py37hdd32ed1_0
  - matplotlib-inline=0.1.2=pyhd8ed1ab_2
  - mdit-py-plugins=0.2.8=pyhd8ed1ab_0
  - memory_profiler=0.58.0=py_0
  - mesalib=18.3.1=h590aaf7_0
  - mistune=0.8.4=py37h5e8e339_1004
  - monotonic=1.5=py_0
  - more-itertools=8.8.0=pyhd8ed1ab_0
  - msgpack-python=1.0.2=py37h2527ec5_1
  - multidict=5.1.0=py37h5e8e339_1
  - multipledispatch=0.6.0=py_0
  - munch=2.5.0=py_0
  - mysql-common=8.0.25=ha770c72_0
  - mysql-libs=8.0.25=h935591d_0
  - nbclassic=0.3.1=pyhd8ed1ab_1
  - nbclient=0.5.3=pyhd8ed1ab_0
  - nbconvert=6.1.0=py37h89c1867_0
  - nbdime=3.1.0=pyhd8ed1ab_0
  - nbformat=5.1.3=pyhd8ed1ab_0
  - nbresuse=0.4.0=pyhd8ed1ab_0
  - nbval=0.9.6=pyh9f0ad1d_0
  - nc-time-axis=1.3.1=pyhd8ed1ab_2
  - ncurses=6.2=h58526e2_4
  - nest-asyncio=1.5.1=pyhd8ed1ab_0
  - netcdf-fortran=4.5.3=nompi_h996563d_103
  - netcdf4=1.5.6=nompi_py37hf7b6e46_102
  - nettle=3.6=he412f7d_0
  - networkx=2.5=py_0
  - nodejs=15.14.0=h92b4a50_0
  - notebook=6.4.0=pyha770c72_0
  - nspr=4.30=h9c3ff4c_0
  - nss=3.67=hb5efdd6_0
  - numba=0.53.1=py37hb11d6e1_1
  - numcodecs=0.8.0=py37hcd2ae1e_0
  - numpy=1.21.1=py37h038b26d_0
  - oauthlib=3.1.1=pyhd8ed1ab_0
  - olefile=0.46=pyh9f0ad1d_1
  - openblas=0.3.10=pthreads_h04b7a96_5
  - openh264=2.1.1=h780b84a_0
  - openjpeg=2.4.0=hb52868f_1
  - openssl=1.1.1k=h7f98852_0
  - ostrich=21.03.16=h4bd325d_1
  - owslib=0.24.1=pyhd8ed1ab_0
  - packaging=21.0=pyhd8ed1ab_0
  - pamela=1.0.0=py_0
  - pandas=1.3.1=py37h219a48f_0
  - pandoc=2.14.1=h7f98852_0
  - pandocfilters=1.4.2=py_1
  - panel=0.12.0=pyhd8ed1ab_0
  - param=1.11.1=pyh6c4a22f_0
  - parso=0.8.2=pyhd8ed1ab_0
  - partd=1.2.0=pyhd8ed1ab_0
  - patsy=0.5.1=py_0
  - pcre=8.45=h9c3ff4c_0
  - pexpect=4.8.0=pyh9f0ad1d_2
  - pickleshare=0.7.5=py_1003
  - pillow=8.2.0=py37h4600e1f_1
  - pint=0.17=pyhd8ed1ab_0
  - pip=21.2.1=pyhd8ed1ab_0
  - pixman=0.40.0=h36c2ea0_0
  - plotly=5.1.0=pyhd8ed1ab_1
  - pluggy=0.13.1=py37h89c1867_4
  - pooch=1.4.0=pyhd8ed1ab_0
  - poppler=0.89.0=h2de54a5_5
  - poppler-data=0.4.10=0
  - postgresql=13.3=h2510834_0
  - proj=7.2.0=h277dcde_2
  - prometheus_client=0.11.0=pyhd8ed1ab_0
  - prompt-toolkit=3.0.19=pyha770c72_0
  - prompt_toolkit=3.0.19=hd8ed1ab_0
  - properscoring=0.1=py_0
  - protobuf=3.17.2=py37hcd2ae1e_0
  - pscript=0.7.5=pyhd3deb0d_0
  - psutil=5.8.0=py37h5e8e339_1
  - pthread-stubs=0.4=h36c2ea0_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - py=1.10.0=pyhd3deb0d_0
  - pyasn1=0.4.8=py_0
  - pyasn1-modules=0.2.7=py_0
  - pycparser=2.20=pyh9f0ad1d_2
  - pyct=0.4.6=py_0
  - pyct-core=0.4.6=py_0
  - pycurl=7.43.0.6=py37h88a64d2_1
  - pydantic=1.8.2=py37h5e8e339_0
  - pydap=3.2.2=pyh9f0ad1d_1001
  - pygeos=0.10.1=py37h2d1e849_0
  - pygments=2.9.0=pyhd8ed1ab_0
  - pyjwt=2.1.0=pyhd8ed1ab_0
  - pyopenssl=20.0.1=pyhd8ed1ab_0
  - pyparsing=2.4.7=pyh9f0ad1d_0
  - pyproj=3.1.0=py37h20b8899_3
  - pyqt=5.12.3=py37h89c1867_7
  - pyqt-impl=5.12.3=py37he336c9b_7
  - pyqt5-sip=4.19.18=py37hcd2ae1e_7
  - pyqtchart=5.12=py37he336c9b_7
  - pyqtwebengine=5.12.1=py37he336c9b_7
  - pyrsistent=0.17.3=py37h5e8e339_2
  - pyshp=2.1.3=pyh44b312d_0
  - pysocks=1.7.1=py37h89c1867_3
  - pytest=6.2.4=py37h89c1867_0
  - python=3.7.10=hffdb5ce_100_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-eccodes=2021.03.0=py37h6f94858_1
  - python-editor=1.0.4=py_0
  - python-json-logger=2.0.1=pyh9f0ad1d_0
  - python_abi=3.7=2_cp37m
  - pytz=2021.1=pyhd8ed1ab_0
  - pyu2f=0.1.5=pyhd8ed1ab_0
  - pyviz_comms=2.1.0=pyhd8ed1ab_0
  - pywavelets=1.1.1=py37h902c9e0_3
  - pyyaml=5.4.1=py37h5e8e339_0
  - pyzmq=22.1.0=py37h336d617_0
  - qt=5.12.9=hda022c4_4
  - qtconsole=5.1.1=pyhd8ed1ab_0
  - qtpy=1.9.0=py_0
  - rasterio=1.2.1=py37ha549118_0
  - raven-hydro=3.0.4.322=h516393e_0
  - ravenpy=0.7.0=pyh1bb2064_0
  - readline=8.1=h46c0cb4_0
  - regionmask=0.7.0=pyhd8ed1ab_0
  - requests=2.26.0=pyhd8ed1ab_0
  - requests-oauthlib=1.3.0=pyh9f0ad1d_0
  - requests-unixsocket=0.2.0=py_0
  - retrying=1.3.3=py_2
  - rioxarray=0.5.0=pyhd8ed1ab_0
  - roocs-utils=0.4.2=pyh6c4a22f_0
  - rsa=4.7.2=pyh44b312d_0
  - rtree=0.9.7=py37h0b55af0_2
  - ruamel.yaml=0.17.10=py37h5e8e339_0
  - ruamel.yaml.clib=0.2.2=py37h5e8e339_2
  - scikit-image=0.18.2=py37h219a48f_0
  - scikit-learn=0.24.2=py37h18a542f_0
  - scipy=1.7.0=py37h29e03ee_1
  - send2trash=1.7.1=pyhd8ed1ab_0
  - setuptools=49.6.0=py37h89c1867_3
  - shapely=1.7.1=py37h2d1e849_5
  - siphon=0.9=py37h89c1867_0
  - six=1.16.0=pyh6c4a22f_0
  - smmap=3.0.5=pyh44b312d_0
  - snappy=1.1.8=he1b5a44_3
  - sniffio=1.2.0=py37h89c1867_1
  - snuggs=1.4.7=py_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_0
  - soupsieve=2.0.1=py_1
  - sqlalchemy=1.4.22=py37h5e8e339_0
  - sqlite=3.36.0=h9cd32fc_0
  - statsmodels=0.12.2=py37h902c9e0_0
  - tblib=1.7.0=pyhd8ed1ab_0
  - tenacity=8.0.1=pyhd8ed1ab_0
  - terminado=0.10.1=py37h89c1867_0
  - testpath=0.5.0=pyhd8ed1ab_0
  - threadpoolctl=2.2.0=pyh8a188c0_0
  - threddsclient=0.4.2=py_0
  - tifffile=2021.4.8=pyhd8ed1ab_0
  - tiledb=2.2.9=h91fcb0e_0
  - tk=8.6.10=h21135ba_1
  - toml=0.10.2=pyhd8ed1ab_0
  - toolz=0.11.1=py_0
  - tornado=6.1=py37h5e8e339_1
  - tqdm=4.61.2=pyhd8ed1ab_1
  - traitlets=5.0.5=py_0
  - traittypes=0.2.1=pyh9f0ad1d_2
  - typing-extensions=3.10.0.0=hd8ed1ab_0
  - typing_extensions=3.10.0.0=pyha770c72_0
  - tzcode=2021a=h7f98852_2
  - tzdata=2021a=he74cb21_1
  - udunits2=2.2.27.27=h975c496_1
  - urllib3=1.26.6=pyhd8ed1ab_0
  - vcs=8.2.1=pyh9f0ad1d_0
  - voila=0.2.10=pyhd8ed1ab_0
  - vtk-cdat=8.2.0.8.2=py37_mesalibhead77ed_0
  - wcwidth=0.2.5=pyh9f0ad1d_2
  - webencodings=0.5.1=py_1
  - webob=1.8.7=pyhd8ed1ab_0
  - websocket-client=0.57.0=py37h89c1867_4
  - werkzeug=2.0.1=pyhd8ed1ab_0
  - wget=1.20.3=ha56f1ee_0
  - wheel=0.36.2=pyhd3deb0d_0
  - widgetsnbextension=3.5.1=py37h89c1867_4
  - wrapt=1.12.1=py37h5e8e339_3
  - x264=1!152.20180806=h14c3975_0
  - xarray=0.19.0=pyhd8ed1ab_1
  - xclim=0.28.0=pyhd8ed1ab_0
  - xerces-c=3.2.3=h9d8b166_2
  - xesmf=0.6.0=pyhd8ed1ab_0
  - xeus=1.0.4=h7d0c39e_0
  - xeus-python=0.12.5=py37h4b46df4_2
  - xhistogram=0.3.0=pyhd8ed1ab_0
  - xorg-kbproto=1.0.7=h7f98852_1002
  - xorg-libice=1.0.10=h7f98852_0
  - xorg-libsm=1.2.3=hd9c2040_1000
  - xorg-libx11=1.7.2=h7f98852_0
  - xorg-libxau=1.0.9=h7f98852_0
  - xorg-libxdmcp=1.1.3=h7f98852_0
  - xorg-libxext=1.3.4=h7f98852_1
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-xextproto=7.3.0=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xrft=0.3.0=pyhd8ed1ab_0
  - xskillscore=0.0.22=pyhd8ed1ab_0
  - xz=5.2.5=h516909a_1
  - yaml=0.2.5=h516909a_0
  - yarl=1.6.3=py37h5e8e339_2
  - zarr=2.8.3=pyhd8ed1ab_0
  - zeromq=4.3.4=h9c3ff4c_0
  - zfp=0.5.5=h9c3ff4c_5
  - zict=2.0.0=py_0
  - zipp=3.5.0=pyhd8ed1ab_0
  - zlib=1.2.11=h516909a_1010
  - zstd=1.4.9=ha95c52a_0
  - pip:
    - astunparse==1.6.3
    - cdms2==3.1.5
    - colour==0.1.5
    - geojson==2.5.0
    - handcalcs==1.4.1
    - innerscope==0.5.0
    - ipython-blocking==0.2.1
    - jupyterlab-logout==0.5.0
    - jupyternotify==0.1.15
    - pixiedust==1.1.19
    - pymetalink==6.2
    - pytest-tornasync==0.6.0.post2
    - regrid2==3.1.5
    - requests-magpie==0.1.1
prefix: /opt/conda/envs/birdy
```
  • Loading branch information
tlvu authored Jul 29, 2021
2 parents 3172f62 + bcdb05c commit b411898
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 22 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pipeline {
// https://jenkins.io/doc/book/pipeline/syntax/
agent {
docker {
image "pavics/workflow-tests:210723"
image "pavics/workflow-tests:210728"
label 'linux && docker'
}
}
Expand Down
2 changes: 1 addition & 1 deletion binder/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM pavics/workflow-tests:210723
FROM pavics/workflow-tests:210728

USER root

Expand Down
12 changes: 2 additions & 10 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,8 @@ RUN jupyter lab build
RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager \
&& jupyter serverextension enable voila --sys-prefix \
&& jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-leaflet \
&& jupyter labextension install @bokeh/jupyter_bokeh \
&& jupyter labextension install @pyviz/jupyterlab_pyviz \
&& jupyter labextension install @jupyterlab/debugger \
&& jupyter labextension install @jupyterlab/google-drive \
&& jupyter labextension install jupyterlab-topbar-extension \
jupyterlab-system-monitor \
jupyterlab-topbar-text \
jupyterlab-logout \
jupyterlab-theme-toggle \
jupyterlab_conda
&& jupyter labextension install jupyterlab-topbar-text \
jupyterlab-theme-toggle
# && jupyter labextension install jupyterlab-clipboard

ADD https://raw.githubusercontent.com/jupyter/docker-stacks/master/base-notebook/start.sh /usr/local/bin/
Expand Down
22 changes: 14 additions & 8 deletions docker/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ dependencies:
- rasterio
- gdal # for osgeo
- geopandas
# Pin pandas due to xarray
# https://github.com/pydata/xarray/issues/5588#issuecomment-885271773
- pandas==1.2.5
- pandas
- rioxarray
- scikit-image
- ipyleaflet
Expand All @@ -37,6 +35,8 @@ dependencies:
- pscript
- h5netcdf
- panel
# https://github.com/holoviz/panel
- pyviz_comms # (was labextension pyviz/jupyterlab_pyviz in jupyterlab v2)
- holoviews
- geoviews
# this might still be relevant https://github.com/holoviz/hvplot/issues/498
Expand Down Expand Up @@ -91,19 +91,25 @@ dependencies:
- jupyter
# to be launched by image jupyterhub/jupyterhub
- notebook
- jupyterlab==2.2.9
- jupyterlab
- jupyterhub
# https://github.com/mamba-org/gator (was jupyter_conda)
- mamba_gator
# to diff .ipynb files
- nbdime
# extension to produce .py files from notebook .ipynb files
- jupytext
# jupyterlab extension for git
- jupyterlab-git
# jupyterlab extension for conda
- jupyter_conda
# Voila turns Jupyter notebooks into standalone web applications
- voila
- jupyter-archive
# https://github.com/jtpio/jupyterlab-topbar
- jupyterlab-topbar
# https://github.com/jtpio/jupyterlab-system-monitor (was from jupyterlab-topbar)
- jupyterlab-system-monitor
- jupyter-resource-usage # needed by jupyterlab-system-monitor
- nbresuse # needed by jupyterlab-system-monitor
# xeus-python: back-end kernel implementing the Jupyter Debug Protocol
- xeus-python
- jupyter-dash
Expand All @@ -126,8 +132,8 @@ dependencies:
# https://github.com/ShopRunner/jupyter-notify
# Jupyter Magic For Browser Notifications of Cell Completion.
- jupyternotify
# Needed for https://github.com/jtpio/jupyterlab-topbar
- nbresuse
# https://github.com/jupyterlab-contrib/jupyterlab-logout (was from jupyterlab-topbar)
- jupyterlab-logout
# Needed to run notebook tests. Missing indirect recursive dependencies
# somewhere, should not need to manually add it here.
- pytest-tornasync
2 changes: 1 addition & 1 deletion launchcontainer
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh -x

if [ -z "$DOCKER_IMAGE" ]; then
DOCKER_IMAGE="pavics/workflow-tests:210723"
DOCKER_IMAGE="pavics/workflow-tests:210728"
fi

if [ -z "$CONTAINER_NAME" ]; then
Expand Down
2 changes: 1 addition & 1 deletion launchnotebook
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ if [ -z "$PORT" ]; then
fi

if [ -z "$DOCKER_IMAGE" ]; then
DOCKER_IMAGE="pavics/workflow-tests:210723"
DOCKER_IMAGE="pavics/workflow-tests:210728"
fi

if [ -z "$CONTAINER_NAME" ]; then
Expand Down

0 comments on commit b411898

Please sign in to comment.