From c3f1334fb5596c80cd6c877738e8d11a3e77f153 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 14:07:37 +0200 Subject: [PATCH 01/32] Use conda-lock Fixes #164 --- README.md | 5 +---- roles/ewatercycle/tasks/main.yml | 15 +++++++++++++++ roles/ewatercycle/templates/environment.yml.j2 | 16 ++++------------ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5bf3cc40..759d546e 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,7 @@ The token can be found in the eWaterCycle password manager. ```shell vagrant --version -# Vagrant 2.2.18 -vagrant plugin install vagrant-vbguest -# Installed the plugin 'vagrant-vbguest (0.30.0)' -export VAGRANT_EXPERIMENTAL="disks" +# Vagrant 2.4.1 vagrant up ``` diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index ef08bbf6..7a0bec63 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -1,6 +1,21 @@ --- # tasks file for ewatercycle +- name: Install conda-lock in base conda env + command: '{{ conda_root }}/condabin/mamba env install --name base conda-lock -y' + args: + creates: + '{{ conda_root }}/bin/conda-lock' +- name: eWaterCycle conda lock + ansible.builtin.get_url: + url: 'https://raw.githubusercontent.com/eWaterCycle/ewatercycle/{{ pyewatercycle_version }}/conda-lock.yml' + dest: '{{ conda_root }}/conda-lock.yml' + mode: '0644' +- name: Created conda environment with locked ewatercycle dependencies + command: '{{ conda_root }}/bin/conda-lock --no-dev -n {{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when + args: + creates: + '{{ conda_root }}/envs/{{ conda_environment }}' - name: Stage conda env file template: src: environment.yml.j2 diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 99b653f4..9d7f3e8b 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -4,12 +4,11 @@ channels: - conda-forge - defaults dependencies: - # TODO pin versions for reproducibility. Use `conda env export` and `pip list` to get versions - - python=3.10 - - esmvaltool-python>=2.3.0 - ansible - pip: - - ewatercycle=={{ pyewatercycle_version }} + # TODO use released version + - git+https://github.com/eWaterCycle/ewatercycle + # - ewatercycle=={{ pyewatercycle_version }} - ewatercycle-hype - ewatercycle-lisflood - ewatercycle-marrmot @@ -21,25 +20,18 @@ dependencies: # TODO Once available uncomment the following line # - git+https://github.com/eWaterCycle/ewatercycle-sfincs - era5cli - - setuptools - altair_saver - altair - - dask-jobqueue - - distributed - - geoviews - - hydrostats - nco - ncview - regionmask - pyke # required by iris, only available on conda or sourceforge - iris-sample-data # for sample notebooks, see https://github.com/eWaterCycle/notebooks/issues/15 # Pangeo deps, see https://pangeo.io/setup_guides/hpc.html - - zarr - hvplot - - numcodecs # Lint / formatters - autopep8 - - black + - black # Still dependenciy of bmi package, but make explicit here as main hbranch of bmi repo removed it - flake8 - isort - pylint From 8e2790128937831e4b73da9042f3b2684c33da35 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 15:39:51 +0200 Subject: [PATCH 02/32] Add back vbguest plugin --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 759d546e..4bde89bb 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ The token can be found in the eWaterCycle password manager. ```shell vagrant --version # Vagrant 2.4.1 +vagrant plugin install vagrant-vbguest +# Installed the plugin 'vagrant-vbguest (0.32.0)' vagrant up ``` From c6fd2160b511369d8bb962da44b8c9b8a41fc82e Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 15:40:05 +0200 Subject: [PATCH 03/32] Use same os in vagrant as in src --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index 83b779d6..f4b30003 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -2,7 +2,7 @@ # vi: set ft=ruby : Vagrant.configure("2") do |config| - config.vm.box = "generic/ubuntu2004" + config.vm.box = "bento/ubuntu-22.04" config.vm.synced_folder ".", "/vagrant" # Create a public network, which generally matched to bridged network. From 8f5ff1c7993d45ad9135d15eb67dd249fbb0d8fc Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 15:40:22 +0200 Subject: [PATCH 04/32] Dont use removed include module --- roles/common/tasks/main.yml | 8 ++++---- roles/prep_shared_data/tasks/main.yml | 10 +++++----- roles/rclone/tasks/mount.yml | 2 +- roles/rclone/tasks/upload.yml | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 5b1c7eb1..28ae8864 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -1,9 +1,9 @@ --- - name: Hostname - include: hostname.yml + ansible.builtin.include_tasks: hostname.yml - name: Firewall - include: firewall.yml + ansible.builtin.include_tasks: firewall.yml - name: Ppa - include: ppa.yml + ansible.builtin.include_tasks: ppa.yml - name: Pip3 - include: pip3.yml + ansible.builtin.include_tasks: pip3.yml diff --git a/roles/prep_shared_data/tasks/main.yml b/roles/prep_shared_data/tasks/main.yml index d6abd021..7e2d4252 100644 --- a/roles/prep_shared_data/tasks/main.yml +++ b/roles/prep_shared_data/tasks/main.yml @@ -1,11 +1,11 @@ --- - name: Download climate data - include: climate-data.yml + ansible.builtin.include_tasks: climate-data.yml - name: ESMValTool aux data - include: esmvaltool-aux-data.yml + ansible.builtin.include_tasks: esmvaltool-aux-data.yml - name: Build apptainer image files (sif) for each model - include: apptainer-images.yml + ansible.builtin.include_tasks: apptainer-images.yml - name: Download example parameter sets - include: example-parameter-sets.yml + ansible.builtin.include_tasks: example-parameter-sets.yml - name: Download example forcing - include: example-forcing.yml + ansible.builtin.include_tasks: example-forcing.yml diff --git a/roles/rclone/tasks/mount.yml b/roles/rclone/tasks/mount.yml index baa5ae7f..a8dbf436 100644 --- a/roles/rclone/tasks/mount.yml +++ b/roles/rclone/tasks/mount.yml @@ -1,6 +1,6 @@ --- - name: Install - include: install.yml + ansible.builtin.include_tasks: install.yml - name: Configure rclone copy: dest: /etc/rclone.conf diff --git a/roles/rclone/tasks/upload.yml b/roles/rclone/tasks/upload.yml index 2137757a..32c7e5e9 100644 --- a/roles/rclone/tasks/upload.yml +++ b/roles/rclone/tasks/upload.yml @@ -1,6 +1,6 @@ --- - name: Install - include: install.yml + ansible.builtin.include_tasks: install.yml - name: Config directory file: path: ~/.config/rclone From 706dde77adcac379b54275aaa5637b4a497b3b76 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 16:00:27 +0200 Subject: [PATCH 05/32] Use pip to install conda Using mamba failed due to pinned python=3.10 --- roles/ewatercycle/tasks/main.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index 7a0bec63..2392f6f2 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -2,10 +2,9 @@ # tasks file for ewatercycle - name: Install conda-lock in base conda env - command: '{{ conda_root }}/condabin/mamba env install --name base conda-lock -y' - args: - creates: - '{{ conda_root }}/bin/conda-lock' + ansible.builtin.pip: + name: conda-lock + executable: '{{ conda_root }}/bin/pip3' - name: eWaterCycle conda lock ansible.builtin.get_url: url: 'https://raw.githubusercontent.com/eWaterCycle/ewatercycle/{{ pyewatercycle_version }}/conda-lock.yml' From dab49ccdc7288c7e8edc78518d7b032483cc7db9 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 16:07:05 +0200 Subject: [PATCH 06/32] Always use conda-lock.yml from ewatercycle main branch --- roles/ewatercycle/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index 2392f6f2..b40ed83d 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -7,7 +7,7 @@ executable: '{{ conda_root }}/bin/pip3' - name: eWaterCycle conda lock ansible.builtin.get_url: - url: 'https://raw.githubusercontent.com/eWaterCycle/ewatercycle/{{ pyewatercycle_version }}/conda-lock.yml' + url: 'https://raw.githubusercontent.com/eWaterCycle/ewatercycle/main/conda-lock.yml' dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies From eff8b0e7f6f77ba6c243501155de928b06a2ce4c Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 16:19:51 +0200 Subject: [PATCH 07/32] Add install sub command --- roles/ewatercycle/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index b40ed83d..99396706 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -11,7 +11,7 @@ dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies - command: '{{ conda_root }}/bin/conda-lock --no-dev -n {{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when + command: '{{ conda_root }}/bin/conda-lock install --no-dev -n {{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when args: creates: '{{ conda_root }}/envs/{{ conda_environment }}' From cb9a1c68ebfd27f51b0749a111bc75aaa2f9b8ce Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 16:53:44 +0200 Subject: [PATCH 08/32] Drop pymt_package as they need python<3.12 + install jupyterhub-systemdspawner with pip --- .../ewatercycle/templates/environment.yml.j2 | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 9d7f3e8b..74e76535 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -4,7 +4,7 @@ channels: - conda-forge - defaults dependencies: - - ansible + # - ansible - pip: # TODO use released version - git+https://github.com/eWaterCycle/ewatercycle @@ -20,6 +20,7 @@ dependencies: # TODO Once available uncomment the following line # - git+https://github.com/eWaterCycle/ewatercycle-sfincs - era5cli + - jupyterhub-systemdspawner - altair_saver - altair - nco @@ -37,14 +38,15 @@ dependencies: - pylint - yapf # Pymt - - pymt_cem - - pymt_ecsimplesnow - - pymt_gipl - - pymt_hydrotrend - - pymt_landlab - - pymt_permamodel - - pymt_rafem - - pymt_sedflux + # Disabled as it does not work with python3.12 + # - pymt_cem + # - pymt_ecsimplesnow + # - pymt_gipl + # - pymt_hydrotrend + # - pymt_landlab + # - pymt_permamodel + # - pymt_rafem + #- pymt_sedflux - pymt # - pymt_child # Skipped as only a osx binary is available # - pymt_topoflow # Skipped not on conda-forge @@ -57,7 +59,6 @@ dependencies: - ipympl - ipynb-py-convert - jupyterhub-idle-culler - - jupyterhub-systemdspawner # JupyterLab extensions server dependencies, lab extension should be added to defaults of jupyter role - ipyleaflet - jupyterlab_code_formatter From fd86758b28c83d5511de76962f37a623d4725477 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 17:29:30 +0200 Subject: [PATCH 09/32] Try to get env in right place with nodejs --- roles/ewatercycle/tasks/main.yml | 2 +- roles/ewatercycle/templates/environment.yml.j2 | 2 ++ roles/jupyter/tasks/main.yml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index 99396706..020dceb6 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -11,7 +11,7 @@ dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies - command: '{{ conda_root }}/bin/conda-lock install --no-dev -n {{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when + command: '{{ conda_root }}/bin/conda-lock install --no-dev -n {{ conda_environment }} -p {{ conda_root }}/envs/{{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when args: creates: '{{ conda_root }}/envs/{{ conda_environment }}' diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 74e76535..c278feb4 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -4,6 +4,7 @@ channels: - conda-forge - defaults dependencies: + # Skip ansible as running ansible second time in vagrant will make give --sudo does not exist error # - ansible - pip: # TODO use released version @@ -59,6 +60,7 @@ dependencies: - ipympl - ipynb-py-convert - jupyterhub-idle-culler + - nodejs # JupyterLab extensions server dependencies, lab extension should be added to defaults of jupyter role - ipyleaflet - jupyterlab_code_formatter diff --git a/roles/jupyter/tasks/main.yml b/roles/jupyter/tasks/main.yml index a8d22cb9..fa6ae2b3 100644 --- a/roles/jupyter/tasks/main.yml +++ b/roles/jupyter/tasks/main.yml @@ -26,7 +26,7 @@ name: configurable-http-proxy executable: '{{ conda_environment_bin }}/npm' environment: - PATH: "{{ conda_environment_bin }}:{{ ansible_env.PATH }}" + PATH: "{{ conda_environment_bin }}:{{ ansible_env.PATH }}" - name: USGS data home directory file: path: '{{ jupyterhub_spawner_environment.USGS_DATA_HOME }}' From b804736ab7f568f986d013e0167a1ba128271d4f Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 28 Aug 2024 17:46:06 +0200 Subject: [PATCH 10/32] Only use prefix for conda-lock --- roles/ewatercycle/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index 020dceb6..e9137de1 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -11,7 +11,7 @@ dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies - command: '{{ conda_root }}/bin/conda-lock install --no-dev -n {{ conda_environment }} -p {{ conda_root }}/envs/{{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when + command: '{{ conda_root }}/bin/conda-lock install --no-dev -p {{ conda_root }}/envs/{{ conda_environment }} {{ conda_root }}/conda-lock.yml' # noqa no-changed-when args: creates: '{{ conda_root }}/envs/{{ conda_environment }}' From 0b63d4937272a378ba15697d1a050ce9bd7f2129 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 4 Sep 2024 15:20:18 +0200 Subject: [PATCH 11/32] Comment out no longer working roles Aka the generated notebook uses v1 pyewatercycle --- research-cloud-plugin.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/research-cloud-plugin.yml b/research-cloud-plugin.yml index 7c9a10b6..4dac0954 100644 --- a/research-cloud-plugin.yml +++ b/research-cloud-plugin.yml @@ -76,19 +76,20 @@ name: rclone tasks_from: mount + # TODO remove roles instead of commenting them out # https://lab.ewatercycle.org/ functionality - - name: Welcome page - include_role: - name: labstart - - # https://explore.ewatercycle.org/ functionality - - name: Experiment launcher - include_role: - name: launcher - - - name: Explorer - include_role: - name: terria + # - name: Welcome page + # include_role: + # name: labstart + + # # https://explore.ewatercycle.org/ functionality + # - name: Experiment launcher + # include_role: + # name: launcher + + # - name: Explorer + # include_role: + # name: terria # https://jupyter.ewatercycle.org/ functionality - name: Create eWaterCycle conda env From e43267e44cf7003f71f03eb7eef07f382d717a2e Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 4 Sep 2024 15:23:03 +0200 Subject: [PATCH 12/32] Use ewatercycle 2.3.0 + add ewatercycle-hbv --- roles/ewatercycle/defaults/main.yml | 2 +- roles/ewatercycle/templates/environment.yml.j2 | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/roles/ewatercycle/defaults/main.yml b/roles/ewatercycle/defaults/main.yml index 81e6c52e..433b2ebd 100644 --- a/roles/ewatercycle/defaults/main.yml +++ b/roles/ewatercycle/defaults/main.yml @@ -19,4 +19,4 @@ apptainer_image_root: '{{ data_root }}/singularity-images' home_root: /home # Version of ewatercycle Python package # /etc/ewatercycle.yaml will be slightly different depending on version. -pyewatercycle_version: 2.2.0 +pyewatercycle_version: 2.3.0 diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index c278feb4..8f49f2ec 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -4,23 +4,23 @@ channels: - conda-forge - defaults dependencies: - # Skip ansible as running ansible second time in vagrant will make give --sudo does not exist error + # Skip ansible as running ansible second time in vagrant will give --sudo does not exist error # - ansible - pip: - # TODO use released version - - git+https://github.com/eWaterCycle/ewatercycle - # - ewatercycle=={{ pyewatercycle_version }} + - ewatercycle=={{ pyewatercycle_version }} - ewatercycle-hype - ewatercycle-lisflood - ewatercycle-marrmot - ewatercycle-pcrglobwb - ewatercycle-wflow - ewatercycle-leakybucket + - ewatercycle-HBV==1.8.4 # TODO Once ewatercycle-wflowjl uses a containerized model, uncomment the following line: # - ewatercycle-wflowjl # TODO Once available uncomment the following line # - git+https://github.com/eWaterCycle/ewatercycle-sfincs - era5cli + # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - jupyterhub-systemdspawner - altair_saver - altair @@ -54,12 +54,13 @@ dependencies: # Jupyter - jupyter-server-proxy - jupyterhub - - jupyterlab # Version pinned due to not all wanted extensions support v3 + - jupyterlab - notebook - ipykernel - ipympl - ipynb-py-convert - jupyterhub-idle-culler + # dependencies of jupyterhub-systemdspawner - nodejs # JupyterLab extensions server dependencies, lab extension should be added to defaults of jupyter role - ipyleaflet From 86dd818e108f9eaef9421682d2aac20244c0772f Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 4 Sep 2024 15:55:28 +0200 Subject: [PATCH 13/32] Working env --- roles/ewatercycle/templates/environment.yml.j2 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 8f49f2ec..b0a74b7e 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -1,4 +1,5 @@ --- +# TODO pin more versions so future deployments have more chance to work name: ewatercycle channels: - conda-forge @@ -22,6 +23,8 @@ dependencies: - era5cli # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - jupyterhub-systemdspawner + # Conda version of papermill is not py3.12 compat, so use pip version + - papermill - altair_saver - altair - nco @@ -47,8 +50,8 @@ dependencies: # - pymt_landlab # - pymt_permamodel # - pymt_rafem - #- pymt_sedflux - - pymt + # - pymt_sedflux + # - pymt # - pymt_child # Skipped as only a osx binary is available # - pymt_topoflow # Skipped not on conda-forge # Jupyter @@ -72,4 +75,3 @@ dependencies: - jupyterlab-git - nbdime - nbgitpuller - - papermill From 3002e4f0870f7679179ac581c85ae23ea30b0e8f Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 4 Sep 2024 16:08:32 +0200 Subject: [PATCH 14/32] Pin direct dependencies --- .../ewatercycle/templates/environment.yml.j2 | 85 +++++++++---------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index b0a74b7e..074f7f3b 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -5,42 +5,40 @@ channels: - conda-forge - defaults dependencies: - # Skip ansible as running ansible second time in vagrant will give --sudo does not exist error - # - ansible - pip: - ewatercycle=={{ pyewatercycle_version }} - - ewatercycle-hype - - ewatercycle-lisflood - - ewatercycle-marrmot - - ewatercycle-pcrglobwb - - ewatercycle-wflow - - ewatercycle-leakybucket + - ewatercycle-hype==0.0.1 + - ewatercycle-lisflood==0.0.1 + - ewatercycle-marrmot==0.0.2 + - ewatercycle-pcrglobwb=0.0.2 + - ewatercycle-wflow==0.0.2 + - ewatercycle-leakybucket==0.0.2 - ewatercycle-HBV==1.8.4 # TODO Once ewatercycle-wflowjl uses a containerized model, uncomment the following line: # - ewatercycle-wflowjl # TODO Once available uncomment the following line # - git+https://github.com/eWaterCycle/ewatercycle-sfincs - - era5cli + - era5cli==1.0.0 # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - - jupyterhub-systemdspawner + - jupyterhub-systemdspawner==1.0.1 # Conda version of papermill is not py3.12 compat, so use pip version - - papermill - - altair_saver - - altair - - nco - - ncview - - regionmask - - pyke # required by iris, only available on conda or sourceforge - - iris-sample-data # for sample notebooks, see https://github.com/eWaterCycle/notebooks/issues/15 + - papermill==2.6.0 + - altair_saver==0.5.0 + - altair=5.4.1 + - nco=5.2.8 + - ncview=2.1.8 + - regionmask=0.12.1 + - pyke=1.1.1 # required by iris, only available on conda or sourceforge + - iris-sample-data=2.4.0 # for sample notebooks, see https://github.com/eWaterCycle/notebooks/issues/15 # Pangeo deps, see https://pangeo.io/setup_guides/hpc.html - - hvplot + - hvplot=0.8.1 # Lint / formatters - - autopep8 - - black # Still dependenciy of bmi package, but make explicit here as main hbranch of bmi repo removed it - - flake8 - - isort - - pylint - - yapf + - autopep8=2.3.1 + - black=24.8.0 # Still dependenciy of bmi package, but make explicit here as main hbranch of bmi repo removed it + - flake8=7.1.1 + - isort=5.13.2 + - pylint=3.2.7 + - yapf=0.40.1 # Pymt # Disabled as it does not work with python3.12 # - pymt_cem @@ -55,23 +53,22 @@ dependencies: # - pymt_child # Skipped as only a osx binary is available # - pymt_topoflow # Skipped not on conda-forge # Jupyter - - jupyter-server-proxy - - jupyterhub - - jupyterlab - - notebook - - ipykernel - - ipympl - - ipynb-py-convert - - jupyterhub-idle-culler - # dependencies of jupyterhub-systemdspawner - - nodejs + - jupyter-server-proxy=4.4.0 + - jupyterhub=5.1.0 + - jupyterlab=4.2.5 + - notebook=7.2.2 + - ipykernel=6.29.5 + - ipympl=0.9.4 + - ipynb-py-convert=0.4.6 + - jupyterhub-idle-culler=1.3.1 + - nodejs=22.7.0 # JupyterLab extensions server dependencies, lab extension should be added to defaults of jupyter role - - ipyleaflet - - jupyterlab_code_formatter - - dask-labextension - - jupyterlab-geojson - - jupyter_bokeh - - pyviz_comms - - jupyterlab-git - - nbdime - - nbgitpuller + - ipyleaflet=0.19.2 + - jupyterlab_code_formatter=3.0.2 + - dask-labextension=7.0.0 + - jupyterlab-geojson=3.4.0 + - jupyter_bokeh=4.0.5 + - pyviz_comms=3.0.3 + - jupyterlab-git=0.50.1 + - nbdime=4.0.1 + - nbgitpuller=1.2.1 From 6b9e4a9de6072a0859fddce46ea9737fb9acc227 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Wed, 4 Sep 2024 16:27:09 +0200 Subject: [PATCH 15/32] Typo --- roles/ewatercycle/templates/environment.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 074f7f3b..69a36586 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -10,7 +10,7 @@ dependencies: - ewatercycle-hype==0.0.1 - ewatercycle-lisflood==0.0.1 - ewatercycle-marrmot==0.0.2 - - ewatercycle-pcrglobwb=0.0.2 + - ewatercycle-pcrglobwb==0.0.2 - ewatercycle-wflow==0.0.2 - ewatercycle-leakybucket==0.0.2 - ewatercycle-HBV==1.8.4 From 36218e6a369134d6de7a04a1d49c52b3a203d496 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Thu, 5 Sep 2024 07:56:58 +0200 Subject: [PATCH 16/32] Use conda lock from tag --- roles/ewatercycle/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index e9137de1..bd1c5498 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -7,7 +7,7 @@ executable: '{{ conda_root }}/bin/pip3' - name: eWaterCycle conda lock ansible.builtin.get_url: - url: 'https://raw.githubusercontent.com/eWaterCycle/ewatercycle/main/conda-lock.yml' + url: 'https://github.com/eWaterCycle/ewatercycle/raw/{{ pyewatercycle_version }}/conda-lock.yml dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies From 56c80a52f320944e3e3dc1bda8652c9af2ca8979 Mon Sep 17 00:00:00 2001 From: Stefan Verhoeven Date: Thu, 5 Sep 2024 07:57:15 +0200 Subject: [PATCH 17/32] Landing page with links to notebooks --- research-cloud-plugin.yml | 8 +++---- roles/labstart/templates/index.html.j2 | 32 +++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/research-cloud-plugin.yml b/research-cloud-plugin.yml index 4dac0954..9e8fc0e2 100644 --- a/research-cloud-plugin.yml +++ b/research-cloud-plugin.yml @@ -76,12 +76,12 @@ name: rclone tasks_from: mount - # TODO remove roles instead of commenting them out # https://lab.ewatercycle.org/ functionality - # - name: Welcome page - # include_role: - # name: labstart + - name: Welcome page + include_role: + name: labstart + # TODO remove roles instead of commenting them out or make them optional # # https://explore.ewatercycle.org/ functionality # - name: Experiment launcher # include_role: diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 8a47c363..69f06a77 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -60,6 +60,7 @@
+ {%- if 'jupyter' in tool_urls -%}
...
@@ -69,6 +70,7 @@ Explore
+ {%- endif %}
...
@@ -77,7 +79,35 @@ -
{%- if 'analytics' in tool_urls -%} +
+
+ ... +
+

Experiment with models and datasets in a notebook.

+
+ +
+
+ ... +
+

User guide notebook.

+
+ +
+
+ ... +
+

Tech paper notebooks.

+
+ +
+ {%- if 'analytics' in tool_urls -%}
...
From 10e6aee059b0d9975ffef4702a8a3a96e1f7689e Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 10:49:39 +0200 Subject: [PATCH 18/32] Add teachbook instructions --- roles/labstart/templates/index.html.j2 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 69f06a77..777c7fe7 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -107,6 +107,16 @@ Jupyter notebook
+
+

Configuration for teachbooks

+

In the _config.yml file of your teachbook repository, you can add the following configuration to open books on this machine:

+
+                    # rest of configuration
+
+                    launch_buttons:
+                        jupyterhub_url: {{ ==REVERSE_PROXY== }}/jupyter/hub    
+                
+
{%- if 'analytics' in tool_urls -%}
... From f1b6be6cc4536d073c9d19685548e8a47e5c1470 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 11:14:55 +0200 Subject: [PATCH 19/32] Prune env --- .../ewatercycle/templates/environment.yml.j2 | 43 +++---------------- 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index 69a36586..a97cb348 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -14,44 +14,15 @@ dependencies: - ewatercycle-wflow==0.0.2 - ewatercycle-leakybucket==0.0.2 - ewatercycle-HBV==1.8.4 - # TODO Once ewatercycle-wflowjl uses a containerized model, uncomment the following line: - # - ewatercycle-wflowjl - # TODO Once available uncomment the following line - # - git+https://github.com/eWaterCycle/ewatercycle-sfincs - - era5cli==1.0.0 + # TODO After Sept 2024 use 2.0.0 version of era5cli, as v1 no longer works + - era5cli==1.4.2 # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - jupyterhub-systemdspawner==1.0.1 # Conda version of papermill is not py3.12 compat, so use pip version - papermill==2.6.0 - - altair_saver==0.5.0 - - altair=5.4.1 - - nco=5.2.8 - - ncview=2.1.8 - - regionmask=0.12.1 - - pyke=1.1.1 # required by iris, only available on conda or sourceforge - - iris-sample-data=2.4.0 # for sample notebooks, see https://github.com/eWaterCycle/notebooks/issues/15 # Pangeo deps, see https://pangeo.io/setup_guides/hpc.html - - hvplot=0.8.1 - # Lint / formatters - - autopep8=2.3.1 - - black=24.8.0 # Still dependenciy of bmi package, but make explicit here as main hbranch of bmi repo removed it - - flake8=7.1.1 - - isort=5.13.2 - - pylint=3.2.7 - - yapf=0.40.1 - # Pymt - # Disabled as it does not work with python3.12 - # - pymt_cem - # - pymt_ecsimplesnow - # - pymt_gipl - # - pymt_hydrotrend - # - pymt_landlab - # - pymt_permamodel - # - pymt_rafem - # - pymt_sedflux - # - pymt - # - pymt_child # Skipped as only a osx binary is available - # - pymt_topoflow # Skipped not on conda-forge + # TODO add pangeo deps back? + # Jupyter - jupyter-server-proxy=4.4.0 - jupyterhub=5.1.0 @@ -63,12 +34,12 @@ dependencies: - jupyterhub-idle-culler=1.3.1 - nodejs=22.7.0 # JupyterLab extensions server dependencies, lab extension should be added to defaults of jupyter role - - ipyleaflet=0.19.2 - jupyterlab_code_formatter=3.0.2 + - black=24.8.0 + - isort=5.13.2 - dask-labextension=7.0.0 - jupyterlab-geojson=3.4.0 - - jupyter_bokeh=4.0.5 - - pyviz_comms=3.0.3 + - ipyleaflet=0.19.2 - jupyterlab-git=0.50.1 - nbdime=4.0.1 - nbgitpuller=1.2.1 From fdf131adb526781376575c692580d3f9ebac4310 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 12:02:11 +0200 Subject: [PATCH 20/32] Update vagrant wsl instructions --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bde89bb..7ff00651 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,8 @@ Importantly: - Work on a folder on the windows file system. - Export VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH="/mnt/c/.../infra" -- Install [virtualbox_WSL2 vagrant plugin](https://github.com/Karandash8/virtualbox_WSL2) +- `export PATH="$PATH:C:\Program Files\Oracle\VirtualBox"` +- ` vagrant up --provider virtualbox` - Approve the firewall popup ## Catalog item registration From c64b747862da2f2ea417c99b7125fa5abf0ca897 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 12:02:20 +0200 Subject: [PATCH 21/32] Use js to create teachbook config ==REVERSE_PROXY== does not work like that --- roles/labstart/templates/index.html.j2 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 777c7fe7..0031c391 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -107,14 +107,18 @@ Jupyter notebook
+

Configuration for teachbooks

In the _config.yml file of your teachbook repository, you can add the following configuration to open books on this machine:

-
+                
                     # rest of configuration
 
                     launch_buttons:
-                        jupyterhub_url: {{ ==REVERSE_PROXY== }}/jupyter/hub    
+                        jupyterhub_url: /jupyter/hub    
                 
{%- if 'analytics' in tool_urls -%} From c1c1be8f22de6bd20bac532a168e6702766be40a Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 12:08:21 +0200 Subject: [PATCH 22/32] Add ' --- roles/ewatercycle/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ewatercycle/tasks/main.yml b/roles/ewatercycle/tasks/main.yml index bd1c5498..b38dadae 100644 --- a/roles/ewatercycle/tasks/main.yml +++ b/roles/ewatercycle/tasks/main.yml @@ -7,7 +7,7 @@ executable: '{{ conda_root }}/bin/pip3' - name: eWaterCycle conda lock ansible.builtin.get_url: - url: 'https://github.com/eWaterCycle/ewatercycle/raw/{{ pyewatercycle_version }}/conda-lock.yml + url: 'https://github.com/eWaterCycle/ewatercycle/raw/{{ pyewatercycle_version }}/conda-lock.yml' dest: '{{ conda_root }}/conda-lock.yml' mode: '0644' - name: Created conda environment with locked ewatercycle dependencies From a081b9db59df62c0effafe2f94855d01891e441e Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 12:35:39 +0200 Subject: [PATCH 23/32] era5cli not needed here, used when filling dcache or samba server --- roles/ewatercycle/templates/environment.yml.j2 | 2 -- 1 file changed, 2 deletions(-) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index a97cb348..a70e842e 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -14,8 +14,6 @@ dependencies: - ewatercycle-wflow==0.0.2 - ewatercycle-leakybucket==0.0.2 - ewatercycle-HBV==1.8.4 - # TODO After Sept 2024 use 2.0.0 version of era5cli, as v1 no longer works - - era5cli==1.4.2 # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - jupyterhub-systemdspawner==1.0.1 # Conda version of papermill is not py3.12 compat, so use pip version From 62e42eafc2a3932b3d5db702610c56c147b2e354 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 13:08:41 +0200 Subject: [PATCH 24/32] add hbv --- roles/ewatercycle/templates/environment.yml.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2 index a70e842e..490ac01f 100644 --- a/roles/ewatercycle/templates/environment.yml.j2 +++ b/roles/ewatercycle/templates/environment.yml.j2 @@ -14,6 +14,8 @@ dependencies: - ewatercycle-wflow==0.0.2 - ewatercycle-leakybucket==0.0.2 - ewatercycle-HBV==1.8.4 + # TODO ewatercycle-HBV should not depend on HBV, but currently it does + - HBV==1.5.2 # Conda version of jupyterhub-systemdspawner is not py3.12 compat, so use pip version - jupyterhub-systemdspawner==1.0.1 # Conda version of papermill is not py3.12 compat, so use pip version From f0b05979cac781e30bcafb4c1649bf6db9654e6c Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 13:10:25 +0200 Subject: [PATCH 25/32] Cleanup welcome page --- roles/labstart/defaults/main.yml | 8 ++--- roles/labstart/templates/index.html.j2 | 48 +++++++++++++------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/roles/labstart/defaults/main.yml b/roles/labstart/defaults/main.yml index f1a9b2ba..9170348c 100644 --- a/roles/labstart/defaults/main.yml +++ b/roles/labstart/defaults/main.yml @@ -1,7 +1,7 @@ --- tool_urls: - explore: / + # explore: / jupyter: /jupyter - analytics: https://analytics.ewatercycle.org - experiments: https://experiments.ewatercycle.org - lowresforecast: https://lowres-forecast.ewatercycle.org + # analytics: https://analytics.ewatercycle.org + # experiments: https://experiments.ewatercycle.org + # lowresforecast: https://lowres-forecast.ewatercycle.org diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 0031c391..26a920eb 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -15,6 +15,14 @@ body { padding: 25px; } + + .card-deck { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 1rem; + } + .card .card-img-top { max-height: 10rem; max-width: 10rem; @@ -60,7 +68,7 @@
- {%- if 'jupyter' in tool_urls -%} + {%- if 'explore' in tool_urls -%}
...
@@ -71,15 +79,6 @@
{%- endif %} -
- ... -
-

Experiment with models and datasets in a notebook.

-
- -
...
@@ -107,20 +106,6 @@ Jupyter notebook
- -
-

Configuration for teachbooks

-

In the _config.yml file of your teachbook repository, you can add the following configuration to open books on this machine:

-
-                    # rest of configuration
-
-                    launch_buttons:
-                        jupyterhub_url: /jupyter/hub    
-                
-
{%- if 'analytics' in tool_urls -%}
... @@ -151,6 +136,21 @@
{%- endif %} +
+

Configuration for teachbooks

+

In the _config.yml file of your teachbook repository, you can add the following configuration to open books on this machine:

+
+                    # rest of configuration
+
+                    launch_buttons:
+                        jupyterhub_url: /jupyter/hub
+                
+ +
From 6f34b0042232d697af3e65ad2b0f893ea69f8e69 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 13:19:20 +0200 Subject: [PATCH 26/32] English --- roles/labstart/templates/index.html.j2 | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 26a920eb..baa08713 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -16,13 +16,6 @@ padding: 25px; } - .card-deck { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 1rem; - } - .card .card-img-top { max-height: 10rem; max-width: 10rem; @@ -138,7 +131,7 @@

Configuration for teachbooks

-

In the _config.yml file of your teachbook repository, you can add the following configuration to open books on this machine:

+

To open books on this machine, you can add the following configuration in the _config.yml file of your teachbook repository:

                     # rest of configuration
 

From 425dcbc87289ed0a697de23d54fd78553f186ff7 Mon Sep 17 00:00:00 2001
From: sverhoeven 
Date: Thu, 5 Sep 2024 14:16:36 +0200
Subject: [PATCH 27/32] Unique links

---
 roles/labstart/templates/index.html.j2 | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2
index baa08713..63521cf4 100644
--- a/roles/labstart/templates/index.html.j2
+++ b/roles/labstart/templates/index.html.j2
@@ -78,16 +78,13 @@
                     

Experiment with models and datasets in a notebook.

... -
-

User guide notebook.

-
From 6c70faba73e6945915b288f2ddabe97054963b20 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 18 Apr 2024 16:18:28 +0200 Subject: [PATCH 28/32] Lower bar for linter in ci --- .github/workflows/lint.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 71c2f510..16465224 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,8 @@ name: Ansible Lint -on: [push, pull_request] +on: + pull_request: + branches: [main, grader] jobs: build: @@ -13,4 +15,4 @@ jobs: - name: Deps run: pip install -r requirements.txt - name: Lint Ansible Playbook - run: ansible-lint --force-color research-cloud-plugin.yml shared-data-disk.yml + run: ansible-lint --profile min --force-color research-cloud-plugin.yml shared-data-disk.yml From 77d8bb6ad4fcf6be029e0df7d96aed91292b4485 Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 14:48:06 +0200 Subject: [PATCH 29/32] Also run CI on pushes to main --- .github/workflows/lint.yml | 2 ++ roles/labstart/templates/index.html.j2 | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 16465224..d6b009be 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,8 @@ name: Ansible Lint on: + push: + branches: [main] pull_request: branches: [main, grader] diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 63521cf4..abd0accf 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -127,7 +127,7 @@
{%- endif %}
-

Configuration for teachbooks

+

Configuration for teachbooks

To open books on this machine, you can add the following configuration in the _config.yml file of your teachbook repository:

                     # rest of configuration

From 38bc0bfd1211fa0f366e409da5a613309779c126 Mon Sep 17 00:00:00 2001
From: sverhoeven 
Date: Thu, 5 Sep 2024 14:51:36 +0200
Subject: [PATCH 30/32] Done todo

---
 roles/ewatercycle/templates/environment.yml.j2 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roles/ewatercycle/templates/environment.yml.j2 b/roles/ewatercycle/templates/environment.yml.j2
index 490ac01f..d5dad04a 100644
--- a/roles/ewatercycle/templates/environment.yml.j2
+++ b/roles/ewatercycle/templates/environment.yml.j2
@@ -1,5 +1,5 @@
 ---
-# TODO pin more versions so future deployments have more chance to work
+# pinned versions so future deployments have more chance to work
 name: ewatercycle
 channels:
   - conda-forge

From dd92c1bb4984d3274a8bc699409fa77f1300ba2a Mon Sep 17 00:00:00 2001
From: sverhoeven 
Date: Thu, 5 Sep 2024 14:56:02 +0200
Subject: [PATCH 31/32] Fix guide link

---
 roles/labstart/templates/index.html.j2 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2
index abd0accf..54465605 100644
--- a/roles/labstart/templates/index.html.j2
+++ b/roles/labstart/templates/index.html.j2
@@ -84,7 +84,7 @@
                         
                         
From 340b09675b59e52e0a85f175155a7d04f52ba34f Mon Sep 17 00:00:00 2001 From: sverhoeven Date: Thu, 5 Sep 2024 14:56:28 +0200 Subject: [PATCH 32/32] One hub --- roles/labstart/templates/index.html.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/labstart/templates/index.html.j2 b/roles/labstart/templates/index.html.j2 index 54465605..ccd3e637 100644 --- a/roles/labstart/templates/index.html.j2 +++ b/roles/labstart/templates/index.html.j2 @@ -84,7 +84,7 @@