Optimize APK update checks and CI builds
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Failing after 2h18m12s

This commit is contained in:
Joachim Schlöffel
2026-08-24 03:52:58 +02:00
parent 9b9473f497
commit 526e7ae7c9
7 changed files with 262 additions and 169 deletions
+86 -5
View File
@@ -13,17 +13,59 @@ fi
github_latest_release() {
local repo="$1"
local api_url="https://api.github.com/repos/${repo}/releases/latest"
local response
response="$(curl -fsSL \
-H 'Accept: application/vnd.github+json' \
-H 'X-GitHub-Api-Version: 2022-11-28' \
"${api_url}" 2>/dev/null)" || return 1
"https://api.github.com/repos/${repo}/releases/latest" 2>/dev/null)" || return 1
printf '%s\n' "${response}" | jq -er '.tag_name'
}
printf '%s\n' "${response}" \
| sed -n 's/^[[:space:]]*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' \
| head -n 1
github_release_rows() {
local repo="$1"
local current_tag="$2"
local page=1
local response
local release_count
while :; do
response="$(curl -fsSL \
-H 'Accept: application/vnd.github+json' \
-H 'X-GitHub-Api-Version: 2022-11-28' \
"https://api.github.com/repos/${repo}/releases?per_page=100&page=${page}" 2>/dev/null)" || return 1
release_count="$(printf '%s\n' "${response}" | jq -er 'if type == "array" then length else error("expected release array") end')" || return 1
[[ "${release_count}" -gt 0 ]] || return 0
printf '%s\n' "${response}" | jq -r '
.[]
| select(.draft | not)
| select(.prerelease | not)
| [
.tag_name,
(.published_at // "-"),
(.name // .tag_name),
.html_url,
(
(.body // "")
| gsub("[\\r\\n\\t]+"; " ")
| gsub("[`*_>#]"; "")
| gsub(" +"; " ")
| gsub("^ +"; "")
| gsub(" +$"; "")
| if length > 240 then .[0:237] + "..." else . end
)
]
| @tsv
'
if printf '%s\n' "${response}" | jq -e --arg tag "${current_tag}" '
any(.[]; .tag_name == $tag and (.draft | not) and (.prerelease | not))
' >/dev/null; then
return 0
fi
page=$((page + 1))
done
}
apkbuild_value() {
@@ -104,6 +146,7 @@ printf '%-14s %-14s %-14s %-18s %s\n' "PACKAGE" "CURRENT" "LATEST" "STATUS" "UPS
has_update=0
has_unknown=0
release_details=""
while IFS= read -r package_dir; do
apk_validate_package_dir "${package_dir}"
@@ -121,6 +164,40 @@ while IFS= read -r package_dir; do
if version_is_newer "${latest_version}" "${current_version}"; then
status="update-available"
has_update=1
package_details="${package_name}: ${current_version} -> ${latest_version}"
case "${version_prefix}" in
none|"") current_tag="${current_version}" ;;
*) current_tag="${version_prefix}${current_version}" ;;
esac
if release_rows="$(github_release_rows "${repo}" "${current_tag}")" && [[ -n "${release_rows}" ]]; then
current_tag_found=0
while IFS=$'\t' read -r release_tag published_at release_name release_url release_excerpt; do
[[ -n "${release_tag}" ]] || continue
release_version="$(normalize_version "${release_tag}" "${version_prefix}")"
if [[ "${release_tag}" == "${current_tag}" ]]; then
current_tag_found=1
fi
if version_is_newer "${release_version}" "${current_version}"; then
package_details+=$'\n'
package_details+=" ${release_version} (${published_at}) — ${release_name}"
package_details+=$'\n'
package_details+=" ${release_url}"
if [[ -n "${release_excerpt}" ]]; then
package_details+=$'\n'
package_details+=" ${release_excerpt}"
fi
fi
done <<< "${release_rows}"
if [[ "${current_tag_found}" == 0 ]]; then
package_details+=$'\n'
package_details+=" Note: current release tag ${current_tag} was not found; listed releases compare newer than ${current_version}."
fi
else
package_details+=$'\n'
package_details+=" Note: release details could not be fetched."
fi
release_details+=$'\n'
release_details+="${package_details}"
else
status="current"
fi
@@ -139,6 +216,10 @@ while IFS= read -r package_dir; do
"${upstream_url}"
done < <(apk_package_dirs "${repo_root}")
if [[ -n "${release_details}" ]]; then
printf '\nRelease details:%s\n' "${release_details}"
fi
if [[ "${mode}" == "fail" && ( "${has_update}" -ne 0 || "${has_unknown}" -ne 0 ) ]]; then
exit 1
fi