artifacts/scripts/resolve_k3s_versions.sh
shenlan a2bfcc06d0
Update resolve_k3s_versions.sh
Signed-off-by: shenlan <manbuzhe2009@qq.com>
2025-09-13 19:29:29 +08:00

70 lines
1.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# scripts/resolve_k3s_versions.sh
# 输出:写入 $GITHUB_OUTPUT -> version, recent_versions
# 环境变量:
# OVERRIDE_VERSION 可选,手工覆盖版本(如 v1.33.4+k3s1
# GITHUB_TOKEN 可选,避免匿名限速
set -euo pipefail
OVERRIDE_VERSION="${OVERRIDE_VERSION:-}"
API_URL="https://api.github.com/repos/k3s-io/k3s/releases?per_page=100"
COMMON_HEADERS=(
-H "Accept: application/vnd.github+json"
-H "User-Agent: resolve_k3s_versions"
)
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
COMMON_HEADERS+=(-H "Authorization: Bearer ${GITHUB_TOKEN}")
fi
fetch_releases() {
# 如果触发限流,给出清晰错误
local body
set +e
body="$(curl -fsSL "${COMMON_HEADERS[@]}" "${API_URL}")"
local rc=$?
set -e
if [[ $rc -ne 0 || -z "$body" ]]; then
echo "ERROR: failed to fetch GitHub releases." >&2
exit 1
fi
if grep -q '"API rate limit exceeded"' <<<"$body"; then
echo "ERROR: GitHub API rate limit exceeded. Provide GITHUB_TOKEN." >&2
exit 1
fi
printf '%s' "$body"
}
resolve_latest() {
if [[ -n "${OVERRIDE_VERSION}" ]]; then
echo "${OVERRIDE_VERSION}"
return
fi
fetch_releases | jq -r '
[ .[] | select(.prerelease==false and .draft==false) ]
| sort_by(.published_at) | last | .tag_name
'
}
resolve_recent() {
fetch_releases | jq -r '
[ .[] | select(.prerelease==false and .draft==false) ]
| sort_by(.published_at) | reverse
| .[0:3] | map(.tag_name) | @tsv
'
}
LATEST="$(resolve_latest)"
RECENT="$(resolve_recent)"
# 兼容本地执行:若 $GITHUB_OUTPUT 未设置,则写到 /tmp
GITHUB_OUTPUT="${GITHUB_OUTPUT:-/tmp/resolve_k3s_versions.out}"
{
echo "version=${LATEST}"
echo "recent_versions=${RECENT}"
} >> "${GITHUB_OUTPUT}"
echo "Resolved latest stable k3s version: ${LATEST}"
echo "Recent versions: ${RECENT}"