Files

50 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Writes output/13-maven-facts.txt: release dates and metadata read straight from Maven Central (retries on HTTP 429).
set -uo pipefail
cd "$(dirname "$0")/.."
mkdir -p output
M=https://repo1.maven.org/maven2
get() { # url -> body (retry on 429/empty)
for i in 1 2 3 4 5 6; do
body="$(curl -sS --fail "$1" 2>/dev/null)" && [ -n "$body" ] && { printf '%s' "$body"; return 0; }
sleep 20
done
return 1
}
head_lm() { # url -> Last-Modified
for i in 1 2 3 4 5 6; do
lm="$(curl -sSI "$1" 2>/dev/null | tr -d '\r' | grep -i '^last-modified:' | cut -d' ' -f2-)" && [ -n "$lm" ] && { echo "$lm"; return 0; }
sleep 20
done
echo "unavailable"
}
meta() { # label path
local x; x="$(get "$M/$2/maven-metadata.xml")" || { echo "$1: metadata unavailable"; return; }
echo "$1: release=$(grep -o '<release>[^<]*' <<<"$x" | cut -d'>' -f2) lastUpdated=$(grep -o '<lastUpdated>[^<]*' <<<"$x" | cut -d'>' -f2)"
sleep 3
}
{
echo "# Maven Central facts, read $(date -u +%Y-%m-%d)"
echo
echo "# maven-metadata.xml: <release> and <lastUpdated> (yyyyMMddHHmmss, UTC)"
meta "com.vladmihalcea:hibernate-types-60 " com/vladmihalcea/hibernate-types-60
meta "com.vladmihalcea:hibernate-types-55 " com/vladmihalcea/hibernate-types-55
meta "com.vladmihalcea:hibernate-types-5 " com/vladmihalcea/hibernate-types-5
meta "io.hypersistence:hypersistence-utils-hibernate-71" io/hypersistence/hypersistence-utils-hibernate-71
meta "io.hypersistence:hypersistence-utils-hibernate-73" io/hypersistence/hypersistence-utils-hibernate-73
echo
echo "# jar Last-Modified on Central (upload time)"
for j in org/hibernate/orm/hibernate-core/7.4.14.Final/hibernate-core-7.4.14.Final.jar \
org/springframework/boot/spring-boot/4.1.2/spring-boot-4.1.2.jar \
io/hypersistence/hypersistence-utils-hibernate-73/3.16.0/hypersistence-utils-hibernate-73-3.16.0.jar; do
echo "$(basename "$j"): $(head_lm "$M/$j")"; sleep 3
done
echo
echo "# hibernate.version that hypersistence-utils-hibernate-73:3.16.0 was built against (its pom)"
get "$M/io/hypersistence/hypersistence-utils-hibernate-73/3.16.0/hypersistence-utils-hibernate-73-3.16.0.pom" | grep -E '^\s*<hibernate.version>' | sed 's/^ *//'
echo
echo "# newest Jackson 3 databind on Central"
get "$M/tools/jackson/core/jackson-databind/maven-metadata.xml" | grep -E '<release>' | sed 's/^ *//'
} > output/13-maven-facts.txt
cat output/13-maven-facts.txt