Skip to content

Instantly share code, notes, and snippets.

@dlnilsson
Last active February 19, 2025 07:45
Show Gist options
  • Save dlnilsson/677c4dbd696e7acb1a33a7c8a5d1b421 to your computer and use it in GitHub Desktop.
Save dlnilsson/677c4dbd696e7acb1a33a7c8a5d1b421 to your computer and use it in GitHub Desktop.
helm walk revision
#!/bin/bash
set -e
set -u
set -o pipefail
NAMESPACE=${1:-default}
RELEASE_NAME=${2:-}
KUBE_CONTEXT=${3:-""}
if [ -z "$RELEASE_NAME" ]; then
echo "Usage: $0 <namespace> <release-name> [kube-context]"
exit 1
fi
HELM_CMD=(helm --namespace "$NAMESPACE")
if [ -n "$KUBE_CONTEXT" ]; then
HELM_CMD+=(--kube-context "$KUBE_CONTEXT")
fi
REVISIONS=$("${HELM_CMD[@]}" history "$RELEASE_NAME" -o json | jq -r '.[].revision')
mapfile -t REVISION_ARRAY <<< "$REVISIONS"
if [ "${#REVISION_ARRAY[@]}" -lt 2 ]; then
echo "Not enough revisions to compare."
exit 0
fi
echo "Found revisions: ${REVISION_ARRAY[*]}"
if command -v fzf &>/dev/null; then
START_REVISION=$(printf "%s\n" "${REVISION_ARRAY[@]}" | fzf --prompt="Select starting revision: " --preview "${HELM_CMD[*]} history $RELEASE_NAME -o json | jq -r '.[] | select(.revision == \"{}\")' | jq")
else
START_REVISION=${REVISION_ARRAY[0]}
fi
START_INDEX=0
for ((i = 0; i < ${#REVISION_ARRAY[@]}; i++)); do
if [ "${REVISION_ARRAY[i]}" -eq "$START_REVISION" ]; then
START_INDEX=$i
break
fi
done
if [ -n "$HELM_DIFF_TPL" ]; then
HELM_CMD+=(--output "$HELM_DIFF_TPL")
fi
for ((i = START_INDEX; i < ${#REVISION_ARRAY[@]} - 1; i++)); do
PREV_REV="${REVISION_ARRAY[i]}"
CUR_REV="${REVISION_ARRAY[i+1]}"
echo "========================================"
echo "πŸ” Comparing revisions $PREV_REV β†’ $CUR_REV"
echo "========================================"
"${HELM_CMD[@]}" diff revision "$RELEASE_NAME" "$PREV_REV" "$CUR_REV"
echo -e "\nDiff: $PREV_REV β†’ $CUR_REV\nPress Enter to continue..."
read -r
done
echo "βœ… Completed revision walkthrough."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment