From 92465ade36cce37b764236072059c2f7d3995d93 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 22:03:06 +0200 Subject: [PATCH 01/14] Bump to 2.0.0.dev --- pyproject.toml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d90078d1..9ebb7e07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,7 @@ omit = [ github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub" [tool.tbump.version] -current = "1.0.1.dev" +current = "2.0.0.dev" regex = ''' (?P\d+) \. diff --git a/setup.py b/setup.py index 0bb5a1ce..5caeab99 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="the-littlest-jupyterhub", - version="1.0.1.dev", + version="2.0.0.dev", description="A small JupyterHub distribution", url="https://github.com/jupyterhub/the-littlest-jupyterhub", author="Jupyter Development Team", From 3f55ac29128c4d75bd1a4b342dae0fbafda53060 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 21:43:55 +0200 Subject: [PATCH 02/14] Drop support for ubuntu 20.04 and Python 3.8 --- .github/workflows/integration-test.yaml | 3 --- bootstrap/bootstrap.py | 20 ++++++++++---------- integration-tests/test_bootstrap.py | 4 ++-- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.github/workflows/integration-test.yaml b/.github/workflows/integration-test.yaml index 226a1a08..cd98ad57 100644 --- a/.github/workflows/integration-test.yaml +++ b/.github/workflows/integration-test.yaml @@ -39,9 +39,6 @@ jobs: - name: "Debian 12, Py 3.11" distro_image: "debian:12" extra_flags: "" - - name: "Ubuntu 20.04, Py 3.8" - distro_image: "ubuntu:20.04" - extra_flags: "" - name: "Ubuntu 22.04 Py 3.10" distro_image: "ubuntu:22.04" extra_flags: "" diff --git a/bootstrap/bootstrap.py b/bootstrap/bootstrap.py index f69aceb8..75072f4c 100644 --- a/bootstrap/bootstrap.py +++ b/bootstrap/bootstrap.py @@ -9,10 +9,10 @@ Constraints: - - The entire script should be compatible with Python 3.8, which is the default on - Ubuntu 20.04. - - The script should parse in Python 3.6 as we print error messages for using - Ubuntu 18.04 which comes with Python 3.6 by default. + - The entire script should be compatible with Python 3.9, which is the default on + Debian 11. + - The script should parse in Python 3.8 as we print error messages for using + Ubuntu 20.04 which comes with Python 3.8 by default. - The script must depend only on stdlib modules, as no previous installation of dependencies can be assumed. @@ -210,22 +210,22 @@ def ensure_host_system_can_install_tljh(): Check if TLJH is installable in current host system and exit with a clear error message otherwise. """ - # Require Ubuntu 20.04+ or Debian 11+ + # Require Ubuntu 22.04+ or Debian 11+ distro = get_os_release_variable("ID") version = get_os_release_variable("VERSION_ID") if distro not in ["ubuntu", "debian"]: print("The Littlest JupyterHub currently supports Ubuntu or Debian Linux only") sys.exit(1) - elif distro == "ubuntu" and _parse_version(version) < (20, 4): - print("The Littlest JupyterHub requires Ubuntu 20.04 or higher") + elif distro == "ubuntu" and _parse_version(version) < (22, 4): + print("The Littlest JupyterHub requires Ubuntu 22.04 or higher") sys.exit(1) elif distro == "debian" and _parse_version(version) < (11,): print("The Littlest JupyterHub requires Debian 11 or higher") sys.exit(1) - # Require Python 3.8+ - if sys.version_info < (3, 8): - print(f"bootstrap.py must be run with at least Python 3.8, found {sys.version}") + # Require Python 3.9+ + if sys.version_info < (3, 9): + print(f"bootstrap.py must be run with at least Python 3.9, found {sys.version}") sys.exit(1) # Require systemd (systemctl is a part of systemd) diff --git a/integration-tests/test_bootstrap.py b/integration-tests/test_bootstrap.py index eac9c923..0846d63b 100644 --- a/integration-tests/test_bootstrap.py +++ b/integration-tests/test_bootstrap.py @@ -85,9 +85,9 @@ def test_ubuntu_too_old(): """ Error with a useful message when running in older Ubuntu """ - output = _run_bootstrap_in_container("ubuntu:18.04", False) + output = _run_bootstrap_in_container("ubuntu:20.04", False) _stop_container() - assert output.stdout == "The Littlest JupyterHub requires Ubuntu 20.04 or higher\n" + assert output.stdout == "The Littlest JupyterHub requires Ubuntu 22.04 or higher\n" assert output.returncode == 1 From 1a9f3d65a4a0c8aec85dfa15a051710d75d0eccc Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 22:04:36 +0200 Subject: [PATCH 03/14] tljh package: bump to ruamel.yaml==0.18.* --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5caeab99..2b8af9c3 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ packages=find_packages(), include_package_data=True, install_requires=[ - "ruamel.yaml==0.17.*", + "ruamel.yaml==0.18.*", "jinja2", "pluggy==1.*", "backoff", From 363dc45b524ebe14910207a4323a1052d9a4b5f5 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 22:05:26 +0200 Subject: [PATCH 04/14] tljh package: bump to traefik-proxy v2 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 2b8af9c3..9298d938 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ "filelock", "requests", "bcrypt", - "jupyterhub-traefik-proxy==1.*", + "jupyterhub-traefik-proxy==2.*", ], entry_points={ "console_scripts": [ From 436c81f26d22487fb494d83795e5fb1779557877 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 22:06:53 +0200 Subject: [PATCH 05/14] tljh package: require python 3.9+ --- .pre-commit-config.yaml | 4 ++-- pyproject.toml | 4 +--- setup.py | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 688a10e2..4b5f3574 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,8 +15,8 @@ repos: hooks: - id: pyupgrade args: - - --py36-plus - # We need the bootstrap.py script to be parsable with Python 3.5, so we + - --py39-plus + # We need the bootstrap.py script to be parsable with Python 3.8, so we # exclude it from the pyupgrade hook that will apply f-strings etc. exclude: bootstrap/bootstrap.py diff --git a/pyproject.toml b/pyproject.toml index 9ebb7e07..db334831 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,12 +25,10 @@ profile = "black" # target-version should be all supported versions, see # https://github.com/psf/black/issues/751#issuecomment-473066811 target_version = [ - "py36", - "py37", - "py38", "py39", "py310", "py311", + "py312", ] diff --git a/setup.py b/setup.py index 9298d938..86668108 100644 --- a/setup.py +++ b/setup.py @@ -10,6 +10,7 @@ license="3 Clause BSD", packages=find_packages(), include_package_data=True, + python_requires=">=3.9", install_requires=[ "ruamel.yaml==0.18.*", "jinja2", From 0de2db365adfb917ff4d971e4b59999ccb7de946 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 20 Sep 2024 22:11:25 +0200 Subject: [PATCH 06/14] pre-commit: run hooks --- .github/integration-test.py | 2 +- integration-tests/test_extensions.py | 3 +-- tests/test_config.py | 15 +++++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/integration-test.py b/.github/integration-test.py index 73ef8ba5..0ceed6a6 100755 --- a/.github/integration-test.py +++ b/.github/integration-test.py @@ -10,7 +10,7 @@ TEST_IMAGE_NAME = "test-systemd" -@functools.lru_cache() +@functools.lru_cache def _get_container_runtime_cli(): runtimes = ["docker", "podman"] for runtime in runtimes: diff --git a/integration-tests/test_extensions.py b/integration-tests/test_extensions.py index 661432bf..0e4c2c83 100644 --- a/integration-tests/test_extensions.py +++ b/integration-tests/test_extensions.py @@ -29,8 +29,7 @@ def test_labextensions(): # jupyter-labextension writes to stdout and stderr weirdly proc = subprocess.run( ["/opt/tljh/user/bin/jupyter-labextension", "list"], - stderr=subprocess.PIPE, - stdout=subprocess.PIPE, + capture_output=True, ) extensions = [ diff --git a/tests/test_config.py b/tests/test_config.py index 72cf65e3..2d6ded43 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -143,18 +143,21 @@ def test_remove_from_config_error(): def test_reload_hub(): - with mock.patch("tljh.systemd.restart_service") as restart_service, mock.patch( - "tljh.systemd.check_service_active" - ) as check_active, mock.patch("tljh.config.check_hub_ready") as check_ready: + with ( + mock.patch("tljh.systemd.restart_service") as restart_service, + mock.patch("tljh.systemd.check_service_active") as check_active, + mock.patch("tljh.config.check_hub_ready") as check_ready, + ): config.reload_component("hub") restart_service.assert_called_with("jupyterhub") check_active.assert_called_with("jupyterhub") def test_reload_proxy(tljh_dir): - with mock.patch("tljh.systemd.restart_service") as restart_service, mock.patch( - "tljh.systemd.check_service_active" - ) as check_active: + with ( + mock.patch("tljh.systemd.restart_service") as restart_service, + mock.patch("tljh.systemd.check_service_active") as check_active, + ): config.reload_component("proxy") restart_service.assert_called_with("traefik") check_active.assert_called_with("traefik") From e8602fc4a1950f967df249ba432e75ef6cdd3a2b Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Wed, 18 Sep 2024 11:20:34 +0200 Subject: [PATCH 07/14] Update lower bounds on dependencies for tljh 2 beta release --- tljh/requirements-hub-env.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tljh/requirements-hub-env.txt b/tljh/requirements-hub-env.txt index 0c455723..ee733f72 100644 --- a/tljh/requirements-hub-env.txt +++ b/tljh/requirements-hub-env.txt @@ -10,12 +10,12 @@ # jupyterhub>=5.1.0,<6 jupyterhub-systemdspawner>=1.0.1,<2 -jupyterhub-firstuseauthenticator>=1.0.0,<2 -jupyterhub-nativeauthenticator>=1.2.0,<2 -jupyterhub-ldapauthenticator>=1.3.2,<2 +jupyterhub-firstuseauthenticator>=1.1.0,<2 +jupyterhub-nativeauthenticator>=1.3.0,<2 +jupyterhub-ldapauthenticator==2.0.0b2 # FIXME: update to >=2.0.0,<3 jupyterhub-tmpauthenticator>=1.0.0,<2 oauthenticator>=17,<18 -jupyterhub-idle-culler>=1.2.1,<2 +jupyterhub-idle-culler>=1.4.0,<2 # pycurl is installed to improve reliability and performance for when JupyterHub # makes web requests. JupyterHub will use tornado's CurlAsyncHTTPClient when @@ -25,4 +25,4 @@ jupyterhub-idle-culler>=1.2.1,<2 # ref: https://www.tornadoweb.org/en/stable/httpclient.html#module-tornado.simple_httpclient # ref: https://github.com/jupyterhub/the-littlest-jupyterhub/issues/289 # -pycurl>=7.45.2,<8 +pycurl>=7.45.3,<8 From a89021c49eef394998d78d16d70a9efb68401ce0 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 26 Sep 2024 13:32:07 +0200 Subject: [PATCH 08/14] Update to install miniforge 24.7.1-2 from 24.7.1-0 --- tljh/installer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tljh/installer.py b/tljh/installer.py index 0930f7d4..de817a1f 100644 --- a/tljh/installer.py +++ b/tljh/installer.py @@ -138,11 +138,11 @@ def ensure_usergroups(): # Install miniforge using an installer from # https://github.com/conda-forge/miniforge/releases -MINIFORGE_VERSION = "24.7.1-0" +MINIFORGE_VERSION = "24.7.1-2" # sha256 checksums MINIFORGE_CHECKSUMS = { - "aarch64": "7a3372268b45679584043b4ba1e0318ee5027384a8d330f2d991b14d815d6a6d", - "x86_64": "b64f77042cf8eafd31ced64f9253a74fb85db63545fe167ba5756aea0e8125be", + "aarch64": "7bf60bce50f57af7ea4500b45eeb401d9350011ab34c9c45f736647d8dba9021", + "x86_64": "636f7faca2d51ee42b4640ce160c751a46d57621ef4bf14378704c87c5db4fe3", } # minimum versions of packages From a059d6ffbb1031a65d8d12dd4f53e4f0666effd9 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 26 Sep 2024 16:29:39 +0200 Subject: [PATCH 09/14] Update traefik from 2.10.1 to 3.1.4 --- tljh/traefik.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tljh/traefik.py b/tljh/traefik.py index a19a3deb..9f0aae14 100644 --- a/tljh/traefik.py +++ b/tljh/traefik.py @@ -29,13 +29,13 @@ plat = None # Traefik releases: https://github.com/traefik/traefik/releases -traefik_version = "2.10.1" +traefik_version = "3.1.4" # record sha256 hashes for supported platforms here # checksums are published in the checksums.txt of each release checksums = { - "linux_amd64": "8d9bce0e6a5bf40b5399dbb1d5e3e5c57b9f9f04dd56a2dd57cb0713130bc824", - "linux_arm64": "260a574105e44901f8c9c562055936d81fbd9c96a21daaa575502dc69bfe390a", + "linux_amd64": "eb7227b1b235195355904839c514a9ed6a0aecdcf5dab02ad48db21b05c5e700", + "linux_arm64": "e5d970a7f11267b70a8e308cb80f859bba4f420f24789f7393fdf3f4cd031631", } _tljh_path = Path(__file__).parent.resolve() From 3ddc1e8d5934e4b7fc5046ae3dd0f3c6d27c9b1c Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 26 Sep 2024 22:32:26 +0200 Subject: [PATCH 10/14] refactor: exctract calling traefik setup from ensure_jupyterhub_package func --- tljh/installer.py | 2 +- tljh/traefik.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tljh/installer.py b/tljh/installer.py index de817a1f..aacd03a7 100644 --- a/tljh/installer.py +++ b/tljh/installer.py @@ -115,7 +115,6 @@ def ensure_jupyterhub_package(prefix): os.path.join(HERE, "requirements-hub-env.txt"), upgrade=True, ) - traefik.ensure_traefik_binary(prefix) def ensure_usergroups(): @@ -536,6 +535,7 @@ def main(): logger.info("Setting up JupyterHub...") ensure_jupyterhub_package(HUB_ENV_PREFIX) + traefik.ensure_traefik_binary(HUB_ENV_PREFIX) # Stop the http server with the progress page before traefik starts if args.progress_page_server_pid: diff --git a/tljh/traefik.py b/tljh/traefik.py index 9f0aae14..07b2f482 100644 --- a/tljh/traefik.py +++ b/tljh/traefik.py @@ -91,7 +91,10 @@ def check_traefik_version(traefik_bin): @backoff.on_exception(backoff.expo, Exception, max_tries=2, giveup=fatal_error) def ensure_traefik_binary(prefix): - """Download and install the traefik binary to a location identified by a prefix path such as '/opt/tljh/hub/'""" + """ + Ensure that a traefik binary of a hardcoded version is made available at a + prefix path such as '/opt/tljh/hub/'. + """ if plat is None: raise OSError( f"Error. Platform: {os.uname().sysname} / {machine} Not supported." From 812be5463574d3b1a67a24919e48dbb8ea211a5c Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Sat, 28 Sep 2024 10:46:56 +0200 Subject: [PATCH 11/14] Bump the requirements-user-env-extras.txt lower version bounds By declaring these lower bounds, it becomes a bit easier to help others using tljh, because we can know that fresh installations of tljh should have at least these versions of software etc. --- tljh/requirements-user-env-extras.txt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tljh/requirements-user-env-extras.txt b/tljh/requirements-user-env-extras.txt index 020779b0..f20e229a 100644 --- a/tljh/requirements-user-env-extras.txt +++ b/tljh/requirements-user-env-extras.txt @@ -8,11 +8,20 @@ # the requirements-txt-fixer pre-commit hook that sorted them and made # our integration tests fail. # -notebook==7.* -jupyterlab==4.* +# ref: https://github.com/jupyter/notebook +notebook>=7.2.2,<8 + +# ref: https://github.com/jupyterlab/jupyterlab +jupyterlab>=4.2.5,<5 + # nbgitpuller for easily pulling in Git repositories -nbgitpuller==1.* +# ref: https://github.com/jupyterhub/nbgitpuller +nbgitpuller>=1.2.1,<2 + # jupyter-resource-usage to show people how much RAM they are using -jupyter-resource-usage==1.* +# ref: https://github.com/jupyter-server/jupyter-resource-usage +jupyter-resource-usage>=1.1.0,<2 + # Most people consider ipywidgets to be part of the core notebook experience -ipywidgets==8.* +# ref: https://github.com/jupyter-widgets/ipywidgets +ipywidgets>=8.1.5,<9 From 95b54414ca744ef7fec79392938066ef5fb6141d Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 26 Sep 2024 13:47:49 +0200 Subject: [PATCH 12/14] Add changelog for 2.0.0b1 --- docs/reference/changelog.md | 123 ++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/docs/reference/changelog.md b/docs/reference/changelog.md index e542d2c0..2c914b53 100644 --- a/docs/reference/changelog.md +++ b/docs/reference/changelog.md @@ -2,6 +2,129 @@ # Changelog +## 2.0 + +### 2.0.0b1 - 2024-09-30 + +This release bundles with the latest available software from the JupyterHub +ecosystem. + +For instructions on how to make an upgrade, see [](howto-admin-upgrade-tljh). + +#### Breaking changes + +- JupyterHub 4.\* has been upgraded to >=5.1.0,<6 + - Refer to the [JupyterHub changelog] for details and pay attention to the + entries for JupyterHub version 5.0.0. +- OAuthenticator 16.0.4 has been upgraded to >=17.0.0,<18 + - If you are using an OAuthenticator based authenticator class + (GitHubOAuthenticator, GoogleOAuthenticator, ...), refer to the + [OAuthenticator changelog] for details and pay attention to the entries for + JupyterHub version 17.0.0. +- LDAPAuthenticator 1.3.2 has been upgraded to >=2.0.0,<3 + - If you are using this authenticator class, refer to the [LDAPAuthenticator + changelog] for details and pay attention to the entries for + LDAPAuthenticator version 2.0.0. +- The configured JupyterHub Proxy class `traefik-proxy` and the `traefik` server + controlled by JupyterHub via the proxy class has been upgraded to a new major + version, but no breaking change are expected to be noticed for users. + +[oauthenticator changelog]: https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html +[ldapauthenticator changelog]: https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md + +#### Notable dependencies updated + +A TLJH installation provides a Python environment where the software for +JupyterHub itself runs - _the hub environment_, and a Python environment where +the software of users runs - _the user environment_. + +If you are installing TLJH for the first time, the user environment will be +setup initially with Python 3.12 and some other packages described in +[tljh/requirements-user-env-extras.txt]. + +If you are upgrading to this version of TLJH, the bare minimum is changed in the +user environment. The hub environment's dependencies are on the other hand +always upgraded to the latest version within the specified version range defined +in [tljh/requirements-hub-env.txt] and seen below. + +[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/2.0.0b1/tljh/requirements-user-env-extras.txt +[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/2.0.0b1/tljh/requirements-hub-env.txt + +The changes in the respective environments between TLJH version 1.0.0 and 2.0.0b1 +are summarized below. + +| Dependency changes in the _hub environment_ | Version in 1.0.0 | Version in 2.0.0b1 | Changelog link | Note | +| ------------------------------------------------------------------------------ | ---------------- | ------------------ | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | +| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | >=4.0.2,<5 | >=5.1.0,<6 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Running in the `jupyterhub` systemd service | +| [traefik](https://github.com/traefik/traefik) | 2.10.1 | 3.1.4 | [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md) | Running in the `traefik` systemd service | +| [traefik-proxy](https://github.com/jupyterhub/traefik-proxy) | >=1.1.0,<2 | 2.\* | [Changelog](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/changelog.html) | Run by jupyterhub, controls `traefik` | +| [systemdspawner](https://github.com/jupyterhub/systemdspawner) | >=1.0.1,<2 | >=1.0.1,<2 | [Changelog](https://github.com/jupyterhub/systemdspawner/blob/master/CHANGELOG.md) | Run by jupyterhub, controls user servers via systemd | +| [jupyterhub-idle-culler](https://github.com/jupyterhub/jupyterhub-idle-culler) | >=1.2.1,<2 | >=1.4.0,<2 | [Changelog](https://github.com/jupyterhub/jupyterhub-idle-culler/blob/main/CHANGELOG.md) | Run by jupyterhub, stops inactivate servers etc. | +| [firstuseauthenticator](https://github.com/jupyterhub/firstuseauthenticator) | >=1.0.0,<2 | 1.1.0,<2 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users | +| [tmpauthenticator](https://github.com/jupyterhub/tmpauthenticator) | >=1.0.0,<2 | 1.0.0,<2 | [Changelog](https://github.com/jupyterhub/tmpauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | +| [nativeauthenticator](https://github.com/jupyterhub/nativeauthenticator) | >=1.2.0,<2 | >=1.3.0,<2 | [Changelog](https://github.com/jupyterhub/nativeauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | +| [oauthenticator](https://github.com/jupyterhub/oauthenticator) | >=16.0.4,<17 | >=17.0.0,<18 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users | +| [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) | >=1.3.2,<2 | ==2.0.0b2 | [Changelog](https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | +| [pip](https://github.com/pypa/pip) | >=23.1.2 | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | - | + +| Dependency changes in the _user environment_ | Version in 1.0.0 | Version in upgrade to 2.0.0b1 | Version in fresh install of 2.0.0b1 | Changelog link | Note | +| -------------------------------------------------------- | ---------------- | ----------------------------- | ----------------------------------- | --------------------------------------------------------------------------------- | ------------------------ | +| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | >=4.0.2,<5 | >=5.1.0,<6 | >=5.1.0,<6 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Always upgraded. | +| [pip](https://github.com/pypa/pip) | >=23.1.2 | >=23.1.2 | >=24.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | Only upgraded if needed. | +| [conda](https://docs.conda.io/projects/conda/en/stable/) | >=4.10.0 | >=4.10.0 | ==24.7.1 | [Changelog](https://docs.conda.io/projects/conda/en/stable/release-notes.html) | Only upgraded if needed. | +| [mamba](https://mamba.readthedocs.io/en/latest/) | >=0.16.0 | >=0.16.0 | ==1.5.9 | [Changelog](https://github.com/mamba-org/mamba/blob/main/CHANGELOG.md) | Only upgraded if needed. | + +#### New features added + +- jupyterhub 5 [#989](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/989) ([@minrk](https://github.com/minrk), [@manics](https://github.com/manics)) +- Validate tljh specific config [#962](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/962) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk)) +- Add the ability to define conda channels in plugins via `tljh_extra_user_conda_channels` [#942](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/942) ([@yuvipanda](https://github.com/yuvipanda), [@consideRatio](https://github.com/consideRatio)) + +#### Bugs fixed + +- fix `-m` invocation of jupyterhub [#988](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/988) ([@minrk](https://github.com/minrk), [@manics](https://github.com/manics)) +- Re-install conda/mamba for every tljh upgrade (doesn't imply upgrade) [#968](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/968) ([@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk)) +- Add missing oauthenticator dependency for AzureADOAuthenticator [#959](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/959) ([@consideRatio](https://github.com/consideRatio)) + +#### Maintenance and upkeep improvements + +- Bump the requirements-user-env-extras.txt lower version bounds [#1002](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/1002) ([@consideRatio](https://github.com/consideRatio)) +- Update traefik from 2.10.1 to 3.1.4 [#1001](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/1001) ([@consideRatio](https://github.com/consideRatio)) +- Update to install miniforge 24.7.1-2 from 24.7.1-0 [#999](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/999) ([@consideRatio](https://github.com/consideRatio)) +- Drop ubuntu 20.04, require py39, traefik-proxy v2, and ldapauthenticator v2 [#998](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/998) ([@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk)) +- consolidate lock file handling [#994](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/994) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio), [@jrdnbradford](https://github.com/jrdnbradford)) +- update oauthenticator to 17 [#992](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/992) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio)) +- Update base user environment to miniforge 24.7.1-0 (Python 3.12) [#990](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/990) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio)) +- Add TLJH config lockfile [#976](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/976) ([@jrdnbradford](https://github.com/jrdnbradford), [@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio)) +- tests: fix to catch test failure earlier when they really happen [#975](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/975) ([@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk)) + +#### Documentation improvements + +- Added missing details on how to add custom domain from manual HTTPS configuration [#983](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/983) ([@josedaudi](https://github.com/josedaudi), [@yuvipanda](https://github.com/yuvipanda)) +- Reword documentation sentence [#970](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/970) ([@davidalber](https://github.com/davidalber), [@consideRatio](https://github.com/consideRatio)) +- Fix typo and replace word [#969](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/969) ([@davidalber](https://github.com/davidalber), [@consideRatio](https://github.com/consideRatio)) +- Fix URL syntax in nativeauth.md [#949](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/949) ([@pdebuyl](https://github.com/pdebuyl), [@minrk](https://github.com/minrk)) +- adapt install documentation for new /lab default interface [#935](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/935) ([@schwebke](https://github.com/schwebke), [@minrk](https://github.com/minrk)) + +#### Continuous integration improvements + +- ci: cache pip only when no container is used [#997](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/997) ([@consideRatio](https://github.com/consideRatio)) +- ci: run unit tests in ubuntu-24.04 github actions environment as well [#993](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/993) ([@consideRatio](https://github.com/consideRatio)) +- ci: add tests for debian 12 and ubuntu 24.04 [#967](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/967) ([@consideRatio](https://github.com/consideRatio)) +- build(deps): bump actions/cache from 3 to 4 [#961](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/961) ([@consideRatio](https://github.com/consideRatio)) +- build(deps): bump codecov/codecov-action from 3 to 4 [#960](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/960) ([@consideRatio](https://github.com/consideRatio)) +- build(deps): bump actions/setup-python from 4 to 5 [#958](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/958) ([@consideRatio](https://github.com/consideRatio)) +- build(deps): bump actions/checkout from 3 to 4 [#943](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/943) ([@consideRatio](https://github.com/consideRatio)) + +#### Contributors to this release + +The following people contributed discussions, new ideas, code and documentation contributions, and review. +See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports). + +([GitHub contributors page for this release](https://github.com/jupyterhub/the-littlest-jupyterhub/graphs/contributors?from=2023-08-11&to=2024-09-30&type=c)) + +@consideRatio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AconsideRatio+updated%3A2023-08-11..2024-09-30&type=Issues)) | @davidalber ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Adavidalber+updated%3A2023-08-11..2024-09-30&type=Issues)) | @josedaudi ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajosedaudi+updated%3A2023-08-11..2024-09-30&type=Issues)) | @jrdnbradford ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajrdnbradford+updated%3A2023-08-11..2024-09-30&type=Issues)) | @kiliansinger ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Akiliansinger+updated%3A2023-08-11..2024-09-30&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Amanics+updated%3A2023-08-11..2024-09-30&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aminrk+updated%3A2023-08-11..2024-09-30&type=Issues)) | @MridulS ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AMridulS+updated%3A2023-08-11..2024-09-30&type=Issues)) | @pdebuyl ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Apdebuyl+updated%3A2023-08-11..2024-09-30&type=Issues)) | @schwebke ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aschwebke+updated%3A2023-08-11..2024-09-30&type=Issues)) | @yuvipanda ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ayuvipanda+updated%3A2023-08-11..2024-09-30&type=Issues)) + ## 1.0 ### 1.0.0 - 2023-08-11 From 59fb7fb8a290828863d04ee1d468dd771f607ca5 Mon Sep 17 00:00:00 2001 From: Simon Li Date: Sat, 28 Sep 2024 15:38:32 +0100 Subject: [PATCH 13/14] Test upgrade from 1.* --- .github/workflows/integration-test.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/integration-test.yaml b/.github/workflows/integration-test.yaml index cd98ad57..88eb72ce 100644 --- a/.github/workflows/integration-test.yaml +++ b/.github/workflows/integration-test.yaml @@ -54,6 +54,9 @@ jobs: - name: "Ubuntu 22.04, Py 3.10, from 0.2.0" distro_image: "ubuntu:22.04" extra_flags: --upgrade-from=0.2.0 + - name: "Ubuntu 22.04, Py 3.10, from 1.*" + distro_image: "ubuntu:22.04" + extra_flags: --upgrade-from=1 steps: - uses: actions/checkout@v4 From 8e68745e38c726f74365ce885de79e315ec72e7e Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Mon, 30 Sep 2024 15:27:34 +0200 Subject: [PATCH 14/14] Bump to 2.0.0b1 --- pyproject.toml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index db334831..f085759b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,7 @@ omit = [ github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub" [tool.tbump.version] -current = "2.0.0.dev" +current = "2.0.0b1" regex = ''' (?P\d+) \. diff --git a/setup.py b/setup.py index 86668108..42480f8e 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="the-littlest-jupyterhub", - version="2.0.0.dev", + version="2.0.0b1", description="A small JupyterHub distribution", url="https://github.com/jupyterhub/the-littlest-jupyterhub", author="Jupyter Development Team",