diff --git a/roles/common/files/pip_check_requirements_upgrades.sh b/roles/common/files/pip_check_requirements_upgrades.sh index d45980b2f6b7960a65617d2c92292f393bb3017a..18ee71075fb93e0dede7a905dd88819107ba29b7 100755 --- a/roles/common/files/pip_check_requirements_upgrades.sh +++ b/roles/common/files/pip_check_requirements_upgrades.sh @@ -145,19 +145,6 @@ function error() { echo -e "${_text_bold}${_text_red}[ERROR]${_text_reset}" "$@" >&2 } -# Clean-up command for temporary files. -function on_exit() { - debug "Cleaning-up temporary file: $tmp_current" - [[ -f $tmp_current ]] && rm "$tmp_current" - - debug "Cleaning-up temporary file: $tmp_new" - [[ -f $tmp_new ]] && rm "$tmp_new" - - debug "Cleaning-up temporary file: $tmp_new_sorted" - [[ -f $tmp_new_sorted ]] && rm "$tmp_new_sorted" -} -trap on_exit EXIT - # Define error codes. SUCCESS=0 ERROR_ARGUMENTS=1 @@ -223,12 +210,6 @@ if ! which pip-compile >/dev/null 2>&1; then exit "$ERROR_PIP_TOOLS_MISSING" fi -# Create temporary files where files where "normalised" outputs will be -# stored. -tmp_current=$(mktemp) -tmp_new=$(mktemp) -tmp_new_sorted=$(mktemp) - # Process each environment. for environment in "$config_dir"/*; do # Empty directory. @@ -252,21 +233,32 @@ for environment in "$config_dir"/*; do continue fi - # Deploy the existing requirements file and the new one. - sed -e 's/[[:blank:]]*#.*//' "$req_txt" | grep -v "^$" | sort -u > "$tmp_current" - if ! pip-compile --quiet --allow-unsafe --no-header --no-annotate --no-index --output-file "$tmp_new" --upgrade "$req_in"; then - error "Failed while running pip-compile command against (see error stack trace above): $req_in" + # Clean up the existing requirements file to contain only + # package versioning information. + current=$(sed -e 's/[[:blank:]]*#.*//' "$req_txt" | grep -v "^$" | sort -u) + + # Calculate up-to-date requirements. + new=$(pip-compile --quiet --allow-unsafe --no-header --no-annotate --no-index --output-file - --upgrade "$req_in") + result="$?" + if [[ $result != 0 ]]; then + error "Failed while running pip-compile command against (see error stack trace above): $req_in" continue - fi + fi - # Sort the new requirements file. - sed -e 's/[[:blank:]]*#.*//' "$tmp_new" | grep -v "^$" | sort -u > "$tmp_new_sorted" + # Clean up the new requirements to contain only package + # versioning information. + new=$(echo "$new" | sed -e 's/[[:blank:]]*#.*//' | grep -v "^$" | sort -u) - debug "Current requirements:\n$(cat "$tmp_current")" - debug "New requirements:\n$(cat "$tmp_new_sorted")" + debug "Current requirements:\n$(echo "$current")" + debug "New requirements:\n$(echo "$new")" # Run diff, storing the output and result. - diff=$(diff -u "$tmp_current" "$tmp_new_sorted") + # This is using Bash process substitution, which helps avoid + # creating and keeping track of temporary files (since diff + # must be fed with two input files). E.g. the <() will + # essentially be path to a Bash-created/managed temporary + # file. + diff=$(diff -u <(echo "$current") <(echo "$new")) result="$?" # Show warning about available updates.