Skip to content

Commit 8c35fe7

Browse files
committed
added bash script to update data.yaml
1 parent 905d50c commit 8c35fe7

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

scripts/update-data-yaml.sh

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
5+
REPO_ROOT=$( cd -- "${SCRIPT_DIR}/.." &> /dev/null && pwd )
6+
DATA_FILE="${REPO_ROOT}/data.yaml"
7+
NUM_RELEASES_TO_KEEP=5
8+
9+
check_command() {
10+
if ! command -v "$1" &> /dev/null; then
11+
echo "❌ Error: Required command '$1' not found. Please install it to continue." >&2
12+
exit 1
13+
fi
14+
}
15+
16+
check_command "yq"
17+
check_command "jq"
18+
check_command "curl"
19+
check_command "sort"
20+
21+
if [ -z "$1" ]; then
22+
echo "Usage: $0 <new_version>"
23+
echo "Example: $0 v2.17.0"
24+
exit 1
25+
fi
26+
27+
if [ ! -f "${DATA_FILE}" ]; then
28+
echo "Error: Data file not found at ${DATA_FILE}" >&2
29+
exit 1
30+
fi
31+
32+
NEW_VERSION_WITH_V=$1
33+
CLEAN_NEW_VERSION=${NEW_VERSION_WITH_V#v}
34+
35+
echo "Starting update process for version ${NEW_VERSION_WITH_V}..."
36+
37+
echo "Fetching latest Kubernetes version..."
38+
LATEST_K8S_FULL_VERSION=$(curl --silent --fail "https://api.github.com/repos/kubernetes/kubernetes/releases/latest" | jq -r '.tag_name')
39+
40+
if [ -z "$LATEST_K8S_FULL_VERSION" ] || [ "$LATEST_K8S_FULL_VERSION" == "null" ]; then
41+
echo "Error: Failed to fetch the latest Kubernetes version from GitHub." >&2
42+
exit 1
43+
fi
44+
45+
LATEST_K8S_VERSION=$(echo "${LATEST_K8S_FULL_VERSION}" | sed 's/^v//' | cut -d. -f1,2)
46+
echo "Latest stable Kubernetes version (N): ${LATEST_K8S_VERSION}"
47+
48+
K8S_MAJOR=$(echo "${LATEST_K8S_VERSION}" | cut -d. -f1)
49+
K8S_MINOR=$(echo "${LATEST_K8S_VERSION}" | cut -d. -f2)
50+
PREV_K8S_MINOR=$((K8S_MINOR - 1))
51+
K8S_VERSION_FOR_NEW_RELEASE="${K8S_MAJOR}.${PREV_K8S_MINOR}"
52+
echo "New release ${NEW_VERSION_WITH_V} will be mapped to Kubernetes (N-1): ${K8S_VERSION_FOR_NEW_RELEASE}"
53+
54+
55+
EXISTING_EXACT_MATCH=$(yq eval ".compat[] | select(.version == \"${NEW_VERSION_WITH_V}\" and .kubernetes == \"${K8S_VERSION_FOR_NEW_RELEASE}\")" "${DATA_FILE}")
56+
57+
if [ -n "${EXISTING_EXACT_MATCH}" ]; then
58+
echo "Entry for ${NEW_VERSION_WITH_V} with Kubernetes ${K8S_VERSION_FOR_NEW_RELEASE} already exists. No changes needed."
59+
exit 0
60+
fi
61+
62+
EXISTING_KSM_VERSION_ENTRY=$(yq eval ".compat[] | select(.version == \"${NEW_VERSION_WITH_V}\")" "${DATA_FILE}")
63+
64+
if [ -n "${EXISTING_KSM_VERSION_ENTRY}" ]; then
65+
echo "Version ${NEW_VERSION_WITH_V} found with a different K8s mapping. Updating..."
66+
# Update the kubernetes version for the existing entry
67+
yq eval "(.compat[] | select(.version == \"${NEW_VERSION_WITH_V}\")).kubernetes = \"${K8S_VERSION_FOR_NEW_RELEASE}\"" -i "${DATA_FILE}"
68+
# Also update the top-level version key and the main branch k8s version to keep everything current
69+
yq eval ".version = \"${CLEAN_NEW_VERSION}\"" -i "${DATA_FILE}"
70+
yq eval "(.compat[] | select(.version == \"main\")).kubernetes = \"${LATEST_K8S_VERSION}\"" -i "${DATA_FILE}"
71+
echo "Successfully updated existing entry for ${NEW_VERSION_WITH_V}."
72+
echo "--- Final ${DATA_FILE} content ---"
73+
cat "${DATA_FILE}"
74+
exit 0
75+
fi
76+
77+
echo "Adding new version ${NEW_VERSION_WITH_V} and pruning old releases..."
78+
79+
TEMP_FILE=$(mktemp)
80+
trap 'rm -f ${TEMP_FILE}' EXIT
81+
82+
cat > "${TEMP_FILE}" << EOF
83+
# The purpose of this config is to keep all versions in a single file and make them machine accessible
84+
85+
# Marks the latest release
86+
version: "${CLEAN_NEW_VERSION}"
87+
88+
# List at max ${NUM_RELEASES_TO_KEEP} releases here + the main branch
89+
compat:
90+
EOF
91+
92+
{
93+
yq eval '.compat[] | select(.version != "main") | [.version, .kubernetes] | join("|")' "${DATA_FILE}" 2>/dev/null || true
94+
echo "${NEW_VERSION_WITH_V}|${K8S_VERSION_FOR_NEW_RELEASE}"
95+
} | sort -t'|' -k1,1 -Vr | head -n "${NUM_RELEASES_TO_KEEP}" | sort -t'|' -k1,1 -V | while IFS='|' read -r version k8s_ver; do
96+
echo " - version: \"${version}\"" >> "${TEMP_FILE}"
97+
echo " kubernetes: \"${k8s_ver}\"" >> "${TEMP_FILE}"
98+
done
99+
100+
cat >> "${TEMP_FILE}" << EOF
101+
- version: "main"
102+
kubernetes: "${K8S_VERSION_FOR_NEW_RELEASE}"
103+
EOF
104+
105+
mv "${TEMP_FILE}" "${DATA_FILE}"
106+
107+
echo "Successfully updated and pruned ${DATA_FILE}."
108+
echo "New release (${NEW_VERSION_WITH_V}) is mapped to Kubernetes: ${K8S_VERSION_FOR_NEW_RELEASE}"
109+
echo "Main branch is mapped to Kubernetes: ${LATEST_K8S_VERSION}"
110+
echo "--- Final ${DATA_FILE} content ---"
111+
cat "${DATA_FILE}"

0 commit comments

Comments
 (0)