Skip to content

Commit 87ff3c6

Browse files
committed
Update conda environment if its outdated compared to the environment.yml
1 parent f38ac62 commit 87ff3c6

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

scripts/activateCondaEnvironment.sh

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@ set -o errexit -o pipefail
1717
# CDPATH reduces the scope of the cd command to potentially prevent unintended directory changes.
1818
# This way non-standard tools like readlink aren't needed.
1919
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"
20+
echo "activateCondaEnvironment: SCRIPTS_DIR=${SCRIPTS_DIR}"
2121

2222
# Get the "jupyter" directory by taking the path of this script and going two directory up and then to "jupyter".
2323
JUPYTER_NOTEBOOK_DIRECTORY=${JUPYTER_NOTEBOOK_DIRECTORY:-"${SCRIPTS_DIR}/../jupyter"} # Repository directory containing the Jupyter Notebooks
24-
echo "activateCondaEnvironment: JUPYTER_NOTEBOOK_DIRECTORY=$JUPYTER_NOTEBOOK_DIRECTORY"
24+
echo "activateCondaEnvironment: JUPYTER_NOTEBOOK_DIRECTORY=${JUPYTER_NOTEBOOK_DIRECTORY}"
25+
26+
# Get the file name of the environment description file for the conda package and environment manager
27+
# that contains all dependencies and their versions.
28+
CONDA_ENVIRONMENT_FILE=${CONDA_ENVIRONMENT_FILE:-"${JUPYTER_NOTEBOOK_DIRECTORY}/environment.yml"} # Conda (package manager for Python) environment file path
29+
if [ ! -f "${CONDA_ENVIRONMENT_FILE}" ] ; then
30+
echo "activateCondaEnvironment: Couldn't find environment file ${CONDA_ENVIRONMENT_FILE}."
31+
exit 2
32+
fi
2533

2634
# Define conda environment to use for code structure analysis. Default "codegraph"
2735
CODEGRAPH_CONDA_ENVIRONMENT=${CODEGRAPH_CONDA_ENVIRONMENT:-"codegraph"} # Name of the conda environment to use for code graph analysis
@@ -60,18 +68,24 @@ echo "activateCondaEnvironment: scriptExtension=${scriptExtension}"
6068
eval "$(${pathToConda}conda${scriptExtension} shell.bash hook)"
6169
echo "activateCondaEnvironment: Current conda environment after shell hook=${CONDA_DEFAULT_ENV}"
6270

63-
# Create (if missing) and activate Conda environment for code structure graph analysis
64-
if { "${pathToConda}conda" env list | grep "${CODEGRAPH_CONDA_ENVIRONMENT} "; } >/dev/null 2>&1; then
65-
echo "activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} already created"
66-
else
67-
if [ ! -f "${JUPYTER_NOTEBOOK_DIRECTORY}/environment.yml" ] ; then
68-
echo "activateCondaEnvironment: Couldn't find environment file ${JUPYTER_NOTEBOOK_DIRECTORY}/environment.yml."
69-
exit 2
71+
# If missing, create Conda environment for code graph analysis
72+
# Note: The curly braces are grouping the outputs of both (piped) operations together to suppress them later (dev/null).
73+
if "${pathToConda}conda" env list | grep "${CODEGRAPH_CONDA_ENVIRONMENT} " >/dev/null 2>&1; then
74+
echo "activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} has already been created."
75+
76+
# Check if the declaration in the environment file matches the actual environment to find out if it needs to be updated.
77+
if "${pathToConda}conda" compare --name "${CODEGRAPH_CONDA_ENVIRONMENT}" "${CONDA_ENVIRONMENT_FILE}" >/dev/null 2>&1; then
78+
echo "activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} is up-to-date."
79+
else
80+
echo "activateCondaEnvironment: Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT} needs to be updated."
81+
"${pathToConda}conda" env update --file "${CONDA_ENVIRONMENT_FILE}" --name ${CODEGRAPH_CONDA_ENVIRONMENT} --prune
7082
fi
71-
echo "activateCondaEnvironment: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}"
72-
"${pathToConda}conda" env create --file "${JUPYTER_NOTEBOOK_DIRECTORY}/environment.yml" --name "${CODEGRAPH_CONDA_ENVIRONMENT}"
83+
else
84+
echo "activateCondaEnvironment: Creating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}..."
85+
"${pathToConda}conda" env create --file "${CONDA_ENVIRONMENT_FILE}" --name "${CODEGRAPH_CONDA_ENVIRONMENT}"
7386
fi
7487

88+
# Activate code graph Conda environment
7589
echo "activateCondaEnvironment: Activating Conda environment ${CODEGRAPH_CONDA_ENVIRONMENT}"
7690
"${pathToConda}conda" activate ${CODEGRAPH_CONDA_ENVIRONMENT}
7791

0 commit comments

Comments
 (0)