diff --git a/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/extras/git_clone_update.sh b/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/extras/git_clone_update.sh index 5c012c01c1..bca1734ea2 100644 --- a/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/extras/git_clone_update.sh +++ b/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/extras/git_clone_update.sh @@ -31,6 +31,22 @@ if [ "$#" -lt 1 ] || [ "$1" = "--help" ]; then [ "$1" = "--help" ] && exit 0 || exit 1 fi +fix_parent_dir_permissions() { + # Fix parent directory permissions to allow the JupyterLab user to access the cloned repository + + local folder_path="$1" + + # Retrieve the very first parent directory + local parent_dir=$(echo "$folder_path" | cut -d '/' -f1) + + # Check if the parent directory has the correct permissions + if [ "$(stat -c "%u:%g" "$parent_dir")" != "1000:100" ]; then + echo "Fixing permissions for parent directory: $parent_dir" + chown -R 1000:100 "$parent_dir" || { echo "Error: Unable to set ownership for $parent_dir"; return 1; } + chmod -R 755 "$parent_dir" || { echo "Error: Unable to set permissions for $parent_dir"; return 1; } + fi +} + clone_update_repository() { # Clone or update a Git repository into a specified folder, # and create a `.firstrun` file to mark the script's execution. @@ -47,6 +63,8 @@ clone_update_repository() { mkdir -p "$folder_path" fi + fix_parent_dir_permissions "$folder_path" || return 1 + if [ -d "$folder_path/.git" ]; then echo -e "Updating Git repository in ${folder_path}..." (cd "$folder_path" && git pull) @@ -55,7 +73,13 @@ clone_update_repository() { (git clone "$git_repo_url" "$folder_path") fi + echo -e "Creating .firstrun file in ${folder_path}..." touch "$firstrun_file" + + # User permissions for JupyterLab user to newly created git folders + echo -e "Setting permissions for ${folder_path}..." + chown -R 1000:100 "$folder_path" || { echo "Error: Unable to set ownership for $folder_path"; return 1; } + echo -e "Execution for ${folder_path} completed. ${GREEN}✅${NC}" fi } @@ -72,7 +96,6 @@ for pair in "$@"; do echo -e "${RED}Invalid argument format: \"${pair}\". Please provide folder path and Git repository URL in the correct order.${NC}" >> "$ERROR_LOG" else clone_update_repository "$folder_path" "$git_repo_url" || echo -e "${RED}Error executing for ${folder_path}.${NC}" >> "$ERROR_LOG" - chown -R 1000:100 "$folder_path" # User permissions for JupyterLab user fi done