Repository navigation
ci: log the URL and status when engine image downloads fail - #4612
Conversation
The Lucee 5, 6 and 7 test images downloaded their extensions and the SQLite JDBC jar with `wget -q`, so a failed build reported only wget's exit code 8 and not which download failed or what the server answered. The downloads now use `wget -nv -S`, which logs each URL with the response status and headers on every attempt. -S is needed because wget 1.21 prints no status for an attempt it is going to retry. 403 joins --retry-on-http-error. ext.lucee.org is S3 behind CloudFront, which answers 403 rather than 404 for a missing object and on edge errors; these pinned URLs exist, so a 403 there is transient. 404 is not retried: only Maven Central returns it, for a real miss. The SQLite JDBC SHA-256 check is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
Wheels Test Results44 786 tests - 216 489 43 931 ✅ - 211 607 15m 0s ⏱️ - 1h 42m 6s Results for commit f1b6a17. ± Comparison against base commit a149b85. This pull request removes 216489 tests. |
|
Review: approve @ f1b6a17 The change is the same in all three Lucee Dockerfiles: Retrying 403 makes sense. I checked the live servers:
So a 403 on these URLs is an edge or transient error, and retrying it costs only a few seconds when the object really is missing. Leaving 404 out is right, because only Maven Central uses 404, and there it means the file is really gone. Nothing sensitive is logged.
CI is green. "Cold start: lucee7" builds the image from this branch, and its log shows the new lines: The Lucee 5 and 6 images are built only by the compat matrix. Their edits are textually identical to Lucee 7, so the risk is low. LOW (wording, optional): with |
|
Correction: I'm withdrawing the LOW wording note in my review above. The unfiltered "Cold start: lucee7" log shows that |
Summary
The Lucee 5, 6 and 7 test images download two Lucee extensions from
ext.lucee.organd the SQLite JDBC jar from Maven Central withwget -q. When one of those failed, the build log showed only wget's exit code 8 ("server issued an error response"), so it couldn't tell which download failed or what status came back.Logging:
-qbecomes-nv -S. Each download now logs its URL and the response status and headers on every attempt.-nvalone isn't enough: wget 1.21 prints no status for an attempt it's going to retry, only the URL.-SprintsHTTP/1.1 <status>for every attempt.x-cache/x-amz-cf-pop, i.e. which edge answered.Retries: 403 added to
--retry-on-http-error; 404 not added.RUNstep failed about 0.7 s after it started. The retried statuses (429/5xx) would have backed off for several seconds, so the server answered with a status outside that list and wget gave up at once.ext.lucee.orgis S3 behind CloudFront (server: AmazonS3,via: ... (CloudFront)). It answers 403, not 404, for a missing object (x-cache: Error from cloudfront), and CloudFront edge errors can also surface as 403. The URLs here are pinned and exist, so a 403 from them is transient, and retrying it costs about 10 s on a real miss.The SQLite JDBC SHA-256 check from #4598 is unchanged. The SQL Server image's
wgetalready logs (no-q) and is untouched.Verification
1. Built
tools/docker/lucee7locally with--no-cache; build exit 0. The download step now logs:2. Ran a failing download, using the same flags against a missing
ext.lucee.orgobject, in the pinned base image. Every attempt logs its status, then wget gives up after 5 tries (exit 4):3. For comparison, without
-S. A non-retried status logsERROR 403: Forbidden.and exits 8. A retried status logs only the URL on each attempt.🤖 Generated with Claude Code