Files
plcnk-helm-charts/hack/update-version.sh
2024-08-16 01:09:32 +02:00

54 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# require yq
command -v yq >/dev/null 2>&1 || {
echo >&2 'yq (https://github.com/mikefarah/yq) is not installed. Aborting.'
exit 1
}
function _print_usage() {
echo 'Usage: {major|minor|patch} [chart...]'
exit "${1:-0}"
}
if [ "$#" -eq 0 ]; then
_print_usage
fi
UPDATE_TYPE="$(tr '[:upper:]' '[:lower:]' <<<"$1")"
shift
case "$UPDATE_TYPE" in
major) SCRIPT='[(.0 | @yamld | . + 1), 0, 0]' ;;
minor) SCRIPT='[.0, (.1 | @yamld | . + 1), 0]' ;;
patch) SCRIPT='[.0, .1, (.2 | @yamld | . + 1)]' ;;
*) echo >&2 "Invalid update type: $UPDATE_TYPE"; _print_usage 1 ;;
esac
echo "Performing $UPDATE_TYPE version bump"
CHARTS=()
if [ "$#" -gt 0 ]; then
# Get changed dirs from params
for file in "$@"; do
CHARTS+=( "$(dirname "$file")" )
done
else
# Get changed dirs from uncommitted changes
for file in $(git status --porcelain charts | grep '^M' | cut -c4-); do
CHARTS+=( "$(dirname "$file")" )
done
fi
CHARTS=( $(sort -u <<<"${CHARTS[*]}") )
for chart in "${CHARTS[@]}"; do (
meta_file="$chart/Chart.yaml"
if [ ! -f "$meta_file" ]; then echo >&2 "Invalid file: $meta_file"; exit; fi
current="$(yq '.version' "$meta_file")"
yq -i '.version |= (split(".") | '"$SCRIPT"' | join("."))' "$meta_file"
new="$(yq '.version' "$meta_file")"
echo "Updated $(basename "$chart") from v$current to v$new"
) done