Skip stale latest prebuilts in installers
ci / test (push) Waiting to run
ci / fuzz-smoke (push) Waiting to run
ci / windows-client (push) Waiting to run
ci / package-release (linux-x86_64, ubuntu-latest) (push) Waiting to run
ci / package-release (macos-aarch64, macos-14) (push) Waiting to run
ci / package-release (macos-x86_64, macos-13) (push) Waiting to run
ci / package-release (windows-x86_64, windows-latest) (push) Waiting to run
ci / publish-gitea-release (push) Blocked by required conditions
ci / remote-bench (push) Waiting to run
ci / test (push) Waiting to run
ci / fuzz-smoke (push) Waiting to run
ci / windows-client (push) Waiting to run
ci / package-release (linux-x86_64, ubuntu-latest) (push) Waiting to run
ci / package-release (macos-aarch64, macos-14) (push) Waiting to run
ci / package-release (macos-x86_64, macos-13) (push) Waiting to run
ci / package-release (windows-x86_64, windows-latest) (push) Waiting to run
ci / publish-gitea-release (push) Blocked by required conditions
ci / remote-bench (push) Waiting to run
This commit is contained in:
+70
@@ -222,6 +222,73 @@ release_latest_tag_download_url() {
|
||||
esac
|
||||
}
|
||||
|
||||
version_part() {
|
||||
version="$1"
|
||||
index="$2"
|
||||
printf '%s\n' "$version" \
|
||||
| sed 's/[^0-9][^0-9]*/ /g' \
|
||||
| awk -v index="$index" '{ value=$index; if (value == "") value=0; print value }'
|
||||
}
|
||||
|
||||
version_less_than() {
|
||||
left="$1"
|
||||
right="$2"
|
||||
for index in 1 2 3 4 5 6 7 8; do
|
||||
lpart="$(version_part "$left" "$index")"
|
||||
rpart="$(version_part "$right" "$index")"
|
||||
if [ "$lpart" -lt "$rpart" ]; then
|
||||
return 0
|
||||
fi
|
||||
if [ "$lpart" -gt "$rpart" ]; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
current_source_version() {
|
||||
if [ -f Cargo.toml ]; then
|
||||
sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | sed -n '1p'
|
||||
return 0
|
||||
fi
|
||||
[ -n "$repo" ] || return 1
|
||||
web_base="$(repo_web_base "$repo")" || return 1
|
||||
curl -fsSL "$web_base/raw/branch/main/Cargo.toml" 2>/dev/null \
|
||||
| sed -n 's/^version = "\(.*\)"/\1/p' \
|
||||
| sed -n '1p'
|
||||
}
|
||||
|
||||
latest_release_tag() {
|
||||
[ -n "$repo" ] || return 1
|
||||
web_base="$(repo_web_base "$repo")" || return 1
|
||||
latest_url="$(curl -fsSL -o /dev/null -w '%{url_effective}' "$web_base/releases/latest" 2>/dev/null || true)"
|
||||
case "$latest_url" in
|
||||
"$web_base"/releases/tag/*)
|
||||
tag="${latest_url##"$web_base"/releases/tag/}"
|
||||
[ -n "$tag" ] || return 1
|
||||
printf '%s\n' "$tag"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
latest_release_is_stale() {
|
||||
if [ -n "$binary_url" ] || [ -n "$binary_base" ] || [ "$binary_version" != "latest" ]; then
|
||||
return 1
|
||||
fi
|
||||
latest="$(latest_release_tag || true)"
|
||||
current="$(current_source_version || true)"
|
||||
[ -n "$latest" ] && [ -n "$current" ] || return 1
|
||||
latest="${latest#v}"
|
||||
if version_less_than "$latest" "$current"; then
|
||||
echo "latest release $latest is older than source $current; skipping stale prebuilt" >&2
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
find_extracted_binary() {
|
||||
find "$1" -type f -name "$2" 2>/dev/null | sed -n '1p'
|
||||
}
|
||||
@@ -312,6 +379,9 @@ verify_archive_version() {
|
||||
}
|
||||
|
||||
try_install_prebuilt() {
|
||||
if latest_release_is_stale; then
|
||||
return 1
|
||||
fi
|
||||
download_url="$(release_latest_tag_download_url || release_download_url)" || return 1
|
||||
tmpdir="$(mktemp -d)"
|
||||
archive="$tmpdir/$(release_artifact_name)"
|
||||
|
||||
Reference in New Issue
Block a user