Skip to content

Instantly share code, notes, and snippets.

@AndersBennedsgaard
Created September 25, 2023 13:31
Show Gist options
  • Save AndersBennedsgaard/dffd8cfbc268fa839fd2c547ec9d40a3 to your computer and use it in GitHub Desktop.
Save AndersBennedsgaard/dffd8cfbc268fa839fd2c547ec9d40a3 to your computer and use it in GitHub Desktop.
Find differences in Flux HelmRelease versions
#!/bin/bash
set -euo pipefail
info() {
echo "INFO - $*"
}
warn() {
echo "WARNING - $*"
}
err() {
echo "ERROR - $*" >>/dev/stderr
return 1
}
render() {
outfile="$1"
version="$2"
if [[ "$repo" =~ oci://.+ ]]; then
info "OCI repository detected"
if [ "$version" == "latest" ]; then
yq '.spec.values' "$releasefile" | helm template "$releasename" -n "$namespace" "$repo/$chart" --values - > "$outfile"
else
yq '.spec.values' "$releasefile" | helm template "$releasename" -n "$namespace" "$repo/$chart" --version "$version" --values - > "$outfile"
fi
else
if [ "$version" == "latest" ]; then
yq '.spec.values' "$releasefile" | helm template "$releasename" -n "$namespace" --repo "$repo" "$chart" --values - > "$outfile"
else
yq '.spec.values' "$releasefile" | helm template "$releasename" -n "$namespace" --repo "$repo" "$chart" --version "$version" --values - > "$outfile"
fi
fi
# Remove comments
sed -i '/^#/d' "$outfile"
info "Chart manifests has been written to $outfile"
}
releasefile="$(realpath "$1")"
repofile="$(realpath "$2")"
old_version="${3:-"current"}"
new_version="${4:-"latest"}"
_oldfile="/tmp/old-template.yaml"
_newfile="/tmp/new-template.yaml"
_diffile="/tmp/templates.diff"
releasename="$(yq '.metadata.name' "$releasefile")"
namespace="$(yq '.metadata.namespace // "default"' "$releasefile")"
chart="$(yq '.spec.chart.spec.chart' "$releasefile")"
info "Chart: $chart"
repo="$(yq '.spec.url' "$repofile")"
info "Repository: $repo"
if [ "$old_version" == "current" ]; then
old_version="$(yq '.spec.chart.spec.version' "$releasefile")"
fi
info "Version change: $old_version to $new_version"
if [ "$(yq '.spec.postRenderers' "$releasefile")" != "null" ]; then
warn "postrenderer found - ignoring"
fi
# Change directory to fix `helm template` when $chart is a directory/file
(
cd "$(mktemp -d)" || err "Error moving to temporary directory"
# Render the templates
render "$_oldfile" "$old_version" &
_old_pid=$!
render "$_newfile" "$new_version" &
_new_pid=$!
wait $_old_pid $_new_pid
)
if ! diff $_oldfile $_newfile > $_diffile; then
info "Manifest diff written to $_diffile"
else
info "No changes found"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment