You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.5 KiB
Bash
102 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
# vim:ts=4:sts=4:sw=4:et
|
|
#
|
|
# Author: Hari Sekhon
|
|
# Date: 2022-07-14 16:57:44 +0100 (Thu, 14 Jul 2022)
|
|
#
|
|
# https://github.com/HariSekhon/DevOps-Bash-tools
|
|
#
|
|
# License: see accompanying Hari Sekhon LICENSE file
|
|
#
|
|
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
|
|
#
|
|
# https://www.linkedin.com/in/HariSekhon
|
|
#
|
|
|
|
set -euo pipefail
|
|
[ -n "${DEBUG:-}" ] && set -x
|
|
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# shellcheck disable=SC1090
|
|
. "$srcdir/lib/git.sh"
|
|
|
|
# shellcheck disable=SC2034,SC2154
|
|
usage_description="
|
|
Runs kustomize build in the current vs the target base Git branch, for all directories given as args
|
|
|
|
Useful to validate kustomization.yaml refactoring, such as changing bases, switching to tagged external bases and wanting to ensure the refactor is a no-op
|
|
|
|
If no directories are given, assumes to kustomize build in the local directory
|
|
|
|
|
|
Requires Kustomize 4.x for --enable-helm support
|
|
"
|
|
|
|
# used by usage() in lib/utils.sh
|
|
# shellcheck disable=SC2034
|
|
usage_args="<git_branch> [<dir1> <dir2> <dir3> ...]"
|
|
|
|
help_usage "$@"
|
|
|
|
min_args 1 "$@"
|
|
|
|
original_branch="$(current_branch)"
|
|
base_branch="$1"
|
|
shift || :
|
|
|
|
dirs=("$@")
|
|
if [ -z "${dirs[*]:-}" ]; then
|
|
dirs+=("$PWD")
|
|
fi
|
|
|
|
trap_cmd "popd &>/dev/null; git checkout '$original_branch' &>/dev/null; git stash pop &>/dev/null || :"
|
|
|
|
timestamp "Collecting kustomize build outputs for directories in current branch '$original_branch': $*"
|
|
echo
|
|
for dir in "${dirs[@]}"; do
|
|
mkdir -p "/tmp/$dir.$$"
|
|
pushd "$dir"
|
|
kustomize build --enable-helm > "/tmp/$dir.$$/head"
|
|
popd
|
|
done
|
|
echo
|
|
|
|
timestamp "Stashing any uncommitted changes in current branch that might prevent a branch switch"
|
|
echo
|
|
git stash
|
|
echo
|
|
|
|
timestamp "Switching to base branch: $base_branch"
|
|
git checkout --quiet "$base_branch"
|
|
echo
|
|
|
|
timestamp "Collecting kustomize build outputs for directories in base branch '$base_branch': $*"
|
|
echo
|
|
for dir in "${dirs[@]}"; do
|
|
pushd "$dir"
|
|
kustomize build --enable-helm > "/tmp/$dir.$$/base"
|
|
popd
|
|
done
|
|
echo
|
|
|
|
timestamp "Switching back to original branch: $original_branch"
|
|
git checkout --quiet "$original_branch"
|
|
echo
|
|
|
|
timestamp "Restoring any stashed changes"
|
|
echo
|
|
git stash pop || :
|
|
echo
|
|
|
|
timestamp "Differences per directory from base branch '$base_branch' to head current branch '$original_branch':"
|
|
echo
|
|
for dir in "${dirs[@]}"; do
|
|
echo "Directory: $dir"
|
|
echo
|
|
diff "/tmp/$dir.$$/base" "/tmp/$dir.$$/head" || :
|
|
echo
|
|
echo
|
|
done
|
|
|
|
untrap
|