Skip to content

Commit 831fb8d

Browse files
committed
Move conda environment activation to own script
1 parent 5860d84 commit 831fb8d

File tree

2 files changed

+87
-62
lines changed

2 files changed

+87
-62
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
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

scripts/executeJupyterNotebook.sh

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -82,62 +82,8 @@ if [ ! -f "${jupyter_notebook_file_path}/.env" ] ; then
8282
echo "NEO4J_INITIAL_PASSWORD=${NEO4J_INITIAL_PASSWORD}" > "${jupyter_notebook_file_path}/.env"
8383
fi
8484

85-
# Define conda environment to use for code structure analysis. Default "codegraph"
86-
CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT:-"codegraph"} # Name of the conda environment to use for code graph analysis
87-
backupCondaEnvironment=$CONDA_DEFAULT_ENV
88-
echo "executeJupyterNotebook: CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT}"
89-
echo "executeJupyterNotebook: CONDA_PREFIX=${CONDA_PREFIX}"
90-
echo "executeJupyterNotebook: Current conda environment=${CONDA_DEFAULT_ENV}"
91-
92-
# Include operation system function to for example detect Windows.
93-
source "${SCRIPTS_DIR}/operatingSystemFunctions.sh"
94-
95-
# Determine the path to "conda"
96-
if [ -n "${CONDA}" ]; then
97-
if isWindows; then
98-
pathToConda="${CONDA}\\Scripts\\" # the trailing backslash character is required
99-
else
100-
pathToConda="${CONDA}/bin/" # the trailing slash character is required
101-
fi
102-
else
103-
pathToConda=""
104-
fi
105-
106-
echo "executeJupyterNotebook: pathToConda=${pathToConda}"
107-
108-
scriptExtension=$(ifWindows ".bat" "")
109-
echo "executeJupyterNotebook: scriptExtension=${scriptExtension}"
110-
111-
# Activate conda shell hook. Also resets CONDA_DEFAULT_ENV to base.
112-
# Thats why CONDA_DEFAULT_ENV (base) is never equal to CODEGRAPH_CONDA_ENVIRONMENT (codegraph).
113-
eval "$(${pathToConda}conda${scriptExtension} shell.bash hook)"
114-
echo "executeJupyterNotebook: Current conda environment after shell hook=${CONDA_DEFAULT_ENV}"
115-
116-
# Create (if missing) and activate Conda environment for code structure graph analysis
117-
if { "${pathToConda}conda" env list | grep "$CODEGRAPH_CONDA_ENVIRONMENT "; } >/dev/null 2>&1; then
118-
echo "executeJupyterNotebook: Conda environment $CODEGRAPH_CONDA_ENVIRONMENT already created"
119-
else
120-
if [ ! -f "${jupyter_notebook_file_path}/environment.yml" ] ; then
121-
echo "executeJupyterNotebook: Couldn't find environment file ${jupyter_notebook_file_path}/environment.yml."
122-
exit 2
123-
fi
124-
echo "executeJupyterNotebook: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}"
125-
"${pathToConda}conda" env create --file "${jupyter_notebook_file_path}/environment.yml" --name "${CODEGRAPH_CONDA_ENVIRONMENT}"
126-
fi
127-
128-
echo "executeJupyterNotebook: Activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}"
129-
if isWindows; then
130-
"${pathToConda}conda" activate ${CODEGRAPH_CONDA_ENVIRONMENT}
131-
else
132-
conda activate "${CODEGRAPH_CONDA_ENVIRONMENT}"
133-
fi
134-
135-
if [ "${CONDA_DEFAULT_ENV}" = "${CODEGRAPH_CONDA_ENVIRONMENT}" ] ; then
136-
echo "executeJupyterNotebook: Activated Conda environment: ${CONDA_DEFAULT_ENV}"
137-
else
138-
echo "executeJupyterNotebook: Error: Failed to activate Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}. ${CONDA_DEFAULT_ENV} still active."
139-
exit 1
140-
fi
85+
# Create and activate (if necessary) Conda environment as defined in environment variable CODEGRAPH_CONDA_ENVIRONMENT (default "codegraph")
86+
source "${SCRIPTS_DIR}/activateCondaEnvironment.sh"
14187

14288
# Execute the Jupyter Notebook and write it to the output file name
14389
jupyter nbconvert --to notebook \
@@ -158,10 +104,4 @@ mv -f "${jupyter_notebook_markdown_file}.nostyle" "${jupyter_notebook_markdown_f
158104
# Convert the Jupyter Notebook to PDF
159105
if [ -n "${ENABLE_JUPYTER_NOTEBOOK_PDF_GENERATION}" ]; then
160106
jupyter nbconvert --to webpdf --no-input --allow-chromium-download --disable-chromium-sandbox "$jupyter_notebook_output_file"
161-
fi
162-
163-
# Restore Conda environment
164-
if [ ! "${backupCondaEnvironment}" = "${CODEGRAPH_CONDA_ENVIRONMENT}" ] ; then
165-
"${pathToConda}conda" activate "${backupCondaEnvironment}"
166-
echo "executeJupyterNotebook: Restored Conda Environment to ${backupCondaEnvironment}: ${CONDA_DEFAULT_ENV}"
167107
fi

0 commit comments

Comments
 (0)