Files
cc-scripts/cc-upgrades-check
2025-09-11 16:35:17 -04:00

95 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
function usage() {
echo "$0 <recipes|apps>: check for co-op cloud recipes"
echo
echo "OPTIONS"
echo "-s|--servers <SERVER_FILE> provide a file with servers"
}
while [[ $# -gt 0 ]]; do
case $1 in
-s|--servers)
server_file="$2"
shift # past argument
shift # past value
;;
recipes)
action="recipes"
shift # past argument
shift # past value
;;
apps)
action="apps"
shift # past argument
shift # past value
;;
-h|--help)
usage
exit 1
;;
*)
echo "Unknown argument"
usage
exit 1
;;
esac
done
if [ -z "$action" ]; then
usage
exit 1
fi
if [ -n "$server_file" ]; then
readarray -t servers < "$server_file"
else
readarray -t servers < <(abra server ls -m | ./bin/jq -r '.[].name' | ./bin/gum choose --no-limit)
fi
log_file=$(mktemp)
echo "$(tput setaf 7)Logging to $log_file $(tput sgr0)"
echo
if [ "$action" = "recipes" ]; then
readarray -t recipes < <(for server in "${servers[@]}"; do
abra app ls -s "$server" -m | jq -r ".\"$server\".apps[].recipe"
done | sort -u)
for recipe in "${recipes[@]}"; do
echo "$(tput setaf 2)$recipe $(tput sgr0)"
readarray -t line < <(abra recipe upgrade -n -m "$recipe" 2>>"$log_file" | jq -r '. | keys[] as $k | .[$k].service, (.[$k].upgrades | length), (.[$k].upgrades[0])')
if [ "${#line[@]}" = 0 ]; then
echo "$(tput setaf 3)No updates for $recipe $(tput sgr0)"
else
for (( i = 0; i < $(("${#line[@]}" / 3)); i++ )); do
echo "${line[$((i * 3))]} has ${line[$((i * 3 + 1))]} available update(s), latest is ${line[$((i * 3 + 2))]}"
done
fi
echo
done
echo
elif [ "$action" == "apps" ]; then
for server in "${servers[@]}"; do
echo "$(tput setaf 2)Server: $server$(tput sgr0)"
OLDIFS="$IFS"
IFS=$'\n'
for app_data in $(abra app ls -s "$server" -S -m | jq -c ".\"$server\".apps[]"); do
IFS="|" read recipe appName version upgrade < <(echo "$app_data" | jq -r '[.recipe, .appName, .version, .upgrade] | join("|")')
if [ ! "$upgrade" = "latest" ]; then echo -n "$(tput setaf 3)"; fi
if [ "$upgrade" = "unknown" ]; then echo -n "$(tput setaf 1)"; fi
echo "$appName ($recipe): $version$upgrade"
echo -n "$(tput sgr0)"
done
IFS="$OLDIFS"
echo
done
fi
echo "$(tput setaf 3)Errors and warnings: $(tput sgr0)"
grep -v "no new versions available for" "$log_file"
rm "$log_file"