37 Commits

Author SHA1 Message Date
Erik Sundell
fc8e19b1b5 Bump to 1.0.0 2023-08-11 14:46:14 +02:00
Erik Sundell
1f21e3cb26 Merge pull request #933 from consideRatio/pr/add-1.0.0-changelog
Update changelog for 1.0.0 release
2023-08-11 14:45:03 +02:00
Erik Sundell
b13f09564d docs: update changelog for 1.0.0 release 2023-08-11 14:31:41 +02:00
Min RK
c40d95c02a Merge pull request #932 from consideRatio/pr/add-upgrade-docs
docs: add docs about environments and upgrades
2023-08-11 11:46:45 +02:00
Min RK
c35a4cbe65 typo 2023-08-11 11:46:37 +02:00
Erik Sundell
fb78464dec docs: fix broken link 2023-08-10 15:19:26 +02:00
Erik Sundell
9efe59f4f7 docs: add how-to section on making upgrades 2023-08-10 15:18:25 +02:00
Erik Sundell
e14b8d8b77 docs: add section on whats done during upgrades 2023-08-10 15:17:03 +02:00
Erik Sundell
cc00bf3a1a docs: add docs on the system, hub, user environments 2023-08-10 15:16:11 +02:00
Erik Sundell
c6d86d059f docs: ensure intersphinx extension is enabled 2023-08-10 15:14:37 +02:00
Erik Sundell
4cd5da40c3 Update to jupyterhub >=4.0.2,<5 2023-08-10 15:14:09 +02:00
Erik Sundell
55db9c5d0b Merge pull request #775 from raybellwaves/patch-4
Launch into `/lab` by default by changing TLJH config's default value
2023-08-09 15:28:24 +02:00
Erik Sundell
e893959ce5 Update tests to reflect jupyterlab by default 2023-08-09 10:31:32 +02:00
Erik Sundell
5fdc31f9a9 docs: adjust docs to reflect jupyterlab as default 2023-08-09 10:28:46 +02:00
Ray Bell
a8c6c40b2b switch jhub to classic test 2023-08-09 09:40:27 +02:00
Ray Bell
854f5edd06 WIP: try default_app 2023-08-09 09:40:26 +02:00
Erik Sundell
0122a21c71 Merge pull request #922 from jrdnbradford/override-default-settings-docs
Add `JupyterLab` setting overrides docs
2023-08-09 09:30:50 +02:00
pre-commit-ci[bot]
e9de9f6042 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2023-08-09 07:28:47 +00:00
Erik Sundell
2b1b6787b8 Apply suggestions from code review 2023-08-09 09:28:37 +02:00
Erik Sundell
3a7c6f7b38 Merge pull request #929 from jupyterhub/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2023-08-09 09:23:08 +02:00
Erik Sundell
1a83791191 Merge pull request #928 from jtpio/lab4-nb7
Update Notebook, JupyterLab, Jupyter Resource Usage
2023-08-09 09:22:58 +02:00
Jeremy Tuloup
0f03f40eff Re-add nbgitpuller 2023-08-09 05:25:21 +00:00
pre-commit-ci[bot]
6801c68333 [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v3.8.0 → v3.10.1](https://github.com/asottile/pyupgrade/compare/v3.8.0...v3.10.1)
- [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0)
- [github.com/pre-commit/mirrors-prettier: v3.0.0-alpha.9-for-vscode → v3.0.0](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.0-alpha.9-for-vscode...v3.0.0)
- [github.com/pycqa/flake8: 6.0.0 → 6.1.0](https://github.com/pycqa/flake8/compare/6.0.0...6.1.0)
2023-08-01 08:36:35 +00:00
Jeremy Tuloup
2fbe803530 add missing import 2023-08-01 07:40:29 +00:00
pre-commit-ci[bot]
0da7d09298 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2023-08-01 07:39:11 +00:00
Jeremy Tuloup
91af54ade3 typo 2023-08-01 07:38:54 +00:00
Jeremy Tuloup
645251a134 update test for labextensions 2023-08-01 07:38:32 +00:00
Jeremy Tuloup
dfeddc2e53 tmp: do not check nbgitpuller 2023-08-01 07:01:58 +00:00
Jeremy Tuloup
4b13303d01 test nbgitpuller only 2023-08-01 07:01:41 +00:00
Jeremy Tuloup
ad1455e4da update jupyter server command for now 2023-08-01 06:52:56 +00:00
Jeremy Tuloup
6f38ec6a95 test for lab extensions 2023-08-01 06:43:49 +00:00
Jeremy Tuloup
b6ee97c770 do not check the lab version 2023-08-01 06:28:39 +00:00
Jeremy Tuloup
bdfabc5ce8 Update tests 2023-08-01 06:26:18 +00:00
Jeremy Tuloup
86a4bb67c8 Update Notebook, JupyterLab, Jupyter Resource Usage 2023-08-01 06:12:05 +00:00
pre-commit-ci[bot]
259d2ff11d [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2023-06-14 02:10:29 +00:00
Jordan Bradford
3753a3c775 Update heading 1 2023-06-13 22:05:55 -04:00
Jordan Bradford
bc09121677 Add JupyterLab setting overrides docs 2023-06-13 21:57:17 -04:00
18 changed files with 421 additions and 103 deletions

View File

@@ -11,7 +11,7 @@
repos: repos:
# Autoformat: Python code, syntax patterns are modernized # Autoformat: Python code, syntax patterns are modernized
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v3.8.0 rev: v3.10.1
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: args:
@@ -37,13 +37,13 @@ repos:
# Autoformat: Python code # Autoformat: Python code
- repo: https://github.com/psf/black - repo: https://github.com/psf/black
rev: 23.3.0 rev: 23.7.0
hooks: hooks:
- id: black - id: black
# Autoformat: markdown, yaml # Autoformat: markdown, yaml
- repo: https://github.com/pre-commit/mirrors-prettier - repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.0.0-alpha.9-for-vscode rev: v3.0.0
hooks: hooks:
- id: prettier - id: prettier
@@ -64,7 +64,7 @@ repos:
# Lint: Python code # Lint: Python code
- repo: https://github.com/pycqa/flake8 - repo: https://github.com/pycqa/flake8
rev: "6.0.0" rev: "6.1.0"
hooks: hooks:
- id: flake8 - id: flake8

View File

@@ -20,6 +20,7 @@ author = "Project Jupyter Contributors"
# #
extensions = [ extensions = [
"sphinx_copybutton", "sphinx_copybutton",
"sphinx.ext.intersphinx",
"sphinxext.opengraph", "sphinxext.opengraph",
"sphinxext.rediraffe", "sphinxext.rediraffe",
"myst_parser", "myst_parser",
@@ -74,6 +75,32 @@ myst_enable_extensions = [
"fieldlist", "fieldlist",
] ]
# -- Options for intersphinx extension ---------------------------------------
# ref: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration
#
# The extension makes us able to link like to other projects like below.
#
# rST - :external:py:class:`jupyterhub.spawner.Spawner`
# MyST - {external:py:class}`jupyterhub.spawner.Spawner`
#
# rST - :external:py:attribute:`jupyterhub.spawner.Spawner.default_url`
# MyST - {external:py:attribute}`jupyterhub.spawner.Spawner.default_url`
#
# To see what we can link to, do the following where "objects.inv" is appended
# to the sphinx based website:
#
# python -m sphinx.ext.intersphinx https://jupyterhub.readthedocs.io/en/stable/objects.inv
#
intersphinx_mapping = {
"jupyterhub": ("https://jupyterhub.readthedocs.io/en/stable/", None),
}
# intersphinx_disabled_reftypes set based on recommendation in
# https://docs.readthedocs.io/en/stable/guides/intersphinx.html#using-intersphinx
intersphinx_disabled_reftypes = ["*"]
# -- Options for linkcheck builder ------------------------------------------- # -- Options for linkcheck builder -------------------------------------------
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder # ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
# #

View File

@@ -0,0 +1,64 @@
(howto-admin-upgrade-tljh)=
# Upgrade TLJH
A TLJH installation is supposed to be upgradable to get updates to JupyterHub
itself and its dependencies in the [hub environment](hub-environment). For
details on what is done during an upgrade, see
[](topic-installer-upgrade-actions).
## Step 1: Read the changelog
Before making an upgrade, please read the [](changelog) to become aware about
breaking changes. If there are breaking changes, you may need to update your
configuration files or take other actions as well as part of the upgrade.
Adjusting to the breaking changes isn't part of this documentation, please rely
on the TLJH changelog and the changelogs of related projects linked to from the
TLJH changelog.
## Step 2: Consider making a backup
Before making an upgrade, consider if you want to first make a backup in some
way. While upgrades between TLJH versions are tested with automation, there are
no guarantees.
This project does't yet provide documentation on how to make backups, but if
TLJH is installed on a virtual machine in a cloud, a good option is to try
create a snapshot of the associated disk. If this isn't an option, you could
consider making a backup of the files in `/opt/tljh` that contain most but not
all things during an upgrade, or perhaps only the JupyterHub database with
information about its users in `/opt/tljh/state` together with some other
details.
## Step 3: Make the upgrade
To initialize the upgrade, do the following from a terminal on the machine where
TLJH is installed.
```shell
# IMPORTANT: This should NOT be run from a JupyterHub started user server, but
# should only run from a standalone terminal session in the machine
# where TLJH has been installed.
#
curl -L https://tljh.jupyter.org/bootstrap.py \
| sudo python3 - \
--version=latest
```
You can also upgrade to specific version by changing `--version=latest` to
`--version=1.0.0` or similar. There is no need to specify admin users etc again.
## Step 4: Verify function
After having made an upgrade its always good to verify that the JupyterHub
installation still works as expected. You may want to try logging out, logging
in, and starting a new server for example.
If you have issues consider the [](troubleshooting) documentation. If you need
help you can ask questions in [Jupyter forum], and if you think there is a bug
or documentation improvement that should be made you can open an issue or pull
request in the [TLJH GitHub project].
[jupyter forum]: https://discourse.jupyter.org/c/jupyterhub/tljh
[tljh github project]: https://github.com/jupyterhub/the-littlest-jupyterhub

View File

@@ -22,6 +22,7 @@ content/share-data
user-env/user-environment user-env/user-environment
user-env/notebook-interfaces user-env/notebook-interfaces
user-env/server-resources user-env/server-resources
user-env/override-lab-settings
``` ```
## Authentication ## Authentication
@@ -55,6 +56,7 @@ admin/nbresuse
admin/https admin/https
admin/enable-extensions admin/enable-extensions
admin/systemd admin/systemd
admin/upgrade-tljh
``` ```
## Cloud provider configuration ## Cloud provider configuration

View File

@@ -1,49 +1,47 @@
(howto/user-env/notebook-interfaces)= (howto/user-env/notebook-interfaces)=
# Change default User Interface # Change default user interface
By default, logging into TLJH puts you in the classic Jupyter Notebook By default a user starting a server will see the JupyterLab interface. This can
interface we all know and love. However, there are at least two other be changed with TLJH config `user_environment.default_app` or with the
popular notebook interfaces you can use: JupyterHub config
{external:py:attr}`jupyterhub.spawner.Spawner.default_url` directly.
1. [JupyterLab](http://jupyterlab.readthedocs.io/en/stable/) The TLJH config supports the options `jupyterlab` and `classic`, which
2. [nteract](https://nteract.io/) translates to a `Spawner.default_url` config of `/lab` and `/tree`.
Both these interfaces are also shipped with TLJH by default. You can try Both these interfaces are also shipped with TLJH by default. You can try them
them temporarily, or set them to be the default interface whenever you temporarily, or set them to be the default interface whenever you login.
login.
## Trying an alternate interface temporarily ## Trying an alternate interface temporarily
When you log in & start your server, by default the URL in your browser When you log in and start your server, by default the URL in your browser will
will be something like `/user/<username>/tree`. The `/tree` is what be something like `/user/<username>/lab`. The `/lab` is what tells the jupyter
tells the notebook server to give you the classic notebook interface. server to give you the JupyterLab user interface.
- **For the JupyterLab interface**: change `/tree` to `/lab`. As an example, you can update the URL to not end with `/lab`, but instead end
- **For the nteract interface**: change `/tree` to `/nteract` with `/tree` to temporarily switch to the classic interface.
You can play around with them and see what fits your use cases best. ## Changing the default user interface using TLJH config
## Changing the default user interface You can change the default url, and therefore the interface users get when they
log in by modifying TLJH config as an admin user.
You can change the default interface users get when they log in by 1. To launch the classic notebook interface when users log in, run the
modifying `config.yaml` as an admin user. following in the admin console:
1. To launch **JupyterLab** when users log in, run the following in an ```bash
admin console: sudo tljh-config set user_environment.default_app classic
```
1. To launch JupyterLab when users log in, run the following in an admin
console:
```bash ```bash
sudo tljh-config set user_environment.default_app jupyterlab sudo tljh-config set user_environment.default_app jupyterlab
``` ```
2. Alternatively, to launch **nteract** when users log in, run the 1. Apply the changes by restarting JupyterHub. This should not disrupt
following in the admin console:
```bash
sudo tljh-config set user_environment.default_app nteract
```
3. Apply the changes by restarting JupyterHub. This should not disrupt
current users. current users.
```bash ```bash

View File

@@ -0,0 +1,121 @@
(topic-override-lab-settings)=
# Setting New Default JupyterLab Settings
If you or other users of your hub tend to use JupyterLab as your default notebook app,
then you may want to override some of the default settings for the users of your hub.
You can do this by creating a file `/opt/tljh/user/share/jupyter/lab/settings/overrides.json`
with the necessary settings.
This how-to guide will go through the necessary steps to set new defaults
for all users of your `TLJH` by example: setting the default theme to **JupyterLab Dark**.
## Step 1: Change your Personal Settings
The easiest way to set new default settings for all users starts with
configuring your own settings preferences to what you would like everyone else to have.
1. Make sure you are in the [JupyterLab notebook interface](#howto/user-env/notebook-interfaces),
which will look something like `http(s)://<YOUR-HUB-IP>/user/<YOUR_USERNAME/lab`.
1. Go to **Settings** in the menu bar and select **Theme -> JupyterLab Dark**.
## Step 2: Determine your Personal Settings Configuration
To set **JupyterLab Dark** as the default theme for all users, we will need to create
a `json` formatted file with the setting override. Now that you have changed your
personal setting, you can use the **JSON Settings Editor** to get the relevant
setting snippet to add to the `overrides.json` file later.
1. Go to **Settings -> Advanced Settings Editor** then select **JSON Settings Editor** on the right.
1. Scroll down and select **Theme**. You should see the `json` formatted configuration:
```json
{
// Theme
// @jupyterlab/apputils-extension:themes
// Theme manager settings.
// *************************************
// Theme CSS Overrides
// Override theme CSS variables by setting key-value pairs here
"overrides": {
"code-font-family": null,
"code-font-size": null,
"content-font-family": null,
"content-font-size1": null,
"ui-font-family": null,
"ui-font-size1": null
},
// Selected Theme
// Application-level visual styling theme
"theme": "JupyterLab Dark",
// Scrollbar Theming
// Enable/disable styling of the application scrollbars
"theme-scrollbars": false
}
```
1. Determine the setting that you want to change. In this example it's the `theme`
setting of `@jupyterlab/apputils-extension:theme` as can be seen above.
1. Build your `json` snippet. In this case, our snippet should look like this:
```json
{
"@jupyterlab/apputils-extension:themes": {
"theme": "JupyterLab Dark"
}
}
```
We only want to change the **Selected Theme**, so we don't need to include
the other theme-related settings for CSS and the scrollbar.
:::{note}
To apply overrides for more than one setting, separate each setting by commas. For example,
if you _also_ wanted to change the interval at which the notebook autosaves your content, you can use
```json
{
"@jupyterlab/apputils-extension:themes": {
"theme": "JupyterLab Dark"
},
"@jupyterlab/docmanager-extension:plugin": {
"autosaveInterval": 30
}
}
```
:::
## Step 3: Apply the Overrides to the Hub
Once you have your setting snippet created, you can add it to the `overrides.json` file
so that it gets applied to all users.
1. First, create the settings directory if it doesn't already exist:
```bash
sudo mkdir -p /opt/tljh/user/share/jupyter/lab/settings
```
1. Use `nano` to create and add content to the `overrides.json` file:
```bash
sudo nano /opt/tljh/user/share/jupyter/lab/settings/overrides.json
```
1. Copy and paste your snippet into the file and save.
1. Reload your configuration:
```bash
sudo tljh-config reload
```
The new default settings should now be set for all users in your `TLJH` using the
JupyterLab notebook interface.

View File

@@ -1,24 +1,10 @@
(changelog)=
# Changelog # Changelog
## 1.0 ## 1.0
### 1.0.0b1 - 2023-07-07 ### 1.0.0 - 2023-08-11
````{warning}
This is a beta release.
To upgrade to it, after having read the breaking changes below, you can do the
following from a terminal on a machine TLJH is installed.
```shell
# This should NOT be run from a JupyterHub started user server, but should
# run from a standalone terminal session in the machine where TLJH has been
# installed.
curl -L https://tljh.jupyter.org/bootstrap.py \
| sudo python3 - \
--version=1.0.0b1
```
````
This release bundles with the latest available software from the JupyterHub This release bundles with the latest available software from the JupyterHub
ecosystem. ecosystem.
@@ -27,9 +13,11 @@ The TLJH project now has tests to verify upgrades of installations between
releases and procedures with automation to make releases. Going onwards, TLJH releases and procedures with automation to make releases. Going onwards, TLJH
installations of version 0.2.0 and later are meant to be easy to upgrade. installations of version 0.2.0 and later are meant to be easy to upgrade.
For instructions on how to make an upgrade, see [](howto-admin-upgrade-tljh).
#### Breaking changes #### Breaking changes
- JupyterHub 1.\* has been upgraded to >=4.0.1,<5 - JupyterHub 1.\* has been upgraded to >=4.0.2,<5
- This upgrade requires user servers to be restarted if they were running - This upgrade requires user servers to be restarted if they were running
during the upgrade. during the upgrade.
- Refer to the [JupyterHub changelog] for details where you pay attention to - Refer to the [JupyterHub changelog] for details where you pay attention to
@@ -44,6 +32,9 @@ installations of version 0.2.0 and later are meant to be easy to upgrade.
- The configured JupyterHub Spawner class `jupyterhub-systemdspawner` has been - The configured JupyterHub Spawner class `jupyterhub-systemdspawner` has been
upgraded to a new major version, but no breaking change are expected to be upgraded to a new major version, but no breaking change are expected to be
noticed for users of this distribution. noticed for users of this distribution.
- User servers now launch into `/lab` by default, to revert this a JupyterHub
admin user can do `sudo tljh-config set user_environment.default_app classic`
or set the JupyterHub config `c.Spawner.default_url` directly.
[jupyterhub changelog]: https://jupyterhub.readthedocs.io/en/stable/changelog.html [jupyterhub changelog]: https://jupyterhub.readthedocs.io/en/stable/changelog.html
@@ -62,15 +53,15 @@ user environment. The hub environment's dependencies are on the other hand
always upgraded to the latest version within the specified version range defined always upgraded to the latest version within the specified version range defined
in [tljh/requirements-hub-env.txt] and seen below. in [tljh/requirements-hub-env.txt] and seen below.
[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0b1/tljh/requirements-user-env-extras.txt [tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0/tljh/requirements-user-env-extras.txt
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0b1/tljh/requirements-hub-env.txt [tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0/tljh/requirements-hub-env.txt
The changes in the respective environments between TLJH version 0.2.0 and The changes in the respective environments between TLJH version 0.2.0 and 1.0.0
1.0.0b1 are summarized below. are summarized below.
| Dependency changes in the _hub environment_ | Version in 0.2.0 | Version in 1.0.0b1 | Changelog link | Note | | Dependency changes in the _hub environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note |
| ------------------------------------------------------------------------------ | ---------------- | ------------------ | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | | ------------------------------------------------------------------------------ | ---------------- | ---------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.1,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Running in the `jupyterhub` systemd service | | [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.2,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Running in the `jupyterhub` systemd service |
| [traefik](https://github.com/traefik/traefik) | 1.7.33 | 2.10.1 | [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md) | Running in the `traefik` systemd service | | [traefik](https://github.com/traefik/traefik) | 1.7.33 | 2.10.1 | [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md) | Running in the `traefik` systemd service |
| [traefik-proxy](https://github.com/jupyterhub/traefik-proxy) | 0.3.\* | >=1.1.0,<2 | [Changelog](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/changelog.html) | Run by jupyterhub, controls `traefik` | | [traefik-proxy](https://github.com/jupyterhub/traefik-proxy) | 0.3.\* | >=1.1.0,<2 | [Changelog](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/changelog.html) | Run by jupyterhub, controls `traefik` |
| [systemdspawner](https://github.com/jupyterhub/systemdspawner) | 0.16.\* | >=1.0.1,<2 | [Changelog](https://github.com/jupyterhub/systemdspawner/blob/master/CHANGELOG.md) | Run by jupyterhub, controls user servers via systemd | | [systemdspawner](https://github.com/jupyterhub/systemdspawner) | 0.16.\* | >=1.0.1,<2 | [Changelog](https://github.com/jupyterhub/systemdspawner/blob/master/CHANGELOG.md) | Run by jupyterhub, controls user servers via systemd |
@@ -78,13 +69,13 @@ The changes in the respective environments between TLJH version 0.2.0 and
| [firstuseauthenticator](https://github.com/jupyterhub/firstuseauthenticator) | 1.\* | >=1.0.0,<2 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users | | [firstuseauthenticator](https://github.com/jupyterhub/firstuseauthenticator) | 1.\* | >=1.0.0,<2 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
| [tmpauthenticator](https://github.com/jupyterhub/tmpauthenticator) | 0.6.\* | >=1.0.0,<2 | [Changelog](https://github.com/jupyterhub/tmpauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | | [tmpauthenticator](https://github.com/jupyterhub/tmpauthenticator) | 0.6.\* | >=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.\* | >=1.2.0,<2 | [Changelog](https://github.com/jupyterhub/nativeauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | | [nativeauthenticator](https://github.com/jupyterhub/nativeauthenticator) | 1.\* | >=1.2.0,<2 | [Changelog](https://github.com/jupyterhub/nativeauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
| [oauthenticator](https://github.com/jupyterhub/oauthenticator) | 14.\* | >=16.0.2,<17 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users | | [oauthenticator](https://github.com/jupyterhub/oauthenticator) | 14.\* | >=16.0.4,<17 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
| [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) | 1.\* | >=1.3.2,<2 | [Changelog](https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users | | [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) | 1.\* | >=1.3.2,<2 | [Changelog](https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
| [pip](https://github.com/pypa/pip) | 21.3.\* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | - | | [pip](https://github.com/pypa/pip) | 21.3.\* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | - |
| Dependency changes in the _user environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note | | Dependency changes in the _user environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note |
| -------------------------------------------------------- | ---------------- | ---------------- | --------------------------------------------------------------------------------- | ------------------------ | | -------------------------------------------------------- | ---------------- | ---------------- | --------------------------------------------------------------------------------- | ------------------------ |
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.1,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Always upgraded. | | [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.2,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Always upgraded. |
| [pip](https://github.com/pypa/pip) | \* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | Only upgraded if needed. | | [pip](https://github.com/pypa/pip) | \* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | Only upgraded if needed. |
| [conda](https://docs.conda.io/projects/conda/en/stable/) | 0.16.0 | >=0.16.0 | [Changelog](https://docs.conda.io/projects/conda/en/stable/release-notes.html) | Only upgraded if needed. | | [conda](https://docs.conda.io/projects/conda/en/stable/) | 0.16.0 | >=0.16.0 | [Changelog](https://docs.conda.io/projects/conda/en/stable/release-notes.html) | Only upgraded if needed. |
| [mamba](https://mamba.readthedocs.io/en/latest/) | 4.10.3 | >=4.10.0 | [Changelog](https://github.com/mamba-org/mamba/blob/main/CHANGELOG.md) | Only upgraded if needed. | | [mamba](https://mamba.readthedocs.io/en/latest/) | 4.10.3 | >=4.10.0 | [Changelog](https://github.com/mamba-org/mamba/blob/main/CHANGELOG.md) | Only upgraded if needed. |
@@ -101,6 +92,8 @@ The changes in the respective environments between TLJH version 0.2.0 and
#### Maintenance and upkeep improvements #### Maintenance and upkeep improvements
- Update Notebook, JupyterLab, Jupyter Resource Usage [#928](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/928) ([@jtpio](https://github.com/jtpio), [@consideRatio](https://github.com/consideRatio))
- Launch into `/lab` by default by changing TLJH config's default value [#775](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/775) ([@raybellwaves](https://github.com/raybellwaves), [@consideRatio](https://github.com/consideRatio), [@GeorgianaElena](https://github.com/GeorgianaElena), [@minrk](https://github.com/minrk), [@manics](https://github.com/manics))
- breaking: update oauthenticator from 15.1.0 to >=16.0.2,<17, make tljh auth docs link out [#924](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/924) ([@consideRatio](https://github.com/consideRatio), [@manics](https://github.com/manics), [@minrk](https://github.com/minrk)) - breaking: update oauthenticator from 15.1.0 to >=16.0.2,<17, make tljh auth docs link out [#924](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/924) ([@consideRatio](https://github.com/consideRatio), [@manics](https://github.com/manics), [@minrk](https://github.com/minrk))
- test refactor: add comment about python/conda/mamba [#921](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/921) ([@consideRatio](https://github.com/consideRatio)) - test refactor: add comment about python/conda/mamba [#921](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/921) ([@consideRatio](https://github.com/consideRatio))
- --force-reinstall old conda to ensure it's working before we try to install conda packages [#920](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/920) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio)) - --force-reinstall old conda to ensure it's working before we try to install conda packages [#920](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/920) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio))
@@ -129,6 +122,8 @@ The changes in the respective environments between TLJH version 0.2.0 and
#### Documentation improvements #### Documentation improvements
- docs: add docs about environments and upgrades [#932](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/932) ([@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk))
- Add `JupyterLab` setting overrides docs [#922](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/922) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
- Quote `pwd` to prevent error if dir has spaces [#917](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/917) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio)) - Quote `pwd` to prevent error if dir has spaces [#917](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/917) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
- Google Cloud troubleshooting and configuration updates [#906](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/906) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio)) - Google Cloud troubleshooting and configuration updates [#906](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/906) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
- Add user env doc files [#902](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/902) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio)) - Add user env doc files [#902](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/902) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
@@ -148,9 +143,9 @@ The changes in the respective environments between TLJH version 0.2.0 and
The following people contributed discussions, new ideas, code and documentation contributions, and review. 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). 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-02-27&to=2023-06-09&type=c)) ([GitHub contributors page for this release](https://github.com/jupyterhub/the-littlest-jupyterhub/graphs/contributors?from=2023-02-27&to=2023-08-11&type=c))
@adonm ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aadonm+updated%3A2023-02-27..2023-06-09&type=Issues)) | @audiodude ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aaudiodude+updated%3A2023-02-27..2023-06-09&type=Issues)) | @consideRatio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AconsideRatio+updated%3A2023-02-27..2023-06-09&type=Issues)) | @eingemaischt ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aeingemaischt+updated%3A2023-02-27..2023-06-09&type=Issues)) | @GeorgianaElena ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AGeorgianaElena+updated%3A2023-02-27..2023-06-09&type=Issues)) | @Hannnsen ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AHannnsen+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jawiv ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajawiv+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jochym ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajochym+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jrdnbradford ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajrdnbradford+updated%3A2023-02-27..2023-06-09&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Amanics+updated%3A2023-02-27..2023-06-09&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aminrk+updated%3A2023-02-27..2023-06-09&type=Issues)) | @MridulS ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AMridulS+updated%3A2023-02-27..2023-06-09&type=Issues)) | @nsurleraux-railnova ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ansurleraux-railnova+updated%3A2023-02-27..2023-06-09&type=Issues)) | @Rom1deTroyes ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3ARom1deTroyes+updated%3A2023-02-27..2023-06-09&type=Issues)) | @wjcapehart ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Awjcapehart+updated%3A2023-02-27..2023-06-09&type=Issues)) | @yuvipanda ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ayuvipanda+updated%3A2023-02-27..2023-06-09&type=Issues)) @adonm ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aadonm+updated%3A2023-02-27..2023-08-11&type=Issues)) | @audiodude ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aaudiodude+updated%3A2023-02-27..2023-08-11&type=Issues)) | @choldgraf ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Acholdgraf+updated%3A2023-02-27..2023-08-11&type=Issues)) | @consideRatio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AconsideRatio+updated%3A2023-02-27..2023-08-11&type=Issues)) | @eingemaischt ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aeingemaischt+updated%3A2023-02-27..2023-08-11&type=Issues)) | @GeorgianaElena ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AGeorgianaElena+updated%3A2023-02-27..2023-08-11&type=Issues)) | @Hannnsen ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AHannnsen+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jawiv ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajawiv+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jochym ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajochym+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jrdnbradford ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajrdnbradford+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jtpio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajtpio+updated%3A2023-02-27..2023-08-11&type=Issues)) | @kevmk04 ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Akevmk04+updated%3A2023-02-27..2023-08-11&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Amanics+updated%3A2023-02-27..2023-08-11&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aminrk+updated%3A2023-02-27..2023-08-11&type=Issues)) | @MridulS ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AMridulS+updated%3A2023-02-27..2023-08-11&type=Issues)) | @nsurleraux-railnova ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ansurleraux-railnova+updated%3A2023-02-27..2023-08-11&type=Issues)) | @raybellwaves ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Araybellwaves+updated%3A2023-02-27..2023-08-11&type=Issues)) | @Rom1deTroyes ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3ARom1deTroyes+updated%3A2023-02-27..2023-08-11&type=Issues)) | @wjcapehart ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Awjcapehart+updated%3A2023-02-27..2023-08-11&type=Issues)) | @yuvipanda ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ayuvipanda+updated%3A2023-02-27..2023-08-11&type=Issues))
## 0.2.0 ## 0.2.0

View File

@@ -8,9 +8,11 @@ Topic guides provide in-depth explanations of specific topics.
whentouse whentouse
requirements requirements
three-environments
security security
customizing-installer customizing-installer
installer-actions installer-actions
installer-upgrade-actions
tljh-config tljh-config
authenticator-configuration authenticator-configuration
escape-hatch escape-hatch

View File

@@ -0,0 +1,30 @@
(topic-installer-upgrade-actions)=
# What is done during an upgrade of TLJH?
Once TLJH has been installed, it should be possible to upgrade the installation.
This documentation is meant to capture the changes made during an upgrade.
```{versionchanged} 1.0.0
Ensuring upgrades work has only been done since 1.0.0 upgrading from version
0.2.0.
```
## Changes to the system environment
The [system environment](system-environment) is not meant to be influenced
unless explicitly mentioned in the changelog, typically only during major
version upgrades.
## Changes to the hub environment
The [hub environment](hub-environment) gets several packages upgraded based on
version ranges specified in [tljh/requirements-hub-env.txt].
## Changes to the user environment
The [user environment](user-environment) gets is `jupyterhub` package upgraded,
but no other packages gets upgraded unless explicitly mentioned in the
changelog, typically only during major version upgrades.
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-hub-env.txt

View File

@@ -0,0 +1,76 @@
(topic-three-environments)=
# The system, hub, and user environments
TLJH's documentation mentions the _system environment_, the _hub environment_,
and the _user environment_. This section will introduce what is meant with that
and clarify the distinctions between the environments.
(system-environment)=
## The system environment
When this documentation mentions the _system environment_, it refers to the
Linux environment with its installed `apt` packages, users in `/etc/passwd`,
etc.
A part of the system environment is a Python environment setup via the `apt`
package `python` installed by default in Linux distributions supported by TLJH.
To be specific, we can refer to this as the _system's Python environment_.
If you would do `sudo python3 -m pip install <something>` you would end up
installing something in the system's Python environment, and that would not be
available in the hub environment or the user environment.
The system's Python environment is only used by TLJH to run the `bootstrap.py`
script downloaded as part of installing or upgrading TLJH. This script is also
responsible for setting up the hub environment.
(hub-environment)=
## The hub environment
The _hub environment_ is a [virtual Python environment] setup in `/opt/tljh/hub`
by the `bootstrap.py` script using the system's Python environment during TLJH
installation.
The hub environment has Python packages installed in it related to running
JupyterHub itself such as an JupyterHub authenticator package, but it doesn't
include packages to start user servers like JupyterLab.
When TLJH is installed/upgraded, the packages listed in
[tljh/requirements-hub-env.txt] are installed/upgraded in this environment.
If you would do `sudo /opt/tljh/hub/bin/python3 -m pip install <something>` you
would end up installing something in the hub environment, and that would not be
available in the system's Python environment or the user environment.
[virtual Python environment]: https://docs.python.org/3/library/venv.html
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-hub-env.txt
(user-environment)=
## The user environment
The _user environment_ is a Python environment setup in `/opt/tljh/user` by the
TLJH installer during TLJH installation. The user environment is not a virtual
environment because an entirely separate installation of Python has been made
for it.
The user environment has packages installed in it related to running individual
jupyter servers, such as `jupyterlab`.
When TLJH is _installed_, the packages listed in
[tljh/requirements-user-env.txt] are installed in this environment. When TLJH is
_upgraded_ though, as little as possible is done to this environment. Typically
only `jupyterhub` is upgraded to match the version in the hub environment. If
upgrading to a new major version of TLJH, then something small may be done
besides this, and then it should be described the changelog.
If you would do `sudo /opt/tljh/user/bin/python3 -m pip install <something>`, or
from a user server's terminal do `sudo -E pip install <something>` you would end
up installing something in the user environment, and that would not be available
in the system's Python environment or the hub environment.
[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-user-env-extras.txt

View File

@@ -1,3 +1,5 @@
(troubleshooting)=
# Troubleshooting # Troubleshooting
In time, all systems have issues that need to be debugged. Troubleshooting In time, all systems have issues that need to be debugged. Troubleshooting

View File

@@ -1,3 +1,4 @@
import re
import subprocess import subprocess
@@ -7,13 +8,13 @@ def test_serverextensions():
""" """
# jupyter-serverextension writes to stdout and stderr weirdly # jupyter-serverextension writes to stdout and stderr weirdly
proc = subprocess.run( proc = subprocess.run(
["/opt/tljh/user/bin/jupyter-serverextension", "list", "--sys-prefix"], ["/opt/tljh/user/bin/jupyter-server", "extension", "list", "--sys-prefix"],
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
) )
extensions = [ extensions = [
"jupyterlab 3.", "jupyterlab",
"nbgitpuller 1.", "nbgitpuller",
"jupyter_resource_usage", "jupyter_resource_usage",
] ]
@@ -21,27 +22,26 @@ def test_serverextensions():
assert e in proc.stderr.decode() assert e in proc.stderr.decode()
def test_nbextensions(): def test_labextensions():
""" """
Validate nbextensions we want are installed & enabled Validate JupyterLab extensions we want are installed & enabled
""" """
# jupyter-nbextension writes to stdout and stderr weirdly # jupyter-labextension writes to stdout and stderr weirdly
proc = subprocess.run( proc = subprocess.run(
["/opt/tljh/user/bin/jupyter-nbextension", "list", "--sys-prefix"], ["/opt/tljh/user/bin/jupyter-labextension", "list"],
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
) )
extensions = [ extensions = [
"jupyter_resource_usage/main", "@jupyter-server/resource-usage",
# This is what ipywidgets nbextension is called # This is what ipywidgets lab extension is called
"jupyter-js-widgets/extension", "@jupyter-widgets/jupyterlab-manager",
] ]
for e in extensions: for e in extensions:
assert f"{e} \x1b[32m enabled \x1b[0m" in proc.stdout.decode() # jupyter labextension lists outputs to stderr
out = proc.stderr.decode()
# Ensure we have 'OK' messages in our stdout, to make sure everything is importable enabled_ok_pattern = re.compile(rf"{e}.*enabled.*OK")
assert proc.stderr.decode() == " - Validating: \x1b[32mOK\x1b[0m\n" * len( matches = enabled_ok_pattern.search(out)
extensions assert matches is not None
)

View File

@@ -67,7 +67,7 @@ omit = [
github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub" github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub"
[tool.tbump.version] [tool.tbump.version]
current = "1.0.0b1" current = "1.0.0"
regex = ''' regex = '''
(?P<major>\d+) (?P<major>\d+)
\. \.

View File

@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
setup( setup(
name="the-littlest-jupyterhub", name="the-littlest-jupyterhub",
version="1.0.0b1", version="1.0.0",
description="A small JupyterHub distribution", description="A small JupyterHub distribution",
url="https://github.com/jupyterhub/the-littlest-jupyterhub", url="https://github.com/jupyterhub/the-littlest-jupyterhub",
author="Jupyter Development Team", author="Jupyter Development Team",

View File

@@ -58,18 +58,17 @@ def test_app_default():
Test default application with no config overrides. Test default application with no config overrides.
""" """
c = apply_mock_config({}) c = apply_mock_config({})
# default_url is not set, so JupyterHub will pick default.
assert "default_url" not in c.Spawner
def test_app_jupyterlab():
"""
Test setting JupyterLab as default application
"""
c = apply_mock_config({"user_environment": {"default_app": "jupyterlab"}})
assert c.Spawner.default_url == "/lab" assert c.Spawner.default_url == "/lab"
def test_app_classic():
"""
Test setting classic as default application
"""
c = apply_mock_config({"user_environment": {"default_app": "classic"}})
assert c.Spawner.default_url == "/tree"
def test_auth_default(): def test_auth_default():
""" """
Test default authentication settings with no overrides Test default authentication settings with no overrides

View File

@@ -52,7 +52,7 @@ default = {
"password": "", "password": "",
}, },
"user_environment": { "user_environment": {
"default_app": "classic", "default_app": "jupyterlab",
}, },
"services": { "services": {
"cull": { "cull": {
@@ -231,6 +231,8 @@ def update_user_environment(c, config):
# Set default application users are launched into # Set default application users are launched into
if user_env["default_app"] == "jupyterlab": if user_env["default_app"] == "jupyterlab":
c.Spawner.default_url = "/lab" c.Spawner.default_url = "/lab"
elif user_env["default_app"] == "classic":
c.Spawner.default_url = "/tree"
def update_user_account_config(c, config): def update_user_account_config(c, config):

View File

@@ -8,13 +8,13 @@
# If a dependency is bumped to a new major version, we should make a major # If a dependency is bumped to a new major version, we should make a major
# version release of tljh. # version release of tljh.
# #
jupyterhub>=4.0.1,<5 jupyterhub>=4.0.2,<5
jupyterhub-systemdspawner>=1.0.1,<2 jupyterhub-systemdspawner>=1.0.1,<2
jupyterhub-firstuseauthenticator>=1.0.0,<2 jupyterhub-firstuseauthenticator>=1.0.0,<2
jupyterhub-nativeauthenticator>=1.2.0,<2 jupyterhub-nativeauthenticator>=1.2.0,<2
jupyterhub-ldapauthenticator>=1.3.2,<2 jupyterhub-ldapauthenticator>=1.3.2,<2
jupyterhub-tmpauthenticator>=1.0.0,<2 jupyterhub-tmpauthenticator>=1.0.0,<2
oauthenticator>=16.0.2,<17 oauthenticator>=16.0.4,<17
jupyterhub-idle-culler>=1.2.1,<2 jupyterhub-idle-culler>=1.2.1,<2
# pycurl is installed to improve reliability and performance for when JupyterHub # pycurl is installed to improve reliability and performance for when JupyterHub

View File

@@ -8,11 +8,11 @@
# the requirements-txt-fixer pre-commit hook that sorted them and made # the requirements-txt-fixer pre-commit hook that sorted them and made
# our integration tests fail. # our integration tests fail.
# #
notebook==6.* notebook==7.*
jupyterlab==3.* jupyterlab==4.*
# nbgitpuller for easily pulling in Git repositories # nbgitpuller for easily pulling in Git repositories
nbgitpuller==1.* nbgitpuller==1.*
# jupyter-resource-usage to show people how much RAM they are using # jupyter-resource-usage to show people how much RAM they are using
jupyter-resource-usage==0.7.* jupyter-resource-usage==1.*
# Most people consider ipywidgets to be part of the core notebook experience # Most people consider ipywidgets to be part of the core notebook experience
ipywidgets==8.* ipywidgets==8.*