1+ #! /usr/bin/env bash
2+
3+ # Activates the Conda (Python package manager) environment "codegraph" with all packages needed to execute the Jupyter Notebooks.
4+
5+ # Note: This script uses the conda environment defined in CODEGRAPH_CONDA_ENVIRONMENT (defaults to "codegraph").
6+ # If the environment hadn't been created yet it will use "environment.yml"
7+ # in the same directory as the given jupyter notebook ipynb file
8+ # to create the environment.
9+
10+ # Requires operatingSystemFunctions.sh
11+
12+ # Fail on any error ("-e" = exit on first error, "-o pipefail" exist on errors within piped commands)
13+ set -eo pipefail
14+
15+ # # Get this "scripts" directory if not already set
16+ # Even if $BASH_SOURCE is made for Bourne-like shells it is also supported by others and therefore here the preferred solution.
17+ # CDPATH reduces the scope of the cd command to potentially prevent unintended directory changes.
18+ # This way non-standard tools like readlink aren't needed.
19+ SCRIPTS_DIR=${SCRIPTS_DIR:- $( CDPATH=. cd -- " $( dirname -- " ${BASH_SOURCE[0]} " ) " && pwd -P )} # Repository directory containing the shell scripts
20+ echo " activateCondaEnvironment: SCRIPTS_DIR=$SCRIPTS_DIR "
21+
22+ # Get the "jupyter" directory by taking the path of this script and going two directory up and then to "jupyter".
23+ JUPYTER_NOTEBOOK_DIRECTORY=${JUPYTER_NOTEBOOK_DIRECTORY:- " ${SCRIPTS_DIR} /../jupyter" } # Repository directory containing the Jupyter Notebooks
24+ echo " activateCondaEnvironment: JUPYTER_NOTEBOOK_DIRECTORY=$JUPYTER_NOTEBOOK_DIRECTORY "
25+
26+ # Define conda environment to use for code structure analysis. Default "codegraph"
27+ CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT:- " codegraph" } # Name of the conda environment to use for code graph analysis
28+ echo " activateCondaEnvironment: CONDA_PREFIX=${CONDA_PREFIX} "
29+ echo " activateCondaEnvironment: Current conda environment=${CONDA_DEFAULT_ENV} "
30+ echo " activateCondaEnvironment: Target conda environment=${CODEGRAPH_CONDA_ENVIRONMENT} "
31+
32+ if [ " ${CONDA_DEFAULT_ENV} " = " ${CODEGRAPH_CONDA_ENVIRONMENT} " ] ; then
33+ echo " activateCondaEnvironment: Skipping activation. Target conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} is already activated."
34+ exit 0
35+ fi
36+
37+ # Include operation system function to for example detect Windows.
38+ source " ${SCRIPTS_DIR} /operatingSystemFunctions.sh"
39+
40+ # Determine the path to "conda"
41+ if [ -n " ${CONDA} " ]; then
42+ if isWindows; then
43+ pathToConda=" ${CONDA} \\ Scripts\\ " # the trailing backslash character is required
44+ else
45+ pathToConda=" ${CONDA} /bin/" # the trailing slash character is required
46+ fi
47+ else
48+ pathToConda=" "
49+ fi
50+ echo " activateCondaEnvironment: pathToConda=${pathToConda} "
51+
52+ scriptExtension=$( ifWindows " .bat" " " )
53+ echo " activateCondaEnvironment: scriptExtension=${scriptExtension} "
54+
55+ # Activate conda shell hook. Also resets CONDA_DEFAULT_ENV to base.
56+ # Thats why CONDA_DEFAULT_ENV (base) is never equal to CODEGRAPH_CONDA_ENVIRONMENT (codegraph).
57+ eval " $( ${pathToConda} conda${scriptExtension} shell.bash hook) "
58+ echo " activateCondaEnvironment: Current conda environment after shell hook=${CONDA_DEFAULT_ENV} "
59+
60+ # Create (if missing) and activate Conda environment for code structure graph analysis
61+ if { " ${pathToConda} conda" env list | grep " $CODEGRAPH_CONDA_ENVIRONMENT " ; } > /dev/null 2>&1 ; then
62+ echo " activateCondaEnvironment: Conda environment $CODEGRAPH_CONDA_ENVIRONMENT already created"
63+ else
64+ if [ ! -f " ${JUPYTER_NOTEBOOK_DIRECTORY} /environment.yml" ] ; then
65+ echo " activateCondaEnvironment: Couldn't find environment file ${jupyter_notebook_file_path} /environment.yml."
66+ exit 2
67+ fi
68+ echo " activateCondaEnvironment: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} "
69+ " ${pathToConda} conda" env create --file " ${jupyter_notebook_file_path} /environment.yml" --name " ${CODEGRAPH_CONDA_ENVIRONMENT} "
70+ fi
71+
72+ echo " activateCondaEnvironment: Activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} "
73+ " ${pathToConda} conda" activate ${CODEGRAPH_CONDA_ENVIRONMENT}
74+
75+ if [ " ${CONDA_DEFAULT_ENV} " != " ${CODEGRAPH_CONDA_ENVIRONMENT} " ] ; then
76+ echo " activateCondaEnvironment: Retry activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} with plain 'conda' command"
77+ conda activate ${CODEGRAPH_CONDA_ENVIRONMENT}
78+ fi
79+
80+ if [ " ${CONDA_DEFAULT_ENV} " = " ${CODEGRAPH_CONDA_ENVIRONMENT} " ] ; then
81+ echo " activateCondaEnvironment: Activated Conda environment: ${CONDA_DEFAULT_ENV} "
82+ else
83+ echo " activateCondaEnvironment: Error: Failed to activate Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} . ${CONDA_DEFAULT_ENV} still active."
84+ exit 1
85+ fi
0 commit comments