autoscaler/cluster-autoscaler/hack/update-chart-version-readme.sh

85 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2024 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###
# This script is to be used to update chart compatibility matrix in
# README when there's a new version of the helm chart available
###
set -eo pipefail
if [[ -n $(git status -s) ]]; then
echo "Clean git working tree required"
exit 1
fi
CA_VERSION=${1:?"usage: update-chart-version-readme.sh <cluster-autoscaler-version> (must be a row present in README.md) [<num_revisions>]"}
NUM_REVISIONS=${2:-"10"}
echo "Checking last $NUM_REVISIONS for changes" >&2
VERSIONS_FILTER="tail -n $NUM_REVISIONS"
BASE=$(dirname $0)
REF=$(git branch --show-current | grep . || git rev-parse HEAD)
function cleanup {
echo 'Going back to $REF'
git checkout "$REF" &>/dev/null
trap - EXIT
}
trap cleanup EXIT
# Build version map
VERSIONS=$(
git tag | grep cluster-autoscaler-chart | sort -V | $VERSIONS_FILTER | while read ver; do
echo "Checking chart release: $ver" >&2
git checkout $ver &>/dev/null
(
set -eo pipefail
cat $BASE/../../charts/cluster-autoscaler/Chart.yaml \
| grep -e version -e appVersion
) \
| sed -E -e 's/^([^:]+): (.*)/"\1": "\2"/g' \
| tr '\n' ',' \
| sed -E -e 's/(.*),/{\1}/g'
done | jq -s '{"cluster-autoscaler": group_by(.appVersion) | map({version: .[0].appVersion, charts: . | map(.version)})}'
)
# Get min version where cluster-autoscaler v$CA_VERSION is used
CA_VERSION=${CA_VERSION%%.X}
MIN_COMPATIBLE_VERSION=$(echo "$VERSIONS" | jq -r --arg ver $CA_VERSION '.["cluster-autoscaler"] | map(select(.version | startswith("\($ver).")) | .charts) | flatten | .[]' | sort -V | head -n1)
if [[ -z "$MIN_COMPATIBLE_VERSION" ]]; then
echo "No chart versions using cluster-autoscaler v$CA_VERSION detected" >&2
exit 0
fi
echo "Detected min compatible version for cluster-autoscaler v$CA_VERSION"
cleanup
# Replace README info with parsed data
awk "!/^\|/ { versions=0 }
/$CA_VERSION/ { if (versions) print(\"\", \$2, \$3, \"$MIN_COMPATIBLE_VERSION+\" \"\", \"\"); else print(\$0) }
!/$CA_VERSION/ { print }
/Kubernetes Version/ { versions=1; FS=\"|\"; OFS=\"|\"; }" $BASE/../README.md > README.md.tmp
mv README.md.tmp $BASE/../README.md