Skip to content

Commit 1a5780a

Browse files
committed
changes requested
1 parent 68971ba commit 1a5780a

File tree

1 file changed

+30
-75
lines changed

1 file changed

+30
-75
lines changed
Lines changed: 30 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
#!/bin/bash
22

3-
# Find and install packages, if required, using conda channel or using pip package manager
43
vulnerable_packages=( "pydantic=2.5.3" "joblib=1.3.1" "mistune=3.0.1" "werkzeug=3.0.3" "transformers=4.36.0" "pillow=10.3.0" "aiohttp=3.9.4" \
54
"cryptography=42.0.4" "gitpython=3.1.41" "jupyter-lsp=2.2.2" "idna=3.7" "jinja2=3.1.4" "scrapy=2.11.2" )
65

76
# Define the number of rows (based on the length of vulnerable_packages)
87
rows=${#vulnerable_packages[@]}
98

109
# Define the number of columns
11-
cols=4
10+
cols=2
1211

1312
# Define the 2D array
1413
declare -A packages_array
@@ -22,78 +21,6 @@ for ((i=0; i<rows; i++)); do
2221
packages_array[$i,1]=${parts[1]}
2322
done
2423

25-
value=0
26-
insert_in_2D_array() {
27-
local package_name=$1
28-
local channel_name="anaconda"
29-
30-
echo "Running conda search for package '$package_name' in channel '$channel_name'..."
31-
32-
# Capture the conda search output and process it
33-
latest_version=$(conda search "$package_name" -c "$channel_name" | \
34-
grep -E '^[[:alnum:]]' | \
35-
awk '{print $2}' | \
36-
sort -V | \
37-
uniq | \
38-
tail -n 2 | \
39-
head -n 1)
40-
41-
found_version=$(pip show $package_name | grep '^Version:' | awk '{print $2}')
42-
if [[ -z "$latest_version" ]]; then
43-
echo "No version found in anaconda channel."
44-
latest_version="0"
45-
fi
46-
if [[ -z "$found_version" ]]; then
47-
echo "No package version found in upstream."
48-
found_version="0"
49-
fi
50-
echo "Latest version of $package_name on Conda Channel: $latest_version"
51-
packages_array[$i,2]="$found_version"
52-
packages_array[$i,3]="$latest_version"
53-
((value++))
54-
}
55-
56-
# store found package versions in upstream as 3rd column element in 2D array
57-
check_packages_anaconda_channel() {
58-
for ((i=0; i<rows; i++)); do
59-
PACKAGE_NAME=${packages_array[$i,0]}
60-
echo "Package Name $i: $PACKAGE_NAME"
61-
insert_in_2D_array $PACKAGE_NAME
62-
done
63-
}
64-
65-
compare_and_install_packages() {
66-
check_packages_anaconda_channel
67-
printf "%-10s %-10s %-10s %-10s\n" "Package Name," "Version needed," "Version Present," "Conda channel version"
68-
echo "---------------------------------------------------------------------------------"
69-
for ((i=0; i<rows; i++)); do
70-
for ((j=0; j<cols; j++)); do
71-
echo -n "${packages_array[$i,$j]} "
72-
done
73-
echo
74-
done
75-
for ((i=0; i<rows; i++)); do
76-
echo -e "\nComparing semver versions between required and present currently for ${packages_array[$i,0]}"
77-
comparison_result=$(compare_semver "${packages_array[$i,1]}" "${packages_array[$i,2]}")
78-
if [[ $comparison_result == "greater" ]]; then
79-
echo -e "\n${packages_array[$i,0]} : ${packages_array[$i,1]} > ${packages_array[$i,2]}"
80-
echo -e "\nComparing semver versions between required and available through conda channel for ${packages_array[$i,0]}"
81-
comparison_result2=$(compare_semver "${packages_array[$i,1]}" "${packages_array[$i,3]}")
82-
if [[ $comparison_result2 == "greater" ]]; then
83-
echo -e "\n${packages_array[$i,0]} : ${packages_array[$i,1]} > ${packages_array[$i,3]}"
84-
echo -e "\nInstalling ${packages_array[$i,0]} using pip"
85-
python3 -m pip install --upgrade "${packages_array[$i,0]}==${packages_array[$i,1]}"
86-
else
87-
echo -e "\n${packages_array[$i,0]} : ${packages_array[$i,1]} < ${packages_array[$i,3]}"
88-
echo -e "\nInstalling ${packages_array[$i,0]} using conda channel"
89-
conda install "${packages_array[$i,0]}==${packages_array[$i,3]}"
90-
fi
91-
else
92-
echo -e "No need to update ${packages_array[$i,0]}";
93-
fi
94-
done
95-
}
96-
9724
# Function to compare semver versions
9825
compare_semver() {
9926
# Split versions into arrays
@@ -127,4 +54,32 @@ compare_semver() {
12754
echo $comparison
12855
}
12956

130-
compare_and_install_packages
57+
for ((i=0; i<rows; i++)); do
58+
59+
CURRENT_VERSION=$(pip show "${packages_array[$i,0]}" | grep '^Version:' | awk '{print $2}')
60+
REQUIRED_VERSION="${packages_array[$i,1]}"
61+
comparison_result=$(compare_semver "${REQUIRED_VERSION}" "${CURRENT_VERSION}")
62+
# Check if the current version installed is greater or equal to the required version
63+
if [[ $comparison_result == "greater" ]]; then
64+
echo "${packages_array[$i,0]} version v${CURRENT_VERSION} installed by the base image is not greater or equal to the required: v${REQUIRED_VERSION}"
65+
# Check whether conda channel has a greater or equal version available, so install from conda, otherwise use pip package manager
66+
channel_name="anaconda"
67+
CONDA_VERSION=$(conda search "${packages_array[$i,0]}" -c "$channel_name" | \
68+
grep -E '^[[:alnum:]]' | \
69+
awk '{print $2}' | \
70+
sort -V | \
71+
uniq | \
72+
tail -n 2 | \
73+
head -n 1)
74+
comparison_result2=$(compare_semver "${REQUIRED_VERSION}" "${CONDA_VERSION}")
75+
if [[ $comparison_result2 == "lesser" ]] || [[ $comparison_result2 == "equal" ]]; then
76+
echo -e "Greater version between required version: v${REQUIRED_VERSION} and conda version: v${CONDA_VERSION} is conda version: v${CONDA_VERSION}\n";
77+
echo "Installing ${packages_array[$i,0]} from source from conda channel for ${REQUIRED_VERSION}..."
78+
conda install "${packages_array[$i,0]}==${CONDA_VERSION}"
79+
else
80+
echo -e "Greater version between required version: v${REQUIRED_VERSION} and conda version: v${CONDA_VERSION} is the required version: v${REQUIRED_VERSION}\n";
81+
echo "Installing ${packages_array[$i,0]} from source from pip package manager for ${REQUIRED_VERSION}..."
82+
python3 -m pip install --upgrade "${packages_array[$i,0]}==${REQUIRED_VERSION}"
83+
fi
84+
fi
85+
done

0 commit comments

Comments
 (0)