Skip to content

ci(external-it): retry dependency build on transient mirror failures - #30590

Merged
mohityadav766 merged 2 commits into
mainfrom
ci/external-it-build-retry
Jul 28, 2026
Merged

ci(external-it): retry dependency build on transient mirror failures#30590
mohityadav766 merged 2 commits into
mainfrom
ci/external-it-build-retry

Conversation

@mohityadav766

@mohityadav766 mohityadav766 commented Jul 28, 2026

Copy link
Copy Markdown
Member

What

Wraps the Build dependencies for integration-tests step (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 on ubuntu-latest / Maven Central, so the retry here is generic transient-fetch resilience. The pulp-specific failures live on the nightly openmetadata-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

Filename Overview
.github/workflows/java-playwright-external.yml Adds correctly bounded Maven build retries to all three external integration-test jobs; the final attempt no longer announces or waits for another retry.

Reviews (2): Last reviewed commit: "ci(external-it): don't warn/sleep after ..." | Re-trigger Greptile

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>
Copilot AI review requested due to automatic review settings July 28, 2026 13:51
@github-actions

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

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 skip-pr-checks label.

@github-actions github-actions Bot added backend safe to test Add this label to run secure Github workflows on PRs labels Jul 28, 2026
Comment thread .github/workflows/java-playwright-external.yml Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 -am in 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

Comment on lines +184 to +189
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-actions

Copy link
Copy Markdown
Contributor

✅ Playwright Results — workflow succeeded

Validated commit 1cbeaf564da0aea81fe49da13002987f1edd6964 in Playwright run 30365466887, attempt 1.

✅ 535 passed · ❌ 0 failed · 🟡 2 flaky · ⏭️ 5 skipped · 🧰 0 lifecycle flaky

Performance

Blocking 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:

  • Browser traffic was 203.9 requests per attempt (convergence target: fewer than 200).
  • Application boot ratio was 2.89 per UI scenario (1616 boots / 560 scenarios; convergence target: at most 1).
Shard Passed Failed Flaky Skipped Lifecycle failed Lifecycle flaky
🟡 Shard chromium-01 81 0 2 0 0 0
✅ Shard chromium-02 103 0 0 0 0 0
✅ Shard chromium-03 111 0 0 3 0 0
✅ Shard chromium-04 102 0 0 0 0 0
✅ Shard data-asset-rules-01 61 0 0 0 0 0
✅ Shard domain-isolation-01 14 0 0 0 0 0
✅ Shard global-state-01 23 0 0 0 0 0
✅ Shard ingestion-01 1 0 0 0 0 0
✅ Shard reindex-01 2 0 0 0 0 0
✅ Shard search-01 10 0 0 0 0 0
✅ Shard search-rbac-01 27 0 0 2 0 0
🟡 2 flaky test(s) (passed on retry)
  • Pages/Entity.spec.tsDomain Propagation (shard chromium-01, 1 retry)
  • Pages/Entity.spec.tsDomain Propagation (shard chromium-01, 1 retry)

📦 Download artifacts

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>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@mohityadav766
mohityadav766 merged commit 4eb0518 into main Jul 28, 2026
63 of 65 checks passed
@mohityadav766
mohityadav766 deleted the ci/external-it-build-retry branch July 28, 2026 18:52
mohityadav766 added a commit that referenced this pull request Jul 28, 2026
…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>
@gitar-bot

gitar-bot Bot commented Jul 28, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

Adds 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.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar | Powered by Gitar — free for open source

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants