diff options
author | Alexander Smolyakov <v-asmoliakov@microsoft.com> | 2023-09-27 21:51:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-27 21:51:26 +0300 |
commit | 0d2fc3ad5b9d6bb33a29891c2378a377f0618c9b (patch) | |
tree | d955fe79da7e1038a78bfe826c10baa82570dcd6 | |
parent | e7f7d194d634e86b29ed2b74a35dd3c24fa1f7a5 (diff) |
[python] Change the `sudo_if` function to avoid issues with Bash (#694)feature_python_1.2.0
* [python] Updated `sudo_if` function
- Remove double quotes to avoid issues with string tokenization
* Add test scenario
* Revert "Add test scenario"
This reverts commit 9e62a3797a8f5eddf5c24a6b5fd30bd2c4be8c54.
* Update `jupyterlab git` package name
* Bump feature version
* Test: Install jupyterlab under root user
* Refactor changes
* Bump patch version
* Address review points
-rw-r--r-- | src/python/devcontainer-feature.json | 2 | ||||
-rwxr-xr-x | src/python/install.sh | 39 | ||||
-rwxr-xr-x | test/python/install_additional_jupyterlab.sh | 2 | ||||
-rwxr-xr-x | test/python/install_jupyterlab.sh | 2 | ||||
-rw-r--r-- | test/python/install_jupyterlab_debian.sh | 22 | ||||
-rw-r--r-- | test/python/install_jupyterlab_ubuntu.sh | 22 | ||||
-rw-r--r-- | test/python/scenarios.json | 22 |
7 files changed, 97 insertions, 14 deletions
diff --git a/src/python/devcontainer-feature.json b/src/python/devcontainer-feature.json index b4aa21e..638fa60 100644 --- a/src/python/devcontainer-feature.json +++ b/src/python/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "python", - "version": "1.1.0", + "version": "1.2.0", "name": "Python", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/python", "description": "Installs the provided version of Python, as well as PIPX, and other common Python utilities. JupyterLab is conditionally installed with the python feature. Note: May require source code compilation.", diff --git a/src/python/install.sh b/src/python/install.sh index 0e2b125..7be5eea 100755 --- a/src/python/install.sh +++ b/src/python/install.sh @@ -304,25 +304,31 @@ sudo_if() { if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then su - "$USERNAME" -c "$COMMAND" else - "$COMMAND" + $COMMAND fi } install_user_package() { - PACKAGE="$1" - sudo_if "${PYTHON_SRC}" -m pip install --user --upgrade --no-cache-dir "$PACKAGE" + INSTALL_UNDER_ROOT="$1" + PACKAGE="$2" + + if [ "$INSTALL_UNDER_ROOT" = true ]; then + sudo_if "${PYTHON_SRC}" -m pip install --upgrade --no-cache-dir "$PACKAGE" + else + sudo_if "${PYTHON_SRC}" -m pip install --user --upgrade --no-cache-dir "$PACKAGE" + fi } add_user_jupyter_config() { - CONFIG_DIR="/home/$USERNAME/.jupyter" - CONFIG_FILE="$CONFIG_DIR/jupyter_server_config.py" + CONFIG_DIR="$1" + CONFIG_FILE="$2" # Make sure the config file exists or create it with proper permissions test -d "$CONFIG_DIR" || sudo_if mkdir "$CONFIG_DIR" test -f "$CONFIG_FILE" || sudo_if touch "$CONFIG_FILE" # Don't write the same config more than once - grep -q "$1" "$CONFIG_FILE" || echo "$1" >> "$CONFIG_FILE" + grep -q "$3" "$CONFIG_FILE" || echo "$3" >> "$CONFIG_FILE" } install_python() { @@ -461,13 +467,26 @@ if [ "${INSTALL_JUPYTERLAB}" = "true" ]; then exit 1 fi - install_user_package jupyterlab - install_user_package jupyterlab-git + INSTALL_UNDER_ROOT=true + if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then + INSTALL_UNDER_ROOT=false + fi + + install_user_package $INSTALL_UNDER_ROOT jupyterlab + install_user_package $INSTALL_UNDER_ROOT jupyterlab-git # Configure JupyterLab if needed if [ -n "${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}" ]; then - add_user_jupyter_config "c.ServerApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" - add_user_jupyter_config "c.NotebookApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" + # Resolve config directory + CONFIG_DIR="/root/.jupyter" + if [ "$INSTALL_UNDER_ROOT" = false ]; then + CONFIG_DIR="/home/$USERNAME/.jupyter" + fi + + CONFIG_FILE="$CONFIG_DIR/jupyter_server_config.py" + + add_user_jupyter_config $CONFIG_DIR $CONFIG_FILE "c.ServerApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" + add_user_jupyter_config $CONFIG_DIR $CONFIG_FILE "c.NotebookApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" fi fi diff --git a/test/python/install_additional_jupyterlab.sh b/test/python/install_additional_jupyterlab.sh index a5658f0..58c4f7f 100755 --- a/test/python/install_additional_jupyterlab.sh +++ b/test/python/install_additional_jupyterlab.sh @@ -17,7 +17,7 @@ packages="$(python3 -m pip list)" check "location" grep jupyter <<< "$packages" # Check for git extension -check "jupyterlab-git" grep jupyterlab-git <<< "$packages" +check "jupyterlab_git" grep jupyterlab_git <<< "$packages" # Check for correct JupyterLab configuration check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py diff --git a/test/python/install_jupyterlab.sh b/test/python/install_jupyterlab.sh index a5658f0..58c4f7f 100755 --- a/test/python/install_jupyterlab.sh +++ b/test/python/install_jupyterlab.sh @@ -17,7 +17,7 @@ packages="$(python3 -m pip list)" check "location" grep jupyter <<< "$packages" # Check for git extension -check "jupyterlab-git" grep jupyterlab-git <<< "$packages" +check "jupyterlab_git" grep jupyterlab_git <<< "$packages" # Check for correct JupyterLab configuration check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py diff --git a/test/python/install_jupyterlab_debian.sh b/test/python/install_jupyterlab_debian.sh new file mode 100644 index 0000000..3db7fd4 --- /dev/null +++ b/test/python/install_jupyterlab_debian.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +# Check for an installation of JupyterLab +check "version" jupyter lab --version + +# Check location of JupyterLab installation +packages="$(python3 -m pip list)" +check "location" grep jupyter <<< "$packages" + +# Check for git extension +check "jupyterlab_git" grep jupyterlab_git <<< "$packages" + +# Check for correct JupyterLab configuration +check "config" grep ".*.allow_origin = '*'" /root/.jupyter/jupyter_server_config.py + +# Report result +reportResults diff --git a/test/python/install_jupyterlab_ubuntu.sh b/test/python/install_jupyterlab_ubuntu.sh new file mode 100644 index 0000000..3db7fd4 --- /dev/null +++ b/test/python/install_jupyterlab_ubuntu.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +# Check for an installation of JupyterLab +check "version" jupyter lab --version + +# Check location of JupyterLab installation +packages="$(python3 -m pip list)" +check "location" grep jupyter <<< "$packages" + +# Check for git extension +check "jupyterlab_git" grep jupyterlab_git <<< "$packages" + +# Check for correct JupyterLab configuration +check "config" grep ".*.allow_origin = '*'" /root/.jupyter/jupyter_server_config.py + +# Report result +reportResults diff --git a/test/python/scenarios.json b/test/python/scenarios.json index c3c1a82..c3c55d5 100644 --- a/test/python/scenarios.json +++ b/test/python/scenarios.json @@ -53,5 +53,25 @@ "features": { "python": "3.10" } + }, + "install_jupyterlab_debian": { + "image": "debian:bullseye-slim", + "features": { + "python": { + "version": "3.11", + "installJupyterlab": true, + "configureJupyterlabAllowOrigin": "*" + } + } + }, + "install_jupyterlab_ubuntu": { + "image": "ubuntu:focal", + "features": { + "python": { + "version": "3.11", + "installJupyterlab": true, + "configureJupyterlabAllowOrigin": "*" + } + } } -}
\ No newline at end of file +} |