2025-09-13 16:12:01 +08:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
# scripts/resolve_k3s_versions.sh
|
|
|
|
|
|
# 输出:写入 $GITHUB_OUTPUT -> version, recent_versions
|
|
|
|
|
|
# 环境变量:
|
2025-09-13 19:29:29 +08:00
|
|
|
|
# OVERRIDE_VERSION 可选,手工覆盖版本(如 v1.33.4+k3s1)
|
|
|
|
|
|
# GITHUB_TOKEN 可选,避免匿名限速
|
2025-09-13 16:12:01 +08:00
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
OVERRIDE_VERSION="${OVERRIDE_VERSION:-}"
|
|
|
|
|
|
|
|
|
|
|
|
API_URL="https://api.github.com/repos/k3s-io/k3s/releases?per_page=100"
|
2025-09-13 19:29:29 +08:00
|
|
|
|
COMMON_HEADERS=(
|
|
|
|
|
|
-H "Accept: application/vnd.github+json"
|
|
|
|
|
|
-H "User-Agent: resolve_k3s_versions"
|
|
|
|
|
|
)
|
2025-09-13 16:12:01 +08:00
|
|
|
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
|
|
|
|
|
COMMON_HEADERS+=(-H "Authorization: Bearer ${GITHUB_TOKEN}")
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-09-13 19:29:29 +08:00
|
|
|
|
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"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-13 16:12:01 +08:00
|
|
|
|
resolve_latest() {
|
|
|
|
|
|
if [[ -n "${OVERRIDE_VERSION}" ]]; then
|
|
|
|
|
|
echo "${OVERRIDE_VERSION}"
|
|
|
|
|
|
return
|
|
|
|
|
|
fi
|
2025-09-13 19:29:29 +08:00
|
|
|
|
fetch_releases | jq -r '
|
|
|
|
|
|
[ .[] | select(.prerelease==false and .draft==false) ]
|
|
|
|
|
|
| sort_by(.published_at) | last | .tag_name
|
|
|
|
|
|
'
|
2025-09-13 16:12:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
resolve_recent() {
|
2025-09-13 19:29:29 +08:00
|
|
|
|
fetch_releases | jq -r '
|
|
|
|
|
|
[ .[] | select(.prerelease==false and .draft==false) ]
|
|
|
|
|
|
| sort_by(.published_at) | reverse
|
|
|
|
|
|
| .[0:3] | map(.tag_name) | @tsv
|
|
|
|
|
|
'
|
2025-09-13 16:12:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
LATEST="$(resolve_latest)"
|
|
|
|
|
|
RECENT="$(resolve_recent)"
|
|
|
|
|
|
|
2025-09-13 19:29:29 +08:00
|
|
|
|
# 兼容本地执行:若 $GITHUB_OUTPUT 未设置,则写到 /tmp
|
|
|
|
|
|
GITHUB_OUTPUT="${GITHUB_OUTPUT:-/tmp/resolve_k3s_versions.out}"
|
2025-09-13 16:12:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
echo "version=${LATEST}"
|
|
|
|
|
|
echo "recent_versions=${RECENT}"
|
|
|
|
|
|
} >> "${GITHUB_OUTPUT}"
|
|
|
|
|
|
|
|
|
|
|
|
echo "Resolved latest stable k3s version: ${LATEST}"
|
|
|
|
|
|
echo "Recent versions: ${RECENT}"
|