ci(external-it): retry dependency build on transient mirror failures - #30590
Conversation
The "Build dependencies for integration-tests" step (mvn install -am) hard-fails on a single transient dependency-fetch error, killing the job before any test runs. Wrap it in a 3x retry (mirroring the existing curl --retry on the login step) so a flaky artifact download rides out instead of failing the whole external-IT run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
There was a problem hiding this comment.
Pull request overview
Improves resilience of the external integration-test GitHub Actions workflow by adding a retry loop around the Maven dependency build step, reducing job failures caused by transient artifact/mirror fetch errors before tests start.
Changes:
- Wraps
mvn -DskipTests install -pl :openmetadata-integration-tests -amin a 3-attempt retry loop across the UI, search, and scale external-IT jobs. - Adds warning logging and a fixed backoff (
sleep 30) between attempts.
Comments suppressed due to low confidence (2)
.github/workflows/java-playwright-external.yml:374
- The retry loop always sleeps for 30s after the 3rd (final) failed attempt and emits a warning that says it is "retrying" even though no further retry will happen. This adds unnecessary CI delay and makes the log misleading; also consider emitting a final ::error:: message before failing.
for attempt in 1 2 3; do
mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0
echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s"
sleep 30
done
exit 1
.github/workflows/java-playwright-external.yml:518
- The retry loop always sleeps for 30s after the 3rd (final) failed attempt and emits a warning that says it is "retrying" even though no further retry will happen. This adds unnecessary CI delay and makes the log misleading; also consider emitting a final ::error:: message before failing.
for attempt in 1 2 3; do
mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0
echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s"
sleep 30
done
exit 1
| for attempt in 1 2 3; do | ||
| mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0 | ||
| echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s" | ||
| sleep 30 | ||
| done | ||
| exit 1 |
✅ Playwright Results — workflow succeededValidated commit ✅ 535 passed · ❌ 0 failed · 🟡 2 flaky · ⏭️ 5 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 48m 39s ⏱️ Max setup 3m 7s · max shard execution 14m 50s · max shard-job elapsed before upload 18m 13s · reporting 5s 🌐 203.90 requests/attempt · 2.89 app boots/UI scenario · 11.80% common-shard skew Optimization targets still in progress:
🟡 2 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
Address review (greptile/copilot): the retry loop logged 'retrying' and slept 30s even after the 3rd/final attempt. Only warn+sleep when another attempt follows, and emit a terminal ::error:: before exit 1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (3)
.github/workflows/java-playwright-external.yml:376
- The warning/error messages assume a "transient dependency-mirror" / "dependency resolution" failure, but this step can fail for other reasons (e.g., compilation). This can be misleading when diagnosing real failures; consider making the messages generic and/or include the Maven exit code, and propagate the final exit code instead of always exiting 1.
for attempt in 1 2 3; do
mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0
if [ "${attempt}" -lt 3 ]; then
echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s"
sleep 30
.github/workflows/java-playwright-external.yml:523
- The warning/error messages assume a "transient dependency-mirror" / "dependency resolution" failure, but this step can fail for other reasons (e.g., compilation). This can be misleading when diagnosing real failures; consider making the messages generic and/or include the Maven exit code, and propagate the final exit code instead of always exiting 1.
for attempt in 1 2 3; do
mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0
if [ "${attempt}" -lt 3 ]; then
echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s"
sleep 30
.github/workflows/java-playwright-external.yml:192
- The warning/error messages assume a "transient dependency-mirror" / "dependency resolution" failure, but this step can fail for other reasons (e.g., compilation). This can be misleading when diagnosing real failures; consider making the messages generic and/or include the Maven exit code, and propagate the final exit code instead of always exiting 1.
This issue also appears in the following locations of the same file:
- line 372
- line 519
for attempt in 1 2 3; do
mvn -DskipTests install -pl :openmetadata-integration-tests -am && exit 0
if [ "${attempt}" -lt 3 ]; then
echo "::warning::Build attempt ${attempt} failed (transient dependency-mirror error); retrying in 30s"
sleep 30
…30604) Parity with main (#30590): wrap the 'Build dependencies for integration-tests' step (mvn install -am) in all three external-IT jobs in a 3x retry so a transient artifact-fetch failure doesn't kill the job before any test runs. Warn+sleep only when a retry follows; terminal ::error:: on final failure. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Code Review ✅ ApprovedAdds a 3x retry loop to the external integration-test dependency build step in java-playwright-external.yml to mitigate transient Maven Central fetch failures. No issues found. OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar | Powered by Gitar — free for open source |
What
Wraps the
Build dependencies for integration-testsstep (mvn -DskipTests install -pl :openmetadata-integration-tests -am) in all three external-IT jobs (ui / search / scale) in a 3× retry loop.Why
A single transient dependency-fetch failure in that step kills the whole job before any test runs — the artifact resolution has no retry today, unlike the login step which already uses
curl --retry 5. On the collate-ci nightly the failing mirror is pulp (HTTP 500/404 on random jars:jersey-media-json-jackson,perfmark-api,swagger-maven-plugin, …); on GitHub-hosted runners this guards the same class of transient Maven Central hiccup. Different artifact every run ⇒ transient, not a real dependency problem.Note
This workflow (
java-playwright-external.yml) runs onubuntu-latest/ Maven Central, so the retry here is generic transient-fetch resilience. The pulp-specific failures live on the nightlyopenmetadata-nightly:k8s-java-it-search-release-dev.yml(collate-ci runners) — the same wrap is applied there in a separate PR. Bounded mitigation only: rides out transient errors, not a sustained mirror outage.🤖 Generated with Claude Code
Greptile Summary
The workflow now retries the integration-test dependency build up to three times in each external UI, search, and scale job, waiting 30 seconds only between failed attempts and reporting a terminal error after the final failure.
Confidence Score: 5/5
The PR appears safe to merge.
No blocking failure remains.
Important Files Changed
Reviews (2): Last reviewed commit: "ci(external-it): don't warn/sleep after ..." | Re-trigger Greptile