Skip to content

Commit a4e06f3

Browse files
committed
Fix HttpComponents smoke artifact download
1 parent 363c140 commit a4e06f3

1 file changed

Lines changed: 105 additions & 45 deletions

File tree

.github/workflows/test-httpcomponents-client.yml

Lines changed: 105 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -124,40 +124,67 @@ jobs:
124124
continue-on-error: true
125125
run: |
126126
set -euo pipefail
127-
download_httpcomponents_tarball() {
127+
download_maven_jar() {
128+
local group_path="$1"
129+
local artifact="$2"
130+
local version="$3"
131+
local output="$4"
132+
DOWNLOAD_ATTEMPTS=3 \
133+
DOWNLOAD_CONNECT_TIMEOUT=30 \
134+
DOWNLOAD_MAX_TIME=180 \
135+
DOWNLOAD_RETRY_DELAY=5 \
136+
DOWNLOAD_WGET_TIMEOUT=60 \
137+
DOWNLOAD_WGET_WAITRETRY=5 \
138+
bash .github/scripts/download-with-fallback.sh "$output" \
139+
"https://repo.maven.apache.org/maven2/${group_path}/${artifact}/${version}/${artifact}-${version}.jar" \
140+
"https://repo1.maven.org/maven2/${group_path}/${artifact}/${version}/${artifact}-${version}.jar"
141+
}
142+
resolve_parent_property() {
128143
local version="$1"
129-
local output="$2"
130-
shift 2
131-
local urls=("$@")
144+
local property="$2"
145+
local parent_pom="$WORKDIR/httpclient5-parent-${version}.pom"
132146
DOWNLOAD_ATTEMPTS=3 \
133-
DOWNLOAD_CONNECT_TIMEOUT=45 \
134-
DOWNLOAD_MAX_TIME=480 \
147+
DOWNLOAD_CONNECT_TIMEOUT=30 \
148+
DOWNLOAD_MAX_TIME=120 \
135149
DOWNLOAD_RETRY_DELAY=5 \
136-
DOWNLOAD_WGET_TIMEOUT=90 \
150+
DOWNLOAD_WGET_TIMEOUT=60 \
137151
DOWNLOAD_WGET_WAITRETRY=5 \
138-
bash .github/scripts/download-with-fallback.sh "$output" "${urls[@]}"
152+
bash .github/scripts/download-with-fallback.sh "$parent_pom" \
153+
"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/client5/httpclient5-parent/${version}/httpclient5-parent-${version}.pom" \
154+
"https://repo1.maven.org/maven2/org/apache/httpcomponents/client5/httpclient5-parent/${version}/httpclient5-parent-${version}.pom"
155+
python3 - "$parent_pom" "$property" <<'PY'
156+
import re
157+
import sys
158+
text = open(sys.argv[1], encoding="utf-8").read()
159+
prop = re.escape(sys.argv[2])
160+
match = re.search(rf"<{prop}>([^<]+)</{prop}>", text)
161+
if not match:
162+
raise SystemExit(f"missing parent property: {sys.argv[2]}")
163+
print(match.group(1))
164+
PY
165+
}
166+
install_from_maven_central() {
167+
local version="$1"
168+
local root="$2"
169+
local lib_dir="$root/lib"
170+
mkdir -p "$lib_dir"
171+
local core_version
172+
local slf4j_version
173+
core_version=$(resolve_parent_property "$version" "httpcore.version")
174+
slf4j_version=$(resolve_parent_property "$version" "slf4j.version")
175+
download_maven_jar "org/apache/httpcomponents/client5" "httpclient5" "$version" "$lib_dir/httpclient5-${version}.jar"
176+
download_maven_jar "org/apache/httpcomponents/core5" "httpcore5" "$core_version" "$lib_dir/httpcore5-${core_version}.jar"
177+
download_maven_jar "org/apache/httpcomponents/core5" "httpcore5-h2" "$core_version" "$lib_dir/httpcore5-h2-${core_version}.jar"
178+
download_maven_jar "org/slf4j" "slf4j-api" "$slf4j_version" "$lib_dir/slf4j-api-${slf4j_version}.jar"
139179
}
140180
WORKDIR=$(mktemp -d)
141-
TARBALL="$WORKDIR/httpcomponents-client-${CURRENT_VERSION}-bin.tar.gz"
142-
if ! download_httpcomponents_tarball "$CURRENT_VERSION" "$TARBALL" \
143-
"https://archive.apache.org/dist/httpcomponents/httpclient/binary/httpcomponents-client-${CURRENT_VERSION}-bin.tar.gz" \
144-
"http://archive.apache.org/dist/httpcomponents/httpclient/binary/httpcomponents-client-${CURRENT_VERSION}-bin.tar.gz" \
145-
"https://downloads.apache.org/httpcomponents/httpclient/binary/httpcomponents-client-${CURRENT_VERSION}-bin.tar.gz"; then
146-
echo "current_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
147-
echo "install_status=failed" >> "$GITHUB_OUTPUT"
148-
echo "install_blocker=baseline_download_failed" >> "$GITHUB_OUTPUT"
149-
exit 0
150-
fi
151-
if ! tar -xzf "$TARBALL" -C "$WORKDIR"; then
181+
HC_HOME="$WORKDIR/httpcomponents-client-${CURRENT_VERSION}"
182+
if ! install_from_maven_central "$CURRENT_VERSION" "$HC_HOME"; then
152183
echo "current_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
153184
echo "install_status=failed" >> "$GITHUB_OUTPUT"
154-
echo "install_blocker=baseline_extract_failed" >> "$GITHUB_OUTPUT"
185+
echo "install_blocker=baseline_maven_artifact_download_failed" >> "$GITHUB_OUTPUT"
155186
exit 0
156187
fi
157-
HC_HOME=$(find "$WORKDIR" -maxdepth 2 -type d -name "httpcomponents-client-${CURRENT_VERSION}" | head -n 1)
158-
if [ -z "$HC_HOME" ]; then
159-
HC_HOME=$(dirname "$(dirname "$(find "$WORKDIR" -name 'httpclient5-*.jar' ! -name '*tests*' | head -n 1)")")
160-
fi
161188
if [ -z "$HC_HOME" ] || [ ! -d "$HC_HOME/lib" ]; then
162189
echo "current_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
163190
echo "install_status=failed" >> "$GITHUB_OUTPUT"
@@ -359,18 +386,60 @@ jobs:
359386
echo "duration=$((END_TIME - START_TIME))" >> "$GITHUB_OUTPUT"
360387
exit 0
361388
fi
362-
download_httpcomponents_tarball() {
363-
local version="$1"
364-
local output="$2"
365-
shift 2
366-
local urls=("$@")
389+
download_maven_jar() {
390+
local group_path="$1"
391+
local artifact="$2"
392+
local version="$3"
393+
local output="$4"
367394
DOWNLOAD_ATTEMPTS=3 \
368-
DOWNLOAD_CONNECT_TIMEOUT=45 \
369-
DOWNLOAD_MAX_TIME=480 \
395+
DOWNLOAD_CONNECT_TIMEOUT=30 \
396+
DOWNLOAD_MAX_TIME=180 \
370397
DOWNLOAD_RETRY_DELAY=5 \
371-
DOWNLOAD_WGET_TIMEOUT=90 \
398+
DOWNLOAD_WGET_TIMEOUT=60 \
372399
DOWNLOAD_WGET_WAITRETRY=5 \
373-
bash .github/scripts/download-with-fallback.sh "$output" "${urls[@]}"
400+
bash .github/scripts/download-with-fallback.sh "$output" \
401+
"https://repo.maven.apache.org/maven2/${group_path}/${artifact}/${version}/${artifact}-${version}.jar" \
402+
"https://repo1.maven.org/maven2/${group_path}/${artifact}/${version}/${artifact}-${version}.jar"
403+
}
404+
resolve_parent_property() {
405+
local workdir="$1"
406+
local version="$2"
407+
local property="$3"
408+
local parent_pom="$workdir/httpclient5-parent-${version}.pom"
409+
DOWNLOAD_ATTEMPTS=3 \
410+
DOWNLOAD_CONNECT_TIMEOUT=30 \
411+
DOWNLOAD_MAX_TIME=120 \
412+
DOWNLOAD_RETRY_DELAY=5 \
413+
DOWNLOAD_WGET_TIMEOUT=60 \
414+
DOWNLOAD_WGET_WAITRETRY=5 \
415+
bash .github/scripts/download-with-fallback.sh "$parent_pom" \
416+
"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/client5/httpclient5-parent/${version}/httpclient5-parent-${version}.pom" \
417+
"https://repo1.maven.org/maven2/org/apache/httpcomponents/client5/httpclient5-parent/${version}/httpclient5-parent-${version}.pom"
418+
python3 - "$parent_pom" "$property" <<'PY'
419+
import re
420+
import sys
421+
text = open(sys.argv[1], encoding="utf-8").read()
422+
prop = re.escape(sys.argv[2])
423+
match = re.search(rf"<{prop}>([^<]+)</{prop}>", text)
424+
if not match:
425+
raise SystemExit(f"missing parent property: {sys.argv[2]}")
426+
print(match.group(1))
427+
PY
428+
}
429+
install_from_maven_central() {
430+
local version="$1"
431+
local root="$2"
432+
local workdir="$3"
433+
local lib_dir="$root/lib"
434+
mkdir -p "$lib_dir"
435+
local core_version
436+
local slf4j_version
437+
core_version=$(resolve_parent_property "$workdir" "$version" "httpcore.version")
438+
slf4j_version=$(resolve_parent_property "$workdir" "$version" "slf4j.version")
439+
download_maven_jar "org/apache/httpcomponents/client5" "httpclient5" "$version" "$lib_dir/httpclient5-${version}.jar"
440+
download_maven_jar "org/apache/httpcomponents/core5" "httpcore5" "$core_version" "$lib_dir/httpcore5-${core_version}.jar"
441+
download_maven_jar "org/apache/httpcomponents/core5" "httpcore5-h2" "$core_version" "$lib_dir/httpcore5-h2-${core_version}.jar"
442+
download_maven_jar "org/slf4j" "slf4j-api" "$slf4j_version" "$lib_dir/slf4j-api-${slf4j_version}.jar"
374443
}
375444
376445
echo "latest_version=$LATEST" >> "$GITHUB_OUTPUT"
@@ -391,26 +460,17 @@ jobs:
391460
fi
392461
393462
NEXT_DIR=$(mktemp -d)
394-
NEXT_TAR="$NEXT_DIR/httpcomponents-client-${LATEST}-bin.tar.gz"
395-
if ! download_httpcomponents_tarball "$LATEST" "$NEXT_TAR" \
396-
"https://dlcdn.apache.org/httpcomponents/httpclient/binary/httpcomponents-client-${LATEST}-bin.tar.gz" \
397-
"https://downloads.apache.org/httpcomponents/httpclient/binary/httpcomponents-client-${LATEST}-bin.tar.gz" \
398-
"https://archive.apache.org/dist/httpcomponents/httpclient/binary/httpcomponents-client-${LATEST}-bin.tar.gz" \
399-
"http://archive.apache.org/dist/httpcomponents/httpclient/binary/httpcomponents-client-${LATEST}-bin.tar.gz"; then
463+
NEXT_HOME="$NEXT_DIR/httpcomponents-client-${LATEST}"
464+
if ! install_from_maven_central "$LATEST" "$NEXT_HOME" "$NEXT_DIR"; then
400465
echo "next_installed_version=install_failed" >> "$GITHUB_OUTPUT"
401466
echo "decision=next_install_failed" >> "$GITHUB_OUTPUT"
402467
echo "regression_result=Next version install failed on Arm64" >> "$GITHUB_OUTPUT"
403-
echo "comparison=Current pinned Apache HttpComponents Client version ${CURRENT} passed smoke tests in this run, but candidate version ${LATEST} could not be downloaded from the official Apache distribution mirrors." >> "$GITHUB_OUTPUT"
468+
echo "comparison=Current pinned Apache HttpComponents Client version ${CURRENT} passed smoke tests in this run, but candidate version ${LATEST} could not be downloaded from official Maven Central repositories." >> "$GITHUB_OUTPUT"
404469
echo "status=failed" >> "$GITHUB_OUTPUT"
405470
END_TIME=$(date +%s)
406471
echo "duration=$((END_TIME - START_TIME))" >> "$GITHUB_OUTPUT"
407472
exit 1
408473
fi
409-
tar -xzf "$NEXT_TAR" -C "$NEXT_DIR"
410-
NEXT_HOME=$(find "$NEXT_DIR" -maxdepth 2 -type d -name "httpcomponents-client-${LATEST}" | head -n 1)
411-
if [ -z "$NEXT_HOME" ]; then
412-
NEXT_HOME=$(dirname "$(dirname "$(find "$NEXT_DIR" -name 'httpclient5-*.jar' ! -name '*tests*' | head -n 1)")")
413-
fi
414474
NEXT_JAR=$(find "$NEXT_HOME/lib" -name 'httpclient5-[0-9]*.jar' | head -n 1)
415475
NEXT_REPORTED=$(basename "$NEXT_JAR" | sed -E 's/^httpclient5-([0-9A-Za-z.\-]+)\.jar$/\1/')
416476
javac -cp "$NEXT_HOME/lib/*" TestHttpClient.java

0 commit comments

Comments
 (0)