Skip to content

Allow env.local to use delayed eval vars immediately, if needed#644

Open
tlvu wants to merge 4 commits intomasterfrom
allow_delayed_eval_usage_in_env.local
Open

Allow env.local to use delayed eval vars immediately, if needed#644
tlvu wants to merge 4 commits intomasterfrom
allow_delayed_eval_usage_in_env.local

Conversation

@tlvu
Copy link
Collaborator

@tlvu tlvu commented Feb 6, 2026

Overview

  • Allow env.local to use delayed eval var immediately

    Before, env.local can not immediately use any of the delayed eval var because their real values are only available after env.local is fully read.

    So something like this in env.local do not work because JUPYTERHUB_USER_DATA_DIR is a delayed eval var:

    export JUPYTERHUB_README_FR="$JUPYTERHUB_USER_DATA_DIR/jupyter-readme/LISMOI.ipynb"
    
    if [ -f "$JUPYTERHUB_README_FR" ]; then
    
      export JUPYTERHUB_CONFIG_OVERRIDE="$JUPYTERHUB_CONFIG_OVERRIDE
    # /data/jupyterhub_user_data/jupyter-readme/LISMOI.ipynb
    lismoi_on_disk = join(jupyterhub_data_dir, 'jupyter-readme', 'LISMOI.ipynb')
    # /notebook_dir/LISMOI.ipynb
    lismoi_in_container = join(notebook_dir, 'LISMOI.ipynb')
    c.DockerSpawner.volumes.update({lismoi_on_disk: {
        'bind': lismoi_in_container,
        'mode': 'ro',
    }})
    "
    fi  # end if [ -f "$JUPYTERHUB_README_FR" ]

    env.local could simply append JUPYTERHUB_README_FR to DELAYED_EVAL list but since we need to use its value immediately in env.local, we need to eval it immediately.

    With the new eval_delayed_var, we can do the following, because JUPYTERHUB_USER_DATA_DIR is a delayed eval var, any vars that depend on it should also be delayed eval'ed.

    export JUPYTERHUB_README_FR="$JUPYTERHUB_USER_DATA_DIR/jupyter-readme/LISMOI.ipynb"
    eval_delayed_var JUPYTERHUB_README_FR
    
    if [ -f "$JUPYTERHUB_README_FR" ]; then
    (...)

Changes

Non-breaking changes

  • Adds new function eval_delayed_var that env.local can use

CI Operations

birdhouse_daccs_configs_branch: master
birdhouse_skip_ci: false

@github-actions github-actions bot added documentation Improvements or additions to documentation ci/deployment Related to deployment utilities and scripts labels Feb 6, 2026
@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4036/
ResultFAILURE

BIRDHOUSE_DEPLOY_BRANCH : allow_delayed_eval_usage_in_env.local
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-91.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/652/

NOTEBOOK TEST RESULTS
    
[2026-02-06T21:21:38.403Z] ============================= test session starts ==============================
[2026-02-06T21:21:38.403Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-06T21:21:38.403Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master
[2026-02-06T21:21:38.403Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-06T21:21:38.403Z] collected 538 items
[2026-02-06T21:21:38.403Z] 
[2026-02-06T21:21:59.422Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-06T21:23:23.661Z] notebooks-auth/test_cowbird_jupyter.ipynb ........F.                     [  5%]
[2026-02-06T21:23:23.661Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-06T21:24:57.551Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-06T21:37:49.415Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-06T21:38:57.121Z] .                                                                        [ 10%]
[2026-02-06T21:39:01.830Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-06T21:39:09.045Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-06T21:53:10.396Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ...........         [ 14%]
[2026-02-06T21:53:10.396Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-06T21:53:10.396Z] ...............                                                          [ 17%]
[2026-02-06T21:53:20.713Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-06T21:53:29.831Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-06T21:53:45.152Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-06T21:53:51.802Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-06T21:53:55.859Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-06T21:57:10.613Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-06T21:58:18.429Z] .............                                                            [ 27%]
[2026-02-06T21:58:22.876Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-06T21:58:24.778Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-06T21:58:53.064Z] .................                                                        [ 32%]
[2026-02-06T21:59:00.053Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-06T21:59:01.435Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-06T21:59:12.004Z] .........                                                                [ 35%]
[2026-02-06T21:59:22.831Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-06T21:59:32.909Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-06T21:59:34.299Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-06T21:59:40.407Z] .....                                                                    [ 39%]
[2026-02-06T22:01:02.112Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-06T22:01:32.258Z] ............                                                             [ 42%]
[2026-02-06T22:02:18.972Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-06T22:03:05.696Z] .....s.                                                                  [ 43%]
[2026-02-06T22:03:10.974Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-06T22:03:18.795Z] ..                                                                       [ 44%]
[2026-02-06T22:03:28.786Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-06T22:04:38.715Z] .........                                                                [ 46%]
[2026-02-06T22:04:48.719Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-06T22:07:46.175Z] ....                                                                     [ 47%]
[2026-02-06T22:07:46.175Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-06T22:07:46.175Z] ....                                                                     [ 48%]
[2026-02-06T22:07:46.175Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-06T22:07:56.239Z] .....                                                                    [ 49%]
[2026-02-06T22:08:00.433Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-06T22:08:05.934Z] .............                                                            [ 51%]
[2026-02-06T22:08:11.215Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-06T22:08:12.302Z] ......                                                                   [ 53%]
[2026-02-06T22:08:23.485Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-06T22:08:26.023Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-06T22:08:47.505Z] ......                                                                   [ 56%]
[2026-02-06T22:08:48.889Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-06T22:08:59.544Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-06T22:08:59.544Z] ..                                                                       [ 58%]
[2026-02-06T22:09:06.128Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-06T22:09:11.524Z] .............                                                            [ 61%]
[2026-02-06T22:10:48.785Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-06T22:10:48.785Z]                                                                          [ 63%]
[2026-02-06T22:10:53.577Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-06T22:10:59.933Z] ...............                                                          [ 67%]
[2026-02-06T22:11:05.200Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-06T22:11:13.407Z] .........                                                                [ 69%]
[2026-02-06T22:11:26.720Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-06T22:11:33.857Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-06T22:11:36.876Z] ...                                                                      [ 71%]
[2026-02-06T22:11:43.441Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-06T22:19:25.982Z] ...............                                                          [ 74%]
[2026-02-06T22:19:31.257Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-06T22:19:37.835Z] ....                                                                     [ 75%]
[2026-02-06T22:20:16.940Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-06T22:20:27.498Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-06T22:20:55.574Z] ....                                                                     [ 78%]
[2026-02-06T22:21:03.692Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-06T22:21:13.733Z] .......                                                                  [ 80%]
[2026-02-06T22:21:41.862Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-06T22:21:41.862Z] .                                                                        [ 81%]
[2026-02-06T22:21:49.990Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-06T22:22:11.772Z] .......                                                                  [ 82%]
[2026-02-06T22:22:18.867Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-06T22:22:35.661Z] ....                                                                     [ 84%]
[2026-02-06T22:22:48.764Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-06T22:22:55.906Z] ..                                                                       [ 85%]
[2026-02-06T22:23:18.788Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-06T22:23:47.580Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-06T22:23:54.441Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-06T22:24:10.616Z] ..........                                                               [ 89%]
[2026-02-06T22:24:35.300Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-06T22:24:39.955Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-06T22:24:48.164Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-06T22:29:33.662Z] ....................                                                     [ 96%]
[2026-02-06T22:29:36.132Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-06T22:32:15.747Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-06T22:32:15.748Z] 
[2026-02-06T22:32:15.748Z] =================================== FAILURES ===================================
    
  

Copy link
Member

@fmigneault fmigneault left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be worth having this quickly mentioned around https://github.com/bird-house/birdhouse-deploy/tree/master/birdhouse#further-explanations to provide the utility function to users that might need it.

OK for me to have the option. Users are in change to deal with the resolution order of things they set in env.local.

@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4037/
ResultFAILURE

BIRDHOUSE_DEPLOY_BRANCH : allow_delayed_eval_usage_in_env.local
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-154.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/653/

NOTEBOOK TEST RESULTS
    
[2026-02-06T22:33:02.875Z] ============================= test session starts ==============================
[2026-02-06T22:33:02.876Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-06T22:33:02.876Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master
[2026-02-06T22:33:02.876Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-06T22:33:02.876Z] collected 538 items
[2026-02-06T22:33:02.876Z] 
[2026-02-06T22:33:13.153Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-06T22:34:03.647Z] notebooks-auth/test_cowbird_jupyter.ipynb ..........                     [  5%]
[2026-02-06T22:34:07.589Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-06T22:35:52.634Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-06T22:57:33.804Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-06T22:58:55.265Z] .                                                                        [ 10%]
[2026-02-06T22:59:04.385Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-06T22:59:11.700Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-06T23:33:17.886Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ......Fxxxx         [ 14%]
[2026-02-06T23:33:17.886Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-06T23:33:17.886Z] ...............                                                          [ 17%]
[2026-02-06T23:33:26.269Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-06T23:33:34.345Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-06T23:33:49.542Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-06T23:33:56.065Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-06T23:34:00.621Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-06T23:36:31.635Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-06T23:37:49.066Z] .............                                                            [ 27%]
[2026-02-06T23:37:50.446Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-06T23:37:52.647Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-06T23:38:22.307Z] .................                                                        [ 32%]
[2026-02-06T23:38:29.433Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-06T23:38:30.816Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-06T23:38:41.208Z] .........                                                                [ 35%]
[2026-02-06T23:38:52.354Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-06T23:39:02.392Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-06T23:39:03.774Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-06T23:39:09.878Z] .....                                                                    [ 39%]
[2026-02-06T23:40:31.337Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-06T23:41:08.502Z] ............                                                             [ 42%]
[2026-02-06T23:42:16.195Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-06T23:43:23.908Z] .....s.                                                                  [ 43%]
[2026-02-06T23:43:29.182Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-06T23:43:36.360Z] ..                                                                       [ 44%]
[2026-02-06T23:43:46.345Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-06T23:44:56.153Z] .........                                                                [ 46%]
[2026-02-06T23:45:06.145Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-06T23:47:44.611Z] ....                                                                     [ 47%]
[2026-02-06T23:47:44.611Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-06T23:47:45.128Z] ....                                                                     [ 48%]
[2026-02-06T23:47:49.344Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-06T23:48:00.938Z] .....                                                                    [ 49%]
[2026-02-06T23:48:05.127Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-06T23:48:10.566Z] .............                                                            [ 51%]
[2026-02-06T23:48:17.140Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-06T23:48:17.140Z] ......                                                                   [ 53%]
[2026-02-06T23:48:27.949Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-06T23:48:30.489Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-06T23:48:53.442Z] ......                                                                   [ 56%]
[2026-02-06T23:48:55.978Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-06T23:49:06.018Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-06T23:49:06.277Z] ..                                                                       [ 58%]
[2026-02-06T23:49:12.856Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-06T23:49:17.435Z] .............                                                            [ 61%]
[2026-02-06T23:51:00.445Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-06T23:51:00.445Z]                                                                          [ 63%]
[2026-02-06T23:51:06.162Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-06T23:51:12.949Z] ...............                                                          [ 67%]
[2026-02-06T23:51:18.485Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-06T23:51:26.650Z] .........                                                                [ 69%]
[2026-02-06T23:51:39.347Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-06T23:51:46.144Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-06T23:51:48.995Z] ...                                                                      [ 71%]
[2026-02-06T23:51:54.296Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-07T00:03:44.036Z] ...............                                                          [ 74%]
[2026-02-07T00:03:44.979Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-07T00:03:51.712Z] ....                                                                     [ 75%]
[2026-02-07T00:04:33.989Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-07T00:04:44.990Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-07T00:05:11.475Z] ....                                                                     [ 78%]
[2026-02-07T00:05:21.467Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-07T00:05:31.372Z] .......                                                                  [ 80%]
[2026-02-07T00:05:57.975Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-07T00:05:58.815Z] .                                                                        [ 81%]
[2026-02-07T00:06:08.803Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-07T00:06:29.490Z] .......                                                                  [ 82%]
[2026-02-07T00:06:37.628Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-07T00:06:54.441Z] ....                                                                     [ 84%]
[2026-02-07T00:07:08.875Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-07T00:07:15.452Z] ..                                                                       [ 85%]
[2026-02-07T00:07:39.160Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-07T00:08:08.517Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-07T00:08:16.038Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-07T00:08:30.250Z] ..........                                                               [ 89%]
[2026-02-07T00:08:54.919Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-07T00:09:00.200Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-07T00:09:08.340Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-07T00:14:34.448Z] .............Fxxxxxx                                                     [ 96%]
[2026-02-07T00:14:34.448Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-07T00:16:49.642Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-07T00:16:49.642Z] 
[2026-02-07T00:16:49.642Z] =================================== FAILURES ===================================
    
  

Copy link
Collaborator

@mishaschwartz mishaschwartz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that this adds flexibility to how we can configure the stack.

I left a few comments about the examples you used. I think you could actually simplify the example a lot more to make it clearer what the goal of this is. The example doesn't actually need to show the update to JUPYTERHUB_CONFIG_OVERRIDE because the only place that the JUPYTERHUB_README_FR variable is used is in the if statement.
Just something to think about if you want to make the example more concise and easier to read.

Also please add at least one test for this function in tests/unit/test_read_configs_include.py

should also be delayed eval'ed.

```sh
export JUPYTERHUB_README_FR="$JUPYTERHUB_USER_DATA_DIR/jupyter-readme/LISMOI.ipynb"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Put this in single quotes otherwise this won't wait until the eval_delayed_var is called in order to evaluate JUPYTERHUB_USER_DATA_DIR

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is real code that we actually use in production and it works as-is.

In env.local it is not necessary to use single-quote because env.local is always last to be read. In all other default.env, you are right, we need single quote because env.local can still override those variables.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you fully override JUPYTERHUB_USER_DATA_DIR=/my/custom/path? In that case, indeed, quotes do not really matter because the result is set as the final value you want anyway.

However, if you used something like

export JUPYTERHUB_USER_DATA_DIR='${BIRDHOUSE_DATA_PERSIST_ROOT}/alternate-jupyter'

You could let a test/staging server still set BIRDHOUSE_DATA_PERSIST_ROOT accordingly to different locations, after the fact, with another env file loaded as:

export BIRDHOUSE_EXTRA_CONF_DIRS="
   # ... usual/shared stuff ...
   /my/deploy-types/staging   # load the `default.env` overrides of this specific env
"

And you wouldn't have to maintain JUPYTERHUB_USER_DATA_DIR in each sub-env variant.
It is somewhat of a niche use case since you can override anything you want with explicit definitions in the final env.local if you prefer, but still a nice feature.

@tlvu
Copy link
Collaborator Author

tlvu commented Feb 11, 2026

I think you could actually simplify the example a lot more to make it clearer what the goal of this is.

How about just

export JUPYTERHUB_README_FR="$JUPYTERHUB_USER_DATA_DIR/jupyter-readme/LISMOI.ipynb"

# Error, file not found because JUPYTERHUB_README_FR resolve to "${BIRDHOUSE_DATA_PERSIST_ROOT}/jupyterhub_user_data/jupyter-readme/LISMOI.ipynb" because JUPYTERHUB_USER_DATA_DIR is a delayed eval var.
if [ -f "$JUPYTERHUB_README_FR" ]; then
(...)

and

export JUPYTERHUB_README_FR="$JUPYTERHUB_USER_DATA_DIR/jupyter-readme/LISMOI.ipynb"
eval_delayed_var JUPYTERHUB_README_FR

# Now this works because JUPYTERHUB_README_FR resolve properly to  "/data/jupyterhub_user_data/jupyter-readme/LISMOI.ipynb"
if [ -f "$JUPYTERHUB_README_FR" ]; then
(...)

The example doesn't actually need to show the update to JUPYTERHUB_CONFIG_OVERRIDE

Agreed ! Sorry I didn't meant to use a complex example, that was actual production code that we use. I think the simplification above with additional comments will make it clearer.

Also please add at least one test for this function in tests/unit/test_read_configs_include.py

There is no need because that new function eval_delayed_var is used in process_delayed_eval which has a bunch of tests already. I do not see the reason to duplicate the tests for process_delayed_eval.

@mishaschwartz
Copy link
Collaborator

How about just

Perfect! That's a much clearer example. thanks

There is no need because that new function eval_delayed_var is used in process_delayed_eval which has a bunch of tests already. I do not see the reason to duplicate the tests for process_delayed_eval.

The difference is that we're encouraging users to actually use eval_delayed_var themselves. It's now part of the public interface and we need a test to make sure that it doesn't break. Just because it works as a helper function for process_delayed_eval doesn't mean that a change later on won't break it for people using it in their local environment file.

@tlvu
Copy link
Collaborator Author

tlvu commented Feb 11, 2026

Might be worth having this quickly mentioned around https://github.com/bird-house/birdhouse-deploy/tree/master/birdhouse#further-explanations to provide the utility function to users that might need it.

OK for me to have the option. Users are in change to deal with the resolution order of things they set in env.local.

Done deb6c6e

@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4055/
ResultFAILURE

BIRDHOUSE_DEPLOY_BRANCH : allow_delayed_eval_usage_in_env.local
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-91.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/668/

NOTEBOOK TEST RESULTS
    
[2026-02-11T20:53:59.885Z] ============================= test session starts ==============================
[2026-02-11T20:53:59.885Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-11T20:53:59.885Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master
[2026-02-11T20:53:59.885Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-11T20:53:59.885Z] collected 538 items
[2026-02-11T20:53:59.885Z] 
[2026-02-11T20:54:08.526Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-11T20:55:08.065Z] notebooks-auth/test_cowbird_jupyter.ipynb ..........                     [  5%]
[2026-02-11T20:55:11.478Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-11T20:56:46.290Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-11T21:09:34.150Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-11T21:10:30.368Z] .                                                                        [ 10%]
[2026-02-11T21:10:34.731Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-11T21:10:41.505Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-11T21:25:17.218Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ...........         [ 14%]
[2026-02-11T21:25:20.506Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-11T21:25:31.413Z] ...............                                                          [ 17%]
[2026-02-11T21:25:42.836Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-11T21:25:58.076Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-11T21:26:12.558Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-11T21:26:25.846Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-11T21:26:30.578Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-11T21:29:42.000Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-11T21:30:59.466Z] .............                                                            [ 27%]
[2026-02-11T21:31:04.452Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-11T21:31:06.324Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-11T21:31:41.810Z] .................                                                        [ 32%]
[2026-02-11T21:31:50.377Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-11T21:31:51.749Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-11T21:32:09.208Z] .........                                                                [ 35%]
[2026-02-11T21:32:19.969Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-11T21:32:30.990Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-11T21:32:32.891Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-11T21:32:42.854Z] .....                                                                    [ 39%]
[2026-02-11T21:33:50.515Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-11T21:34:49.112Z] ............                                                             [ 42%]
[2026-02-11T21:36:25.546Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-11T21:38:18.121Z] .....s.                                                                  [ 43%]
[2026-02-11T21:38:26.252Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-11T21:38:34.065Z] ..                                                                       [ 44%]
[2026-02-11T21:38:44.046Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-11T21:40:05.404Z] .........                                                                [ 46%]
[2026-02-11T21:40:15.390Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-11T21:43:03.590Z] ....                                                                     [ 47%]
[2026-02-11T21:43:03.590Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-11T21:43:03.590Z] ....                                                                     [ 48%]
[2026-02-11T21:43:03.590Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-11T21:43:16.369Z] .....                                                                    [ 49%]
[2026-02-11T21:43:20.549Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-11T21:43:26.654Z] .............                                                            [ 51%]
[2026-02-11T21:43:33.215Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-11T21:43:33.733Z] ......                                                                   [ 53%]
[2026-02-11T21:43:46.480Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-11T21:43:49.012Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-11T21:44:12.156Z] ......                                                                   [ 56%]
[2026-02-11T21:44:14.063Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-11T21:44:26.824Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-11T21:44:26.824Z] ..                                                                       [ 58%]
[2026-02-11T21:44:33.399Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-11T21:44:39.607Z] .............                                                            [ 61%]
[2026-02-11T21:46:37.033Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-11T21:46:37.033Z]                                                                          [ 63%]
[2026-02-11T21:46:44.496Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-11T21:46:52.049Z] ...............                                                          [ 67%]
[2026-02-11T21:46:57.599Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-11T21:47:06.343Z] .........                                                                [ 69%]
[2026-02-11T21:47:20.103Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-11T21:47:27.884Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-11T21:47:30.924Z] ...                                                                      [ 71%]
[2026-02-11T21:47:37.492Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-11T21:59:15.147Z] ...............                                                          [ 74%]
[2026-02-11T21:59:15.147Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-11T21:59:20.342Z] ....                                                                     [ 75%]
[2026-02-11T22:00:02.068Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-11T22:00:13.236Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-11T22:00:39.947Z] ....                                                                     [ 78%]
[2026-02-11T22:00:48.065Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-11T22:00:59.162Z] .......                                                                  [ 80%]
[2026-02-11T22:01:24.806Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-11T22:01:25.741Z] .                                                                        [ 81%]
[2026-02-11T22:01:33.853Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-11T22:01:56.005Z] .......                                                                  [ 82%]
[2026-02-11T22:02:04.130Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-11T22:02:23.171Z] ....                                                                     [ 84%]
[2026-02-11T22:02:34.812Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-11T22:02:41.645Z] ..                                                                       [ 85%]
[2026-02-11T22:03:05.876Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-11T22:03:39.255Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-11T22:03:42.539Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-11T22:04:01.114Z] ..........                                                               [ 89%]
[2026-02-11T22:04:25.766Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-11T22:04:30.684Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-11T22:04:38.810Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-11T22:09:11.963Z] .............Fxxxxxx                                                     [ 96%]
[2026-02-11T22:09:12.479Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-11T22:11:52.003Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-11T22:11:52.003Z] 
[2026-02-11T22:11:52.003Z] =================================== FAILURES ===================================
    
  

@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4056/
ResultFAILURE

BIRDHOUSE_DEPLOY_BRANCH : allow_delayed_eval_usage_in_env.local
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-154.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/669/

NOTEBOOK TEST RESULTS
    
[2026-02-11T21:26:18.388Z] ============================= test session starts ==============================
[2026-02-11T21:26:18.389Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-11T21:26:18.389Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master@2
[2026-02-11T21:26:18.389Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-11T21:26:18.389Z] collected 538 items
[2026-02-11T21:26:18.389Z] 
[2026-02-11T21:26:26.147Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-11T21:27:09.006Z] notebooks-auth/test_cowbird_jupyter.ipynb ..........                     [  5%]
[2026-02-11T21:27:15.153Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-11T21:30:48.986Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-11T21:45:46.805Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-11T21:46:54.503Z] .                                                                        [ 10%]
[2026-02-11T21:47:02.816Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-11T21:47:09.202Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-11T22:02:07.787Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ...........         [ 14%]
[2026-02-11T22:02:07.787Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-11T22:02:10.351Z] ...............                                                          [ 17%]
[2026-02-11T22:02:21.314Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-11T22:02:30.410Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-11T22:02:44.877Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-11T22:03:04.360Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-11T22:03:08.657Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-11T22:05:51.241Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-11T22:07:00.989Z] .............                                                            [ 27%]
[2026-02-11T22:07:06.327Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-11T22:07:09.172Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-11T22:07:34.458Z] .................                                                        [ 32%]
[2026-02-11T22:07:43.062Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-11T22:07:44.441Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-11T22:08:01.410Z] .........                                                                [ 35%]
[2026-02-11T22:08:11.107Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-11T22:08:21.564Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-11T22:08:22.940Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-11T22:08:31.477Z] .....                                                                    [ 39%]
[2026-02-11T22:09:18.156Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-11T22:09:44.101Z] ............                                                             [ 42%]
[2026-02-11T22:10:06.029Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-11T22:10:41.780Z] .....s.                                                                  [ 43%]
[2026-02-11T22:10:49.902Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-11T22:10:56.543Z] ..                                                                       [ 44%]
[2026-02-11T22:11:06.521Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-11T22:12:23.170Z] .........                                                                [ 46%]
[2026-02-11T22:12:33.152Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-11T22:14:22.962Z] ....                                                                     [ 47%]
[2026-02-11T22:14:22.962Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-11T22:14:26.763Z] ....                                                                     [ 48%]
[2026-02-11T22:14:30.963Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-11T22:14:41.618Z] .....                                                                    [ 49%]
[2026-02-11T22:14:45.813Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-11T22:14:51.552Z] .............                                                            [ 51%]
[2026-02-11T22:14:58.118Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-11T22:14:58.378Z] ......                                                                   [ 53%]
[2026-02-11T22:15:09.292Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-11T22:15:12.578Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-11T22:15:33.718Z] ......                                                                   [ 56%]
[2026-02-11T22:15:36.253Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-11T22:15:46.543Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-11T22:15:46.543Z] ..                                                                       [ 58%]
[2026-02-11T22:15:54.658Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-11T22:15:59.111Z] .............                                                            [ 61%]
[2026-02-11T22:17:58.803Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-11T22:17:58.803Z]                                                                          [ 63%]
[2026-02-11T22:18:02.667Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-11T22:18:10.414Z] ...............                                                          [ 67%]
[2026-02-11T22:18:17.539Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-11T22:18:26.661Z] .........                                                                [ 69%]
[2026-02-11T22:18:40.129Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-11T22:18:48.802Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-11T22:18:51.552Z] ...                                                                      [ 71%]
[2026-02-11T22:18:58.118Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-11T22:28:45.635Z] ...............                                                          [ 74%]
[2026-02-11T22:28:50.912Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-11T22:29:00.390Z] ....                                                                     [ 75%]
[2026-02-11T22:29:41.287Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-11T22:29:52.512Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-11T22:30:20.561Z] ....                                                                     [ 78%]
[2026-02-11T22:30:30.534Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-11T22:30:42.249Z] .......                                                                  [ 80%]
[2026-02-11T22:31:07.922Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-11T22:31:08.867Z] .                                                                        [ 81%]
[2026-02-11T22:31:18.843Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-11T22:31:41.007Z] .......                                                                  [ 82%]
[2026-02-11T22:31:48.418Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-11T22:32:08.431Z] ....                                                                     [ 84%]
[2026-02-11T22:32:22.583Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-11T22:32:29.968Z] ..                                                                       [ 85%]
[2026-02-11T22:33:03.087Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-11T22:33:42.307Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-11T22:33:49.465Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-11T22:34:03.646Z] ..........                                                               [ 89%]
[2026-02-11T22:34:29.872Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-11T22:34:35.985Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-11T22:34:44.092Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-11T22:41:07.118Z] .............Fxxxxxx                                                     [ 96%]
[2026-02-11T22:41:07.118Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-11T22:43:30.198Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-11T22:43:30.198Z] 
[2026-02-11T22:43:30.198Z] =================================== FAILURES ===================================
    
  

Comment on lines +115 to +118
`JUPYTERHUB_USER_DATA_DIR` is a delayed eval var because it depends on the value of `BIRDHOUSE_DATA_PERSIST_ROOT` which can be
overridden in `env.local`. So if you need the value of `JUPYTERHUB_USER_DATA_DIR` immediately in `env.local`, you need to
`eval_delayed_var JUPYTERHUB_USER_DATA_DIR` and if you need to override `BIRDHOUSE_DATA_PERSIST_ROOT`, then you need to override it
before calling `eval_delayed_var JUPYTERHUB_USER_DATA_DIR`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can the example be as follows?
Seems quicker to interpret the feature and makes sure the order is explicit.

# in your env.local
export BIRDHOUSE_DATA_PERSIST_ROOT=/my/data  # define dependency needed by delayed var
echo "${JUPYTERHUB_USER_DATA_DIR}"           # delayed '${BIRDHOUSE_DATA_PERSIST_ROOT}/jupyterhub_user_data'
eval_delayed_var JUPYTERHUB_USER_DATA_DIR    # evaluate the desired variable
echo "${JUPYTERHUB_USER_DATA_DIR}"           # evaluated '/my/data/jupyterhub_user_data'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/deployment Related to deployment utilities and scripts documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants