You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

70 lines
2.3 KiB

#!/bin/bash
set -euo pipefail
# Get component version from GitHub API
get_latest_version() {
echo >&2 "Checking release version for ${1}"
curl --retry 5 --silent --fail -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${1}/releases/latest" | jq '.tag_name' | tr -d '"v'
}
# Get component version from version file
get_current_version() {
echo >&2 "Reading currently used version of ${1}"
v=$(jq -r ".${1}" "$VERSION_FILE")
if [ "${v}" == "" ]; then
echo >&2 "Couldn't read version of ${1} from $VERSION_FILE"
exit 1
fi
echo "$v"
}
# Get version from online source and filter out unstable releases. In case of unstable release use what is set in version file
get_version() {
component="${1}"
v="$(get_latest_version "${component}")"
component="$(convert_to_camel_case "$(echo "${component}" | sed 's/^.*\///')")"
cv="$(get_current_version "${component}")"
# Advanced AI heurestics to filter out common patterns suggesting new version is not stable /s
if [[ "$v" == "" ]] || [[ "$v" == *"alpha"* ]] || [[ "$v" == *"beta"* ]] || [[ "$v" == *"rc"* ]] || [[ "$v" == *"helm"* ]]; then
echo "$cv"
return
fi
# Use higher version from new version and current version
v=$(printf '%s\n' "$v" "$cv" | sort -r | head -n1)
echo "$v"
}
convert_to_camel_case() {
echo "${1}" | sed -E 's/[ _-]([a-z])/\U\1/gi;s/^([A-Z])/\l\1/'
}
# File is used to read current versions
VERSION_FILE="$(pwd)/jsonnet/kube-prometheus/versions.json"
# token can be passed as `GITHUB_TOKEN` variable or passed as first argument
GITHUB_TOKEN=${GITHUB_TOKEN:-${1}}
if [ -z "$GITHUB_TOKEN" ]; then
echo >&2 "GITHUB_TOKEN not set. Exiting"
exit 1
fi
cat <<-EOF
{
"alertmanager": "$(get_version "prometheus/alertmanager")",
"blackboxExporter": "$(get_version "prometheus/blackbox_exporter")",
"grafana": "$(get_version "grafana/grafana")",
"kubeStateMetrics": "$(get_version "kubernetes/kube-state-metrics")",
"nodeExporter": "$(get_version "prometheus/node_exporter")",
"prometheus": "$(get_version "prometheus/prometheus")",
"prometheusAdapter": "$(get_version "kubernetes-sigs/prometheus-adapter")",
"prometheusOperator": "$(get_version "prometheus-operator/prometheus-operator")",
"kubeRbacProxy": "$(get_version "brancz/kube-rbac-proxy")",
"configmapReload": "$(get_version "jimmidyson/configmap-reload")"
}
EOF