Skip to content

Update Renovatebot Gradle Updates (major) - #1194

Open
protocols-renovate[bot] wants to merge 1 commit into
masterfrom
renovate/major-renovatebot-gradle-updates
Open

Update Renovatebot Gradle Updates (major)#1194
protocols-renovate[bot] wants to merge 1 commit into
masterfrom
renovate/major-renovatebot-gradle-updates

Conversation

@protocols-renovate

@protocols-renovate protocols-renovate Bot commented May 6, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
com.nimbusds:nimbus-jose-jwt 9.4810.9.1 age confidence
com.squareup.okhttp3:logging-interceptor (source) 4.12.05.5.0 age confidence
com.squareup.okhttp3:mockwebserver (source) 4.12.05.5.0 age confidence
com.squareup.okhttp3:okhttp (source) 4.12.05.5.0 age confidence
io.zonky.test.postgres:embedded-postgres-binaries-bom 17.9.018.4.0 age confidence
org.flywaydb:flyway-database-postgresql 11.20.313.3.0 age confidence
org.flywaydb:flyway-core 11.20.313.3.0 age confidence
org.web3j:crypto (source) 5.0.26.0.0 age confidence
org.web3j:core (source) 5.0.26.0.0 age confidence
org.web3j:besu (source) 5.0.26.0.0 age confidence
io.rest-assured:rest-assured (source) 5.5.76.0.1 age confidence
org.mock-server:mockserver-netty (source) 5.15.07.6.0 age confidence
io.vertx:vertx-health-check (source) 4.5.265.1.6 age confidence
io.vertx:vertx-junit5 (source) 4.5.265.1.6 age confidence
io.vertx:vertx-web (source) 4.5.265.1.6 age confidence
io.vertx:vertx-web-client (source) 4.5.265.1.6 age confidence
io.vertx:vertx-unit (source) 4.5.265.1.6 age confidence
io.vertx:vertx-core (source) 4.5.265.1.6 age confidence
io.vertx:vertx-codegen (source) 4.5.265.1.6 age confidence
net.ltgt.errorprone 4.4.05.1.0 age confidence
org.owasp.dependencycheck 12.2.113.0.0 age confidence
org.junit:junit-bom (source) 5.14.36.1.3 age confidence

Release Notes

connect2id/nimbus-jose-jwt (com.nimbusds:nimbus-jose-jwt)

v10.9.1

Compare Source

v10.9

Compare Source

v10.8

Compare Source

v10.7

Compare Source

v10.6

Compare Source

v10.5

Compare Source

v10.4.2

Compare Source

v10.4.1

Compare Source

v10.4

Compare Source

v10.3.1

Compare Source

v10.3

Compare Source

v10.2

Compare Source

v10.1

Compare Source

v10.0.2

Compare Source

v10.0.1

Compare Source

v10.0

Compare Source

lysine-dev/okhttp (com.squareup.okhttp3:logging-interceptor)

v5.5.0

2026-08-16

This release introduces opt-in support for [Encrypted Client Hello (ECH)]. This new feature
improves user privacy by encrypting domain names in transit. With regular TLS, your coffee shop’s
Wi-Fi router can see that you’re visiting wikipedia.com, but it cannot see which page you’re
looking at. With ECH, the router observes only the IP address. This additional privacy is most
effective on sites hosted by big CDNs because the IP address doesn’t imply a particular website.

This requires ECH support in the platform’s TLS stack. Today this is only Android 17 (API 37,
released June 2026). When other TLS stacks add ECH support, we'll integrate them.

ECH took a lot of work to implement because the encryption keys are published over DNS in the
[HTTPS resource record], and we needed to write new code to fetch these records. This release
includes a major update to OkHttp’s DNS API: it now supports multiple resource record types (not
just IP addresses!), asynchronous streaming results, and in-memory caching.

To opt in, you can use DnsOverHttps:

// DnsOverHttps itself uses OkHttpClient. Build both clients upon the
// same bootstrap client so they share a connection pool and dispatcher.
val bootstrapClient = OkHttpClient()

// This sample uses Cloudflare's 1.1.1.1 DnsOverHttps service.
val client = bootstrapClient.newBuilder()
  .dns(DnsOverHttps.Builder()
    .client(bootstrapClient)
    .url("https://1.1.1.1/dns-query".toHttpUrl())
    .build())
  .build()

You could also opt in with our new AndroidDns API. Unfortunately, the privacy benefits of ECH are
thwarted because its DNS queries are not encrypted by default.

// AndroidDns fetches the HTTPS DNS resource records necessary for ECH.
val client = OkHttpClient.Builder()
  .dns(AndroidDns())
  .build()
  • New: OkHttp artifacts are now signed with our [new signing key]. This project and three sibling
    projects ([Retrofit], [Okio], and [SQLDelight]) recently joined [the Commonhaus Foundation].
  • Fix: MockWebServer’s @StartStop annotation now supports @Nested JUnit 5 tests.
  • Fix: Our default TLS hostname verifier now reject hosts that fail IP canonicalization.
  • Fix: Closing a multipart part's sink no longer closes the entire request body.
  • Fix: Flush HTTP/1 request bodies before detaching the timeout. We had a bug where timeouts
    weren’t applied correctly.
  • Fix: Follow [RFC 1008]'s requirements for HTTP QUERY redirects.
  • Fix: Fall back to no proxy when the system proxy selector throws. Previously this would cause
    the HTTP call to crash.
  • Upgrade: [Okio 3.18.1][okio_3_18_1].

v5.4.0

2026-06-08

  • New: Add superpowers to interceptors. Interceptors can now override anything settable on
    OkHttpClient.Builder, such as the cache, connection pool, socket factory, and DNS. We expect
    this will allow most users to use interceptors everywhere, insted of mixing and matching
    interceptors with custom Call.Factory wrappers.
  • Fix: Limit each HTTP/2 response to 256 KiB of total headers.
  • Upgrade: [kotlinx.coroutines 1.11.0][coroutines_1_11_0]. This is used by the optional
    okhttp-coroutines artifact.
  • Upgrade: [GraalVM 25.0.3][graalvm_25].
  • Upgrade: [Okio 3.17.0][okio_3_17_0].

v5.3.2

2025-11-18

  • Fix: Don't delay triggering timeouts. In Okio 3.16.0 we introduced a regression that caused
    timeouts to fire later than they were supposed to.

  • Upgrade: [Okio 3.16.4][okio_3_16_4].

v5.3.1

2025-11-16

This release is the same as 5.3.0. Okio 3.16.3 didn't have a necessary fix!

  • Upgrade: [Okio 3.16.3][okio_3_16_3].

v5.3.0

2025-10-30

  • New: Add tags to Call, including computable tags. Use this to attach application-specific
    metadata to a Call in an EventListener or Interceptor. The tag can be read in any other
    EventListener or Interceptor.

      override fun intercept(chain: Interceptor.Chain): Response {
        chain.call().tag(MyAnalyticsTag::class) {
          MyAnalyticsTag(...)
        }
    
        return chain.proceed(chain.request())
      }
  • New: Support request bodies on HTTP/1.1 connection upgrades.

  • New: EventListener.plus() makes it easier to observe events in multiple listeners.

  • Fix: Don't spam logs with ‘Method isLoggable in android.util.Log not mocked.’ when using
    OkHttp in Robolectric and Paparazzi tests.

  • Upgrade: [Kotlin 2.2.21][kotlin_2_2_21].

  • Upgrade: [Okio 3.16.2][okio_3_16_2].

  • Upgrade: [ZSTD-KMP 0.4.0][zstd_kmp_0_4_0]. This update fixes a bug that caused APKs to fail
    [16 KB ELF alignment checks][elf_alignment].

v5.2.3

2025-11-18

  • Fix: Don't delay triggering timeouts. In Okio 3.16.0 we introduced a regression that caused
    timeouts to fire later than they were supposed to.

  • Upgrade: [Okio 3.16.4][okio_3_16_4].

v5.2.2

2025-11-16

This release is the same as 5.2.1. Okio 3.16.3 didn't have a necessary fix!

  • Upgrade: [Okio 3.16.3][okio_3_16_3].

v5.2.1

2025-10-09

  • Fix: Don't crash when calling Socket.shutdownOutput() or shutdownInput() on an SSLSocket
    on Android API 21 through 23. This method throws an UnsupportedOperationException, so we now
    catch that and close the underlying stream instead.

  • Upgrade: [Okio 3.16.1][okio_3_16_1].

v5.2.0

2025-10-07

  • New: Support [HTTP 101] responses with Response.socket. This mechanism is only supported on
    HTTP/1.1. We also reimplemented our websocket client to use this new mechanism.

  • New: The okhttp-zstd module negotiates [Zstandard (zstd)][zstd] compression with servers that
    support it. It integrates a new (unstable) [ZSTD-KMP] library, also from Square. Enable it like
    this:

    val client = OkHttpClient.Builder()
      .addInterceptor(CompressionInterceptor(Zstd, Gzip))
      .build()
  • New: Support the QUERY HTTP method. You will need to set the Request.cacheUrlOverride
    property to cache calls made with this method. The RequestBody.sha256() may be helpful here;
    use it to compose a cache URL from the query body.

  • New: Publish events when calls must wait to execute. EventListener.dispatcherQueueStart()
    is invoked when a call starts waiting, and dispatcherQueueEnd() is invoked when it's done.

  • New: Request.toCurl() returns a copy-pasteable [curl] command consistent with Chrome’s and
    Firefox’s ‘copy as cURL’ features.

  • New: Support [JPMS]. We replaced our Automatic-Module-Name metadata with proper
    module-info.java files.

  • Fix: Recover gracefully when worker threads are interrupted. When we introduced fast fallback in
    OkHttp 5.0, we started using background threads while connecting. Sadly that code didn't handle
    interruptions well. This is now fixed.

  • Upgrade: [Kotlin 2.2.20][kotlin_2_2_20].

  • Upgrade: [Okio 3.16.0][okio_3_16_0].

v5.1.0

2025-07-07

  • New: Response.peekTrailers(). When we changed Response.trailers() to block instead of
    throwing in 5.0.0, we inadvertently removed the ability for callers to peek the trailers
    (by catching the IllegalStateException if they weren't available). This new API restores that
    capability.

  • Fix: Don't crash on trailers() if the response doesn't have a body. We broke [Retrofit] users
    who read the trailers on the raw() OkHttp response, after its body was decoded.

v5.0.0

2025-07-02

This is our first stable release of OkHttp since 2023. Here's the highlights if you're upgrading
from OkHttp 4.x:

OkHttp is now packaged as separate JVM and Android artifacts. This allows us to offer
platform-specific features and optimizations. If your build system handles [Gradle module metadata],
this change should be automatic.

MockWebServer has a new coordinate and package name. We didn’t like that our old artifact
depends on JUnit 4 so the new one doesn’t. It also has a better API built on immutable values. (We
intend to continue publishing the old okhttp3.mockwebserver artifact so there’s no urgency to
migrate.)

Coordinate Package Name Description
com.squareup.okhttp3:mockwebserver3:5.0.0 mockwebserver3 Core module. No JUnit dependency!
com.squareup.okhttp3:mockwebserver3-junit4:5.0.0 mockwebserver3.junit4 Optional JUnit 4 integration.
com.squareup.okhttp3:mockwebserver3-junit5:5.0.0 mockwebserver3.junit5 Optional JUnit 5 integration.
com.squareup.okhttp3:mockwebserver:5.0.0 okhttp3.mockwebserver Obsolete. Depends on JUnit 4.

OkHttp now supports Happy Eyeballs ([RFC 8305]) for IPv4+IPv6 networks. It attempts both IPv6
and IPv4 connections concurrently, keeping whichever connects first.

We’ve improved our Kotlin APIs. You can skip the builder:

val request = Request(
  url = "https://cash.app/".toHttpUrl(),
)

OkHttp now supports [GraalVM].

Here’s what has changed since 5.0.0-alpha.17:

  • Upgrade: [Okio 3.15.0][okio_3_15_0].
  • Upgrade: [Kotlin 2.2.0][kotlin_2_2_0].
  • Fix: Don't crash with a NoSuchMethodError when using OkHttp with the Sentry SDK.
  • Fix: Retain the query data in the old okhttp3.mockwebserver.RecordedRequest.path property. We
    inadvertently changed this behavior when we introduced the mockwebserver3 API.
zonkyio/embedded-postgres-binaries (io.zonky.test.postgres:embedded-postgres-binaries-bom)

v18.2.0

Changes:
  • Fixed ELF page alignment issues affecting systems with non-standard page sizes, such as Asahi Linux on Apple Silicon (#​105)
LFDT-web3j/web3j (org.web3j:crypto)

v6.0.0

Bug Fixes
  • Fix shutdown hook accumulation in Async.defaultExecutorService() — hooks are now removed when executor is explicitly shut down #​2265
  • Fix dynamic array decoding in generated wrappers for struct types #​2272
  • Fix incorrect casting for array types in generated contract wrappers #​2274
  • Fix NullPointerException when deriving child keys from public-only Bip32ECKeyPair #​2284
  • Fix Utf8String encoding + dynamic array for non-ASCII characters #​2289
  • Fix pass accessList to parent in Transaction7702 constructor #​2292
  • Fix Transaction serialization failure when fee fields are null #​2293
  • Fix stale EIP-7691 blob base-fee update fraction #​2300
  • Fix integration-tests: remove unstable legacy Sonatype repositories #​2304
Features
  • Add signTypedData address recovery test #​2260
  • Add support for EIP-7594 blob transaction wrapper #​2263
  • Add http code to the ClientConnectionException #​2295
  • Full EIP-7594 tx and Kzg cell proof generation #​2296
  • Added Agent and skills files #​2298
  • Add EIP-7702 authorization signing and recovery #​2299
  • Add eth_blobBaseFee RPC (EIP-7918 / Fusaka-correct blob base fee) #​2300
  • Adds context7 json file #​2301
  • Bump snapshot version to 6.0.0 #​2302
  • Add support for txpool_contentFrom JSON-RPC method to query transaction pool by address #​2262
  • Add support for txpool_inspect JSON-RPC method #​2262
BREAKING CHANGES

v5.0.3

Bug Fixes
  • Fix Async executor lifecycle to support safe shutdown and reuse #​2244
  • Fix Async executor lifecycle to safely recreate executor after shutdown and prevent RejectedExecutionException #​2255
  • Replace raw usage of EthLog.LogResult with parameterized type to improve type safety #​2252
Features
  • route resolve() through the Universal Resolver (ENSv2 readiness) #​2283
BREAKING CHANGES
rest-assured/rest-assured (io.rest-assured:rest-assured)

v6.0.1

  • Fix a JsonPath denial-of-service where oversized numeric literals in untrusted JSON were parsed into arbitrarily large BigIntegers, an O(n^2) CPU and heap cost. JSON number tokens are now capped at 1000 characters by default, configurable via JsonPathConfig.numberLengthLimit and JsonConfig.numberLengthLimit (a negative value disables the check). Thanks to Brian Lee (PhD security researcher, Georgia Tech SSLab) for the private report.
  • Use custom Jackson 3 object mapper in JsonPath (#​1858) (thanks to gkiel for PR)
  • Fix Spring MockMvc cookie handling with Jakarta-only servlet APIs (fixes #​1853)
  • Use Jackson 3 mapper in JsonPath deserialization when Jackson 3 is the only Jackson on the classpath (#​1865) (thanks to dickerpulli for PR)
  • Add JsonPath.using(Jackson3ObjectMapperFactory) overload (#​1861) (thanks to Anusha-7254 for PR)
  • Fix typo in duplicate-finder-maven-plugin phase property (#​1866) (thanks to metacosm for PR)
  • Fix incorrect serialization of enum constants declared with a body when used as query/path parameters (#​1799)
  • The spring-mock-mvc and spring-web-test-client modules now target Spring Framework 7 and no longer expose their own Spring version as a transitive dependency (the Spring dependencies are declared optional), so they no longer drag Spring 5 onto a Spring Boot 4 / Spring Framework 7 classpath. This removes the need for manual Spring exclusions on Spring Boot 4 (fixes #​1853, #​1868). Thanks to spencerarq for the detailed investigation.

v6.0.0

  • spring-mock-mvc module now supports Spring 7.x
  • spring-web-test-client now supports Spring 7.x
  • Upgraded commons-lang3 from 3.18.0 to 3.19.0
  • The spring modules now required Spring 5.3+ (previously 5.1 was required)
  • New minimum Java baseline is now 17
  • New minimum Groovy base is now 5.x
  • Support for Jackson 3 object mapping
  • Support for Yasson 3 object mapping
  • Support for jakarta JsonB/Johnzon 3 object mapping
  • Migrate json-path fully to Java, bypass GroovyShell for evaluation (#​1844) (thanks to Michael Edgar for PR)
    • This fixed some nasty memory leaks when using JsonPath heavily in long running processes
  • Stop resetting ResponseParserRegistrar during build (#​1759, #​1505, #​1207 & #​978) (thanks to Marc Easen for PR)
  • Skip Null filters in FilterContextImpl (#​1834) (thanks to Boyarshinov Alexander for PR)
  • Upgraded Kotlin extension module to use Kotlin 2.2.21
mock-server/mockserver-monorepo (org.mock-server:mockserver-netty)

v7.6.0

Changed
  • The three Kubernetes container-integration cases that need Java-built images — helm_sidecar_injection
    (admission-webhook sidecar injection), helm_clustered_convergence, and helm_jgroups_dns_ping (both the
    -clustered Infinispan image) — now run blocking in CI instead of recording a skip. Previously the CI helm step
    ran with no JDK and never built those images, so all three recorded an honest but permanent SKIP — coverage that
    looked green while proving nothing. A new :maven: build container-test images (jars) step in the
    mockserver-container-tests pipeline builds the mockserver-netty, mockserver-k8s-webhook, and
    mockserver-state-infinispan jars from the tree (once, via the Maven-in-Docker reactor) and hands them to the
    helm step as Buildkite artifacts; the helm step downloads them and does cheap docker builds (a COPY into
    distroless) to produce the -clustered and mockserver-webhook images, then runs the suite. The jars travel as
    artifacts (~200 MB total) rather than docker saved images (~1.3 GB), mirroring the node-launcher / WAR hand-off. Both
    layers fail closed: the helm step exits non-zero if any jar artifact is absent, and the harness runs with
    REQUIRE_CLUSTERED_IMAGE=true/REQUIRE_WEBHOOK_IMAGE=true so an image that is expected-but-absent is recorded as a
    FAILURE, never a skip — a skip in CI is now impossible. Local container_integration_tests/integration_tests.sh
    is unchanged for a developer without the images: it still records a comprehensible SKIP (no fail-closed flag set),
    and the harness now also builds the mockserver-webhook image locally (build_webhook_docker) so the sidecar case
    runs blocking in local dev too — it was never built by the harness before, so that case had always skipped.
Added
  • Two new rules in the always-on check-false-green-guards.sh CI gate. Rule 4 fails the build if a CI step runs the
    container-integration harness with the helm/k3d cases active but does not export both REQUIRE_CLUSTERED_IMAGE=true and
    REQUIRE_WEBHOOK_IMAGE=true — the exact way the three image-dependent Kubernetes cases could silently revert to a green
    SKIP. It is keyed on the step's behaviour (invokes integration_tests.sh without SKIP_HELM_TESTS=true), not on a
    filename, so a rename or a second helm-running step is covered automatically. Rule 5 fails the build if a
    mockserver-core test that performs a JVM-global logging side effect (reaching LogManager.readConfiguration's handler
    reset() via the static ConfigurationProperties logging setters or a forced fresh <clinit>) is not in the
    sequential-tests include list — the shape behind a release-blocking flake that ParallelStaticStateGuardTest
    structurally cannot catch. Both rules fail closed on an empty corpus and carry a rotating allow-list. See
    docs/operations/false-green-guards.md.
  • A jarPath launcher option and matching MOCKSERVER_JAR_PATH environment variable for mockserver-node, pointing
    start_mockserver at a pre-provisioned mockserver-netty jar-with-dependencies instead of downloading one from
    Maven Central. When set, that exact jar is launched and no download is attempted; a configured-but-missing path is a
    hard error (... refusing to fall back to downloading a release) rather than a silent fall-back to a released
    jar, so a missing artifact fails loudly. Mirrors the existing MOCKSERVER_BINARY_BASE_URL bring-your-own-artifact
    path for the standalone binary, and serves air-gapped/corporate installs as well as testing a locally-built jar
    (jarPath takes precedence over mockServerVersion/artifactory*; the option beats the env var). The Node launcher
    integration tests now use it in CI: a new :maven: build node launcher jar step builds the jar from the tree and
    the launcher-test step downloads it as an artifact and launches it via MOCKSERVER_JAR_PATH — so the suite finally
    tests the repo's own code instead of the last release. Previously it ran a downloaded release chosen by
    package.json's version, so a mockserver-core fix could not green it and a regression could not red it; that
    released jar also carried the shipped dynamic-CA generation race (fixed on master in 4cff56e61) and flaked ~8% of
    runs. The launcher step fails closed if the tree-built jar is absent rather than reverting to a download, and
    local npm test outside CI is unchanged (with neither the option nor the env var set it still downloads as before).
  • A structural wire-contract test for the LLM provider codecs (LlmCodecStructuralContractTest), breaking the
    self-derivation weakness in the golden-file drift test. LlmCodecGoldenFileTest regenerates its golden bodies
    from the codec itself (-Dmockserver.updateLlmGoldens=true), so a structural codec defect — a renamed field, a
    wrong SSE event name, a dropped finish_reason — bakes straight into its own golden and the byte-for-byte drift
    test then passes forever, confirming only that the codec is consistent with itself (token counts were already
    pinned separately by shouldEncodeCanonicalTokenUsageCounts; the bodies were not). The new test asserts the live
    codec output against hand-authored expectations taken from each provider's published API schema — required
    fields, JSON types, the enum discriminators each provider uses (object/type/finish_reason/stop_reason/
    finishReason/status/done), the tool-call envelope shape (arguments as a JSON string for OpenAI/Responses
    vs a structured object for Anthropic/Gemini/Ollama), and the exact SSE event-name sequence for the event-typed
    providers — across all seven chat/completion providers (Azure and Bedrock via their delegate codecs). Crucially it
    never reads the golden files and is unaffected by -Dmockserver.updateLlmGoldens=true, so regenerating goldens
    cannot silence it. Each named defect class was injected into a codec and confirmed to turn the test red without
    regenerating goldens (OpenAI renamed finish_reason; Anthropic SSE content_block_deltacontent_delta; Gemini
    dropped finishReason; Responses renamed status; Ollama renamed terminal done), then reverted. Residual
    streaming-over-the-wire behaviour remains covered by LlmAgentLoopE2eTest.
  • Endpoint-level test (HttpStateCassetteEndpointTest) and an authoritative CassetteRegistry javadoc note pinning
    the settled decision that loading and recording register a cassette automatically. The record_llm_fixtures
    and load_expectations_from_file MCP tools already auto-register the fixture in the process-wide CassetteRegistry
    (keyed by file path, origin recorded/loaded, upserting on re-load/re-record) so it surfaces under
    GET /mockserver/cassettes and in the dashboard's Cassettes tab without a manual PUT /mockserver/cassettes — but
    nothing pinned that a so-registered cassette is actually retrievable through the GET endpoint, and the registration
    policy lived only in the two MCP callers, inviting the question to be re-opened. The new test drives
    GET /mockserver/cassettes (and the bare /cassettes alias) against a registry populated the way the load/record
    handlers populate it and asserts the documented body shape (path, derived filename, expectation count, origin,
    lastUsed), that record-then-load on one path yields a single upserted entry, and that a server reset clears it. The
    MCP tools and consumer docs (ai_mcp_tools.html) already stated this behaviour; both are now clarified to say the
    fixture is registered automatically. This closes the "CassetteRegistry auto-population" product-decision item by
    recording the decision in code, docs, and a test rather than leaving it to resurface.
  • Compile gates for the dashboard composer's generated client code in Python, Ruby, Go and Rust
    (.buildkite/scripts/steps/ui-client-codegen-compile.sh, wired into pipeline-ui.yml), closing the gap where
    five of the composer's seven languages had no compile check — only Java (ui-java-codegen-compile.sh) and C#
    (ComposerCodegenEquivalenceTests.cs) were gated, so an emitter bug or a client-API rename would ship broken
    generated code to users caught by nothing (the existing per-language tests only string/byte-compare the emitter
    output, never feed it to a compiler). Each gate drives the shared representative composer matrix
    (extractParityCases.ts — the exact combos the byte-identity parity tests use) through that language's emitter
    and runs the lightest credible toolchain check: python -m py_compile and ruby -c catch any emitter bug that
    produces malformed source (the strongest static check for a dynamically-typed client with no shipped type stubs),
    while Go (go build/go vet ./...) and Rust (cargo check) compile the generated code against the real
    in-repo mockserver-client-go / mockserver-client-rust, so a renamed client method fails the build — the direct
    analog of the Java javac gate. Node was already covered: the tsc type-proof in node.test.ts
    (typecheck-node-codegen.mjs) runs under npm test, so the orphaned-script concern was already resolved by that
    test. All four new gates are proven to go red (emitter drift → non-zero exit) and green. Each phase runs in its
    toolchain's Docker image via run-in-docker.sh; set CODEGEN_COMPILE_USE_DOCKER=false for host validation.
  • Config-to-client wiring tests for the GCS and Azure blob-store backends
    (GcsBlobStoreRegistrarConfigWiringTest, AzureBlobStoreRegistrarConfigWiringTest), closing the gap where
    only S3 (S3BlobStoreRegistrarConfigWiringTest) proved that blobStoreType configuration is turned into a
    working client. The GCS and Azure contract tests hand-build their clients (new GcsBlobStore(storage, …),
    new AzureBlobStore(containerClient, …)), so the registrar that reads the bucket/container name, endpoint,
    credentials and project from configuration and constructs the client was never exercised — a wiring bug there
    would ship silently because the contract tests bypass it. The new tests drive each registrar from configuration
    only (as production does) against the same Docker emulator the contract tests use (fake-gcs-server for GCS,
    Azurite 3.36.0 --skipApiVersionCheck for Azure) and assert the wiring that can actually be got wrong:
    endpoint override, credentials, project id, and that a round-tripped object lands in the configured
    bucket/container under the configured key prefix — verified through an independent admin client so a
    mis-wired name cannot pass. Docker-gated via the canonical DockerAvailability.isAvailable(...) probe.
  • The Node and Python Testcontainers modules (mockserver-testcontainers/node, mockserver-testcontainers/python)
    now start a real MockServer container in CI and assert against it, closing a false-green gap where both published
    client libraries had jobs that passed having exercised nothing (npm run test:unit and pytest -m "not docker"
    both skipped the container). Their CI steps now mount the Docker socket, run the existing integration tests that
    start a mockserver/mockserver container and drive it over HTTP, and — mirroring the Go/.NET/Rust steps — fail
    closed by grepping for an evidence marker the test prints only after a real container answered
    PUT /mockserver/status with 200. A skip (test filtered out, renamed, or Docker unusable) therefore fails the
    CI build loudly instead of reading as green, while the tests still degrade gracefully to a skip off-CI.
  • A GitHub Actions workflow (.github/workflows/dependency-submission.yml) now submits the resolved Maven dependency
    graph so Dependabot vulnerability alerts stay accurate for the monorepo layout. GitHub's managed Maven
    auto-submission only discovers a project at the repository root, so it silently stopped when the Java project moved
    into mockserver/ — freezing the alerting graph at a pre-move snapshot that produced phantom Spring advisories and
    hid already-landed log4j-api/jsoup fixes. The workflow resolves and submits the mockserver/ reactor (which
    includes examples/java) and the separate mockserver-maven-plugin build under distinct correlators, path-gated to
    mockserver/**/pom.xml. Dependabot's security-update pull requests were unaffected — they read manifests directly;
    it was only the alerting graph that had gone stale.
  • A CI guard (.buildkite/scripts/steps/check-certificate-expiry.sh, wired into the Java pipeline) now sweeps every
    committed certificate PEM and fails the build when any certificate is already expired or expires within 30 days,
    warning between 30 and 180 days. It checks every certificate in a chain file, allow-lists the one intentional
    expired test fixture while asserting it stays expired, and enforces two structural invariants that previously had
    no automation: every leaf-cert.pem must expire on or before its sibling ca.pem, and the shipped default CA
    files must stay in lockstep (the PKCS#1 and PKCS#8 CA private keys are the same key, that key matches the CA
    certificate, and the two committed copies of the CA certificate remain byte-identical). Certificate expiry had
    previously only ever been discovered by the build going red.
  • A standing CI guard (check-false-green-guards.sh) that fails closed when a new "false-green" test shape is
    introduced — a test or CI step that reports success while verifying nothing. The 2026-07-21 coverage audit named
    these shapes but they lived only in plan documents, and the repository then produced ~a dozen fresh instances in a
    single day. The guard enforces the three that can be pinned down precisely and each caused a real shipped false
    green: (1) every JUnit suite gated by Assume.assumeTrue(DockerAvailability.isAvailable(...)) must be paired with
    assert-suite-ran.sh over its reports, or a broken Docker socket skips it while the build stays green; (2) no CI
    step may mount the Docker socket and then deselect the Docker-marked tests (e.g. pytest -m "not docker"),
    starting no container yet passing; (3) no container-integration logTestSkip may park deferred work ("CI wiring is
    a follow-up") as a green skip. It runs always-on (a new false green can enter from any of several pipelines) and
    carries a justified, self-verifying allow-list that fails if an entry no longer names what it claims. Wiring this
    up also closed a live gap it found — the Gcs/Azure RegistrarConfigWiringTest cloud suites ran under a Docker
    socket in CI but were not fail-closed-asserted. See docs/operations/false-green-guards.md.
  • A local-only, opt-in K3D_LOCAL_CA_BUNDLE hook in container_integration_tests/helm-deploy.sh so the Helm
    integration suite's k3d cluster can be stood up on a developer machine behind a corporate TLS-inspection proxy.
    When set, start-up-k8s overmounts the given combined CA bundle (system/public roots + corporate root) as the
    k3s node's containerd trust store at cluster-create time; when unset the k3d cluster create command is
    byte-identical to before, so CI (which never sets it) is unchanged. Warns rather than fails if the variable is set
    but the file is missing, mirroring LOCAL_DOCKER_CA_BUNDLE in .buildkite/scripts/run-in-docker.sh. This unblocks
    the three Kubernetes test-coverage gaps that were previously (and incorrectly) deferred as impossible behind the
    proxy: the host Docker daemon already trusts the corporate root so the node image pulls, but the in-node
    containerd has its own public-roots-only trust store and otherwise cannot pull even the rancher/mirrored-pause
    sandbox image (every pod fails sandbox creation with x509: certificate signed by unknown authority). See
    docs/operations/build-system.mdLocal Development Behind a Corporate TLS-Inspection Proxy.
  • Two live Kubernetes container-integration tests that exercise admission-webhook and JGroups discovery paths which
    previously shipped unproven. helm_sidecar_injection deploys the chart with webhook.enabled=true (self-signed TLS
    bootstrap Jobs + webhook handler Deployment + MutatingWebhookConfiguration), drives a real labelled pod CREATE
    through the admission path, and asserts the resulting pod spec carries the injected mockserver-sidecar container,
    mockserver-iptables-init init container, and mockserver.org/injected annotation — with a negative-control pod (no
    opt-in annotation) that must not be injected, so a webhook that injects unconditionally fails the test.
    helm_jgroups_dns_ping deploys two clustered replicas and asserts the headless Service is truly headless
    (clusterIP: None), that JGROUPS_DNS_QUERY is wired to its FQDN, that it resolves to ≥2 pod IPs (Endpoints plus an
    in-cluster nslookup), that a ≥2-node JGroups/Infinispan view forms (the anti "two clusters of one" guard), and that
    state converges across the pods — exercising the Kubernetes DNS discovery path that JGroupsKubernetesStackTest
    (XML-parse only) and ClusteredTwoNodeTest (loopback MPING) never run. Both were proven red by degrading the exact
    behaviour they name (deleting the MutatingWebhookConfiguration; deleting the headless Service and rolling the pods).
    Both depend on Java-built images (the -clustered variant and the mockserver-webhook handler); when those images
    are absent — e.g. the CI helm step runs with SKIP_JAVA_BUILD=true and no JDK — the cases record an honest SKIP
    rather than a misleading pass, and run blocking only where the images exist.
Changed
  • helm_clustered_convergence is now a blocking container-integration test rather than non_blocking || true. The
    swallowed k3d image import ... 2>/dev/null || true is replaced by a deterministic import that verifies the image is
    present in the k3d node's containerd (via crictl) before deploying, and a pre-deploy ensure_namespace_absent guard
    removes the real back-to-back flake (helm install into a still-Terminating namespace left by a prior run/retry).
    When the -clustered image is absent (CI helm step, no JDK) the case records an honest SKIP; when present it runs
    blocking so a genuine clustering regression reds the suite.
  • The docker_compose_war_tomcat container integration test (MockServer deployed as a WAR into Tomcat 10.1) now
    actually runs in CI, closing a false-green gap where it silently skipped with "WAR artifact not present … CI wiring
    is a follow-up"
    — a working behavioural test that never ran, in a demonstrated weak spot (the ROOT-context
    percent-decode regression 66b5d51d2 shipped and broke builds, and this is the suite that would have caught it).
    Buildkite steps share no filesystem, so the WAR (already built by the reactor in the :maven: build step but never
    published) is now uploaded via that step's artifact_paths and downloaded by container-tests-run.sh into the path
    the test globs. A missing WAR now fails the step closed (both an explicit presence check in container-tests-run.sh
    and, defensively, prepare_war in integration_test.sh red the case) instead of skipping — a skip that reads as green
    is the exact defect being closed. The case runs in the Java pipeline's master-only :docker: container integration tests step (triggered by mockserver/, mockserver-ui/, test-fixtures/ changes); it was already declared required
    in expected_tests.manifest, so no manifest change was needed.
  • Upgraded Netty from 4.2.16.Final to 4.2.17.Final and, in lockstep, netty-tcnative-boringssl-static from
    2.0.78.Final to 2.0.81.Final (the tcnative version the Netty 4.2.17 BOM aligns to). The two must move together:
    the Netty BOM pins the transitively-resolved native-classifier tcnative jars to 2.0.81.Final, so a mismatched
    main-artifact pin fails the enforcer DependencyConvergence rule in mockserver-core. The NETTY_TCNATIVE build
    args in every docker/*/Dockerfile were updated to match. This unblocks Dependabot PRs #​2523 and #​2532.
  • Removed the manual netty-tcnative version-synchronisation step that made every Netty upgrade a convergence trap.
    netty-tcnative-boringssl-static no longer has its own version property or dependencyManagement override — the
    imported netty-bom now governs the base artifact and every OS/arch native classifier together, so the two can no
    longer diverge and break the enforcer DependencyConvergence rule. The server jars (which ship tcnative classes
    but, per #​1778, no natives) are stamped at build time with their resolved tcnative version at
    META-INF/mockserver-tcnative.version, and every docker/*/Dockerfile now derives the native .so download from
    that stamp instead of a hardcoded NETTY_TCNATIVE= build arg (SHA256 verification of the download is unchanged).
    Both jars a Dockerfile can consume carry the stamp: the shaded mockserver-netty-no-dependencies jar used by the
    source=copy path (release/snapshot/CI) and the mockserver-netty assembly -jar-with-dependencies.jar used by
    the default source=download path (the public reference build), stamped via the same script so they cannot drift. A
    Netty bump therefore needs no tcnative pin update and no Docker edit, and the native .so can never be a different
    version than the tcnative classes it pairs with.
  • BREAKING BEHAVIOUR: the default enabled TLS protocols are now TLSv1.2,TLSv1.3 (previously
    TLSv1,TLSv1.1,TLSv1.2), and tlsAllowInsecureProtocols now defaults to false (previously true).

    TLSv1 and TLSv1.1 are deprecated by RFC 8996 and vulnerable to BEAST/POODLE, and TLSv1.3 was previously never
    negotiated unless explicitly configured. This is a breaking change for a client that can only speak TLSv1 or
    TLSv1.1: its handshake to MockServer will now fail. To
    restore the legacy protocols set mockserver.tlsProtocols=TLSv1,TLSv1.1,TLSv1.2 AND
    mockserver.tlsAllowInsecureProtocols=true (both are required — the insecure-protocol filter strips TLSv1/TLSv1.1
    unless it is explicitly allowed). The inbound server always applies the strong Http2SecurityUtil cipher suites, so
    no weak-cipher combination becomes reachable as a result of this change.
  • Renewed the TLS/mTLS test-certificate fixtures. The two mutual-TLS authentication CAs (which were 151 days from
    expiry) and the three Netty TLS integration CAs were re-issued with a 10-year validity, and every leaf they sign
    was re-issued with a shorter 5-year validity so that a leaf can no longer outlive its issuing CA. The existing CA
    and leaf private keys were preserved (so key encodings, Subject/Authority Key Identifiers and existing signatures
    are unchanged); only the certificates were re-minted.
Security
  • Pinned org.apache.logging.log4j:log4j-api to 2.25.5 to resolve GHSA-qv9r-c865-cp47. It is pulled in transitively
    at compile scope (via spring-boot-starter-logging -> log4j-to-slf4j) and lands in a shaded artifact, so it is
    shipped; the pin manages log4j-api only (log4j-core is not on the dependency tree).
  • Pinned org.jsoup:jsoup to 1.23.1 to resolve GHSA-pmhh-3w7g-xqp8. jsoup is used only at test scope (never shipped);
    the pin guards against a future transitive downgrade below the fixed version.
  • Upgraded com.azure:azure-storage-blob from 12.29.1 to 12.35.0 in the optional mockserver-blob-azure module to
    resolve the io.projectreactor.netty:reactor-netty-http chained-redirect credential-leak advisory (fixed in
    reactor-netty 1.2.8). The old stack pulled azure-core-http-netty:1.15.10, which pins the vulnerable
    reactor-netty 1.0.48 pair transitively; 12.35.0 pulls azure-core-http-netty:1.16.5, which advances both
    reactor-netty-http and reactor-netty-core to 1.2.18 as a matched pair. This exposure surfaced only when
    GitHub's Maven dependency-graph submission was restored (submission had silently frozen at a pre-move snapshot, so
    the alert had been invisible to Dependabot). The whole Azure stack (azure-core 1.58.1, reactor-netty 1.2.18,
    reactor-core 3.7.19) remains Java-8 bytecode, so the Java 17 floor is preserved. A module-scoped
    dependencyManagement pin of io.projectreactor:reactor-core to 3.7.19 reconciles the one internal off-by-one in
    the 12.35.0 stack (azure-core declares 3.7.18, reactor-netty declares 3.7.19) so the enforcer
    DependencyConvergence rule stays satisfied. The Docker-gated Azurite contract test moves to Azurite 3.36.0 with
    --skipApiVersionCheck, since the newer SDK negotiates a Storage REST API version that runs ahead of every released
    Azurite build.
  • Pinned three transitive dependencies to close vulnerability alerts that surfaced only when GitHub's Maven
    dependency-graph submission was restored (submission had silently frozen at a pre-move snapshot on 5 May, so these
    real exposures had been invisible to Dependabot). None required moving the direct dependency that introduces them:
    • Jackson 3 (tools.jackson.core:jackson-databind, :jackson-core, tools.jackson.dataformat:jackson-dataformat-yaml)
      pinned to 3.1.5 to resolve GHSA-5gvw-p9qm-jgwh (vulnerable >=3.0.0, <=3.1.4). It arrives at compile scope via
      com.networknt:json-schema-validator:3.0.6 and is shade-relocated into shaded_package.tools.jackson, so it
      ships in every distributed jar — the one broad, shipped, runtime exposure of the three. All three artifacts
      resolve in lockstep and are pinned together so the enforcer DependencyConvergence rule stays satisfied. The pin
      is inherited by the separate mockserver-maven-plugin build (same parent pom), closing its alert too.
    • at.yawk.lz4:lz4-java pinned to 1.11.1 to resolve GHSA-6qcp-4vqm-vf35 (native XXHash JVM crash; vulnerable
      <=1.11.0). Arrives via org.apache.kafka:kafka-clients:3.9.2 — optional in mockserver-netty, runtime in
      mockserver-async. Note this is the at.yawk.lz4 fork coordinate, not org.lz4.
    • org.apache.commons:commons-compress pinned to 1.27.1 to resolve the >=1.21, <1.26.0 advisories. Arrives at
      test scope via org.testcontainers:testcontainers:1.21.4, which re

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.


Note

High Risk
Vert.x 5 and Flyway 13 affect the HTTP runtime and DB migrations; JUnit 6, web3j 6, and Nimbus JWT 10 are broad major upgrades across tests and JWT-related transitive use—breakage may only show up in CI.

Overview
Renovate-driven major version bumps in build.gradle and gradle/versions.gradle only—no application source changes.

Build tooling: OWASP Dependency-Check 12.2.113.0.0, Error Prone Gradle plugin 4.4.05.1.0.

Managed dependencies: JUnit BOM 5.14.36.1.3; Vert.x stack 4.5.265.1.6; web3j (besu, core, crypto) 5.0.26.0.0; OkHttp 4.12.05.5.0; Flyway 11.20.313.3.0; REST Assured 5.5.76.0.1; MockServer Netty 5.15.07.6.0; embedded Postgres binaries BOM 17.9.018.4.0; Nimbus JOSE JWT 9.4810.9.1.

Expect compile/test and integration behavior to shift with these majors; full ./gradlew build (and slashing-protection Flyway paths) is the main validation gate.

Reviewed by Cursor Bugbot for commit dbff7fe. Bugbot is set up for automated code reviews on this repo. Configure here.

Comment thread gradle.properties Outdated
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from c3b982f to 2e84225 Compare May 28, 2026 04:48
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 2e84225 to 8f6fda0 Compare June 3, 2026 05:16

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8f6fda0. Configure here.

Comment thread gradle/versions.gradle Outdated
// Import log4j BOM first with higher priority
mavenBom "org.apache.logging.log4j:log4j-bom:2.25.4"
mavenBom 'org.junit:junit-bom:5.14.3'
mavenBom 'org.junit:junit-bom:6.1.0'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

JUnit 6 Mockito mismatch

Medium Severity

Importing junit-bom 6.1.0 aligns all Jupiter and Platform artifacts to JUnit 6, but mockito-junit-jupiter stays at 5.23.0, which is built and released against JUnit 5. Core tests that use @ExtendWith(MockitoExtension.class) can fail at runtime because the Mockito extension and the JUnit 6 engine are not a supported combination.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8f6fda0. Configure here.

@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 8f6fda0 to a7da13e Compare June 3, 2026 05:49
@sonarqubecloud

sonarqubecloud Bot commented Jun 3, 2026

Copy link
Copy Markdown

@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from a7da13e to 2bb41c3 Compare June 14, 2026 04:57
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 2bb41c3 to 11403f9 Compare June 19, 2026 00:05
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 11403f9 to 630a03d Compare June 19, 2026 00:22
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 630a03d to fbba3fc Compare June 28, 2026 04:55
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from fbba3fc to 38946c4 Compare July 14, 2026 04:22
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch 2 times, most recently from bb83a55 to 7558a2b Compare July 14, 2026 21:38
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 7558a2b to 876f4ea Compare July 28, 2026 04:28
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from 876f4ea to b62010e Compare August 14, 2026 04:03
@protocols-renovate
protocols-renovate Bot force-pushed the renovate/major-renovatebot-gradle-updates branch from b62010e to dbff7fe Compare August 28, 2026 06:03
@sonarqubecloud

Copy link
Copy Markdown

@cursor
cursor Bot requested review from macfarla and usmansaleem August 28, 2026 06:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants