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

57 lines
1.3 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
}
if [ "$#" -lt 2 ]; then
echo 'Usage: {append | replace} changelog [chart...]'
exit
fi
update_type="$1"
shift
changelog="$(yq -P <<<"$1")"
export changelog
shift
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[*]}") )
case "$update_type" in
append)
expression='.annotations."artifacthub.io/changes" |= (@yamld + (strenv(changelog) | @yamld) | @yaml | trim)'
;;
replace)
expression='.annotations."artifacthub.io/changes" = (env(changelog) | @yaml | trim)'
;;
*)
echo "Invalid update type: $update_type" >&2
exit 1
;;
esac
for chart in "${CHARTS[@]}"; do (
meta_file="$chart/Chart.yaml"
if [ ! -f "$meta_file" ]; then echo >&2 "Invalid file: $meta_file"; exit; fi
yq --inplace "$expression" "$meta_file"
echo "Updated $(basename "$chart") changelog"
) done