From f180fa6e953bede1b11dff884d7d5ad59265bae9 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 12:06:08 +0000 Subject: [PATCH 1/6] Raise Central publish polling timeout to 6h and log effective POM The central-publishing-maven-plugin polls the Central Portal for the 'published' deployment state (waitUntil=published) with a default waitMaxTime of 1800 seconds. The java-llama.cpp 5.0.6 release deploy hit that 30-minute limit on a slow Central day ('Polling for timed out before the deployment completed') even though the bundle had uploaded successfully and published server-side. Set waitMaxTime=21600 (6 h) so the fail-loud 'published' gate survives slow portal processing, and add an informational 'Show effective POM (debug)' step before each deploy so the resolved publishing configuration is visible in the job log. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- .github/workflows/publish.yml | 10 ++++++++++ pom.xml | 2 ++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d7bad1a..10fa3b0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -215,6 +215,11 @@ jobs: *-SNAPSHOT) echo "OK: -SNAPSHOT version, continuing snapshot deploy." ;; *) echo "::error::Refusing to publish non-SNAPSHOT version '$VERSION' from the snapshot job. Snapshot publishing requires a -SNAPSHOT version; releases go through the v* tag path."; exit 1 ;; esac + # Informational only (nothing depends on it): logs the effective POM with the same + # profile as the deploy below, so the resolved central-publishing configuration + # (waitUntil/waitMaxTime etc.) is visible for debugging. + - name: Show effective POM (debug) + run: mvn --batch-mode --no-transfer-progress -P release help:effective-pom - name: Deploy snapshot run: mvn --batch-mode --no-transfer-progress -P release deploy -DskipTests env: @@ -277,6 +282,11 @@ jobs: server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE + # Informational only (nothing depends on it): logs the effective POM with the same + # profile as the deploy below, so the resolved central-publishing configuration + # (waitUntil/waitMaxTime etc.) is visible for debugging. + - name: Show effective POM (debug) + run: mvn --batch-mode --no-transfer-progress -P release help:effective-pom - name: Deploy release run: mvn --batch-mode --no-transfer-progress -P release deploy -DskipTests env: diff --git a/pom.xml b/pom.xml index 678df0c..5db5c6f 100644 --- a/pom.xml +++ b/pom.xml @@ -820,6 +820,8 @@ SPDX-License-Identifier: Apache-2.0 central true published + + 21600 From 84531d201afbae94e58dec8e38e7522b5ba24296 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 21:42:06 +0000 Subject: [PATCH 2/6] Attach GitHub release assets even when the Central publish poll fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Central publish-poll timeout (seen on the jllama 5.0.6 release) reds the publish job after the bundle was already uploaded and published server-side, but two layers then dropped the GitHub release assets: the github-snapshot/github-release jobs required publish success, and the 'Collect signed artifacts' + upload steps inside the publish job ran after the deploy step and were skipped on its failure — even though the signed jars + .asc files already exist (GPG signing happens at verify, before the final Central wait). Fix: run collect/upload with 'if: ${{ !cancelled() }}', and let the GitHub jobs run on publish success OR failure (never on skipped or cancelled, so the publish_to_central manual gate still holds). If a deploy fails before signing, collect finds nothing, no artifact is uploaded, and the GitHub job fails loud on download-artifact. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- .github/workflows/publish.yml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 10fa3b0..1768daa 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -226,12 +226,18 @@ jobs: MAVEN_USERNAME: ${{ secrets.CENTRAL_USERNAME }} MAVEN_PASSWORD: ${{ secrets.CENTRAL_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + # Runs even when the deploy step failed: a Central publish-poll timeout reds the + # job *after* the bundle was uploaded (and typically published server-side), while + # the signed jars + .asc files already exist in target/ (signing happens at + # verify). Collecting on failure lets the github-snapshot job still attach them. - name: Collect signed artifacts + if: ${{ !cancelled() }} run: | mkdir -p signed-snapshot-assets cp target/*.jar signed-snapshot-assets/ 2>/dev/null || true cp target/*.jar.asc signed-snapshot-assets/ 2>/dev/null || true - uses: actions/upload-artifact@v7 + if: ${{ !cancelled() }} with: name: signed-snapshot-assets path: signed-snapshot-assets/ @@ -239,7 +245,10 @@ jobs: github-snapshot: name: Update Snapshot Pre-release on GitHub needs: [publish-snapshot] - if: needs.publish-snapshot.result == 'success' + # Also runs when publish-snapshot FAILED (not when skipped/cancelled): a Central + # publish-poll timeout reds that job after the artifacts were already uploaded — + # the GitHub pre-release assets must not be lost in that case. + if: ${{ !cancelled() && (needs.publish-snapshot.result == 'success' || needs.publish-snapshot.result == 'failure') }} runs-on: ubuntu-latest permissions: contents: write @@ -293,12 +302,18 @@ jobs: MAVEN_USERNAME: ${{ secrets.CENTRAL_USERNAME }} MAVEN_PASSWORD: ${{ secrets.CENTRAL_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + # Runs even when the deploy step failed: a Central publish-poll timeout reds the + # job *after* the bundle was uploaded (and typically published server-side), while + # the signed jars + .asc files already exist in target/ (signing happens at + # verify). Collecting on failure lets the github-release job still attach them. - name: Collect signed artifacts + if: ${{ !cancelled() }} run: | mkdir -p signed-release-assets cp target/*.jar signed-release-assets/ 2>/dev/null || true cp target/*.jar.asc signed-release-assets/ 2>/dev/null || true - uses: actions/upload-artifact@v7 + if: ${{ !cancelled() }} with: name: signed-release-assets path: signed-release-assets/ @@ -306,7 +321,10 @@ jobs: github-release: name: Attach Binaries to GitHub Release needs: [publish-release] - if: needs.publish-release.result == 'success' + # Also runs when publish-release FAILED (not when skipped/cancelled): a Central + # publish-poll timeout reds that job after the artifacts were already uploaded — + # the GitHub release assets must not be lost in that case. + if: ${{ !cancelled() && (needs.publish-release.result == 'success' || needs.publish-release.result == 'failure') }} runs-on: ubuntu-latest permissions: contents: write From 2899d1bad55da55ef28c43c0fb608fe48ccf9d58 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 08:57:47 +0000 Subject: [PATCH 3/6] Relax Central publish wait from published to validated Portal validation is where real deployment errors surface (bad signatures, missing javadoc, POM rules) and completes within minutes; the publish/replication step then runs server-side via autoPublish and, after a passed validation, effectively only stalls on portal slowness - the exact false-alarm that timed out the jllama 5.0.6 release job while the deployment published fine. waitUntil=validated keeps the fail-loud gate for genuine errors without the multi-hour wait; waitMaxTime=21600 stays as headroom for the validation poll. (uploaded was rejected: it would leave the job green on a validation failure.) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- pom.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5db5c6f..52cf29b 100644 --- a/pom.xml +++ b/pom.xml @@ -819,8 +819,12 @@ SPDX-License-Identifier: Apache-2.0 central true - published - + + validated + 21600 From ed16a762cd7b8ae5bb2e8ce1b356d5fe178175fd Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 11:35:33 +0000 Subject: [PATCH 4/6] chore(deps): bump pitest-maven to 1.25.6; converge checker-qual PIT gate re-run green on 1.25.6 (565/565 mutations killed, 100%). The checker-qual dependencyManagement pin fixes a pre-existing build break unrelated to the pitest bump: this pom's checker-qual moved to 4.2.1 while net.ladenthin:llama 5.0.4 (deliberately kept at 5.0.4) transitively brings 4.2.0, failing the enforcer's DependencyConvergence rule on every build. Same convergence pattern as the existing slf4j-api entry. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- pom.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52cf29b..a273646 100644 --- a/pom.xml +++ b/pom.xml @@ -145,6 +145,16 @@ SPDX-License-Identifier: Apache-2.0 slf4j-api 2.0.18 + + + org.checkerframework + checker-qual + ${checker.version} + @@ -350,7 +360,7 @@ SPDX-License-Identifier: Apache-2.0 org.pitest pitest-maven - 1.25.5 + 1.25.6 org.sonatype.central From 33d4659e513e355004284a75e23ebb2b4efa3a27 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 11:51:02 +0000 Subject: [PATCH 5/6] Revert checker-qual convergence pin (owner resolves via llama bump separately) The DependencyConvergence break (own checker-qual 4.2.1 vs llama 5.0.4's transitive 4.2.0) is left in place on purpose; it will be resolved by the llama dependency bump in a separate session. The pitest 1.25.6 bump from the previous commit stands; its 565/565 PIT verification ran with the (now-reverted) pin in place. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- pom.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pom.xml b/pom.xml index a273646..d8c2093 100644 --- a/pom.xml +++ b/pom.xml @@ -145,16 +145,6 @@ SPDX-License-Identifier: Apache-2.0 slf4j-api 2.0.18 - - - org.checkerframework - checker-qual - ${checker.version} - From 9fb92c513453f80c9a7ad37030bf0fabbd348fdd Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 13:13:48 +0000 Subject: [PATCH 6/6] Shorten waitUntil pom comment to a generic one-liner Replaces the multi-line, incident-specific comment with one generic line explaining why validated (not published) is used; no repo-specific references. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_018e3Pk8a2yzmrmNb2DEw9JS --- pom.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index d8c2093..7c49aee 100644 --- a/pom.xml +++ b/pom.xml @@ -819,10 +819,7 @@ SPDX-License-Identifier: Apache-2.0 central true - + validated 21600