From 5de727884baffa4ed69f33323467548f078c3758 Mon Sep 17 00:00:00 2001 From: Joe Wicentowski Date: Thu, 26 Mar 2026 01:17:19 -0400 Subject: [PATCH 1/2] [ci] Add surefire fork timeouts to prevent CI hangs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configure forkedProcessTimeoutInSeconds=600 and forkedProcessExitTimeoutInSeconds=60 in both maven-surefire-plugin and maven-failsafe-plugin in exist-parent/pom.xml. This kills forked JVMs that hang (e.g. DeadlockIT, MoveResourceTest) after 10 minutes instead of waiting indefinitely for the 45-minute GitHub Actions step timeout. Also reduce the integration test step timeout from 45 to 30 minutes in ci-test.yml — with surefire killing hung forks at 10 minutes, 30 minutes is plenty for the full integration suite. Clean runs complete in ~3.5 minutes; the 600s timeout is a safety net that only fires on hung tests. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/ci-test.yml | 2 +- exist-parent/pom.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index d75243a7a16..06e423d3f53 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -95,7 +95,7 @@ jobs: run: ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd -V -B --no-transfer-progress test -DtrimStackTrace=false -D'dependency-check.skip' -D'license.skip' -D'mvnd.maxLostKeepAlive=6000' - name: Maven Integration Tests if: matrix.test-type == 'integration' - timeout-minutes: 45 + timeout-minutes: 30 run: ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd -V -B --no-transfer-progress verify -DskipUnitTests=true -DtrimStackTrace=false -D'dependency-check.skip' -D'license.skip' -D'mvnd.maxLostKeepAlive=6000' - name: Javadoc (ubuntu unit only) if: matrix.os == 'ubuntu-latest' && matrix.test-type == 'unit' diff --git a/exist-parent/pom.xml b/exist-parent/pom.xml index 4c9650a180c..2f1b961a507 100644 --- a/exist-parent/pom.xml +++ b/exist-parent/pom.xml @@ -842,6 +842,10 @@ However it can make it hard to diagnose problems if tests leak state; If you experience such a problem you may want to set it to `false` whilst debugging --> true + + 600 + 60 @{jacocoArgLine} --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.ref=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED -Dfile.encoding=${project.build.sourceEncoding} UK @@ -863,6 +867,10 @@ org.apache.maven.plugins maven-failsafe-plugin 3.5.5 + + 600 + 60 + org.apache.maven.plugins From fda23d293f026972a08f0ed233074f9139213281 Mon Sep 17 00:00:00 2001 From: Joe Wicentowski Date: Wed, 8 Apr 2026 15:49:40 -0400 Subject: [PATCH 2/2] [ci] Add wagon timeouts to Maven Build; run license check offline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two CI reliability improvements: 1. Maven Build step: Add wagon timeout flags via MAVEN_OPTS (connectionTimeout=10s, readTimeout=30s). Since MAVEN_OPTS is passed to the Maven daemon JVM, these become system properties that configure wagon's HTTP transport — causing stalled connections to repo.exist-db.org (CLOSE_WAIT) and repo.evolvedbinary.com (504/unreachable) to time out after 30s instead of hanging indefinitely. 2. License check step: Add --offline flag. The license job always restores the Maven cache from develop (which has all required artifacts), so no network access is needed. Eliminates 7+ minute timeouts from the same repo issues. Result: ~20s instead of 7+ minutes. Note: wagon timeout flags must be in MAVEN_OPTS (daemon JVM system properties), not as -D flags on the mvnd command line (which go to the client, not daemon). Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/ci-test.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 06e423d3f53..4d6ec945fa2 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -17,7 +17,7 @@ jobs: distribution: liberica java-version: ${{ env.DEV_JDK }} - uses: ./.github/actions/maven-cache - - run: mvn -V -B --no-transfer-progress license:check + - run: mvn -V -B --no-transfer-progress --offline license:check timeout-minutes: 10 dependencies: name: Dependency checks @@ -88,6 +88,11 @@ jobs: timeout-minutes: 30 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_OPTS: >- + -DtrimStackTrace=false + -D'maven.resolver.transport=wagon' + -D'maven.wagon.http.connectionTimeout=10000' + -D'maven.wagon.http.readTimeout=30000' run: ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd -V -B --no-transfer-progress -T 1C compile test-compile -DtrimStackTrace=false -D'dependency-check.skip' -D'license.skip' --projects '!exist-installer' - name: Maven Unit Tests if: matrix.test-type == 'unit'