From 852cf1b4911c53e2430a06c8a6f67b0c5b44e71a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:01:19 +0200 Subject: [PATCH 01/83] chore(deps): update dependency grafana/docker-otel-lgtm to v0.29.1 (#2311) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/docker-otel-lgtm](https://redirect.github.com/grafana/docker-otel-lgtm) | patch | `0.29.0` → `0.29.1` | --- ### Release Notes
grafana/docker-otel-lgtm (grafana/docker-otel-lgtm) ### [`v0.29.1`](https://redirect.github.com/grafana/docker-otel-lgtm/releases/tag/v0.29.1) [Compare Source](https://redirect.github.com/grafana/docker-otel-lgtm/compare/v0.29.0...v0.29.1) #### What's Changed ##### OpenTelemetry & LGTM - chore(deps): update dependency pyroscope to v2.1.1 by [@​renovate-sh-app](https://redirect.github.com/renovate-sh-app)\[bot] in [#​1580](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1580) ##### Other Changes - Avoid flaky attestation by [@​martincostello](https://redirect.github.com/martincostello) in [#​1578](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1578) - Update CONTRIBUTING by [@​martincostello](https://redirect.github.com/martincostello) in [#​1599](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1599) - fix: prevent interactive shutdown hangs by [@​ihopenre-eng](https://redirect.github.com/ihopenre-eng) in [#​1596](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1596) - Add EXPOSE directives by [@​martincostello](https://redirect.github.com/martincostello) in [#​1602](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1602) #### New Contributors - [@​ihopenre-eng](https://redirect.github.com/ihopenre-eng) made their first contribution in [#​1596](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1596) **Full Changelog**:
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 5b4b30beb..93e9a3634 100644 --- a/mise.toml +++ b/mise.toml @@ -26,7 +26,7 @@ zizmor = "1.26.1" [env] FLINT_CONFIG_DIR = ".github/config" # renovate: datasource=github-releases depName=grafana/docker-otel-lgtm -LGTM_VERSION = "0.29.0" +LGTM_VERSION = "0.29.1" # Latest JMX Exporter release; used as the default ref for the compatibility job. # renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced DEFAULT_JMX_EXPORTER_VERSION = "v1.6.0" From f33593c80f428683a052b384cacb5010950da26c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:24:02 +0200 Subject: [PATCH 02/83] chore(deps): update actions/setup-java digest to 03ad4de (#2309) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-java](https://redirect.github.com/actions/setup-java) ([changelog](https://redirect.github.com/actions/setup-java/compare/0f481fcb613427c0f801b606911222b5b6f3083a..03ad4de0992f5dab5e18fcb136590ce7c4a0ac95)) | action | digest | `0f481fc` → `03ad4de` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 2 +- .github/workflows/multi-version-test.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b0295def6..d803abd6c 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -26,7 +26,7 @@ jobs: persist-credentials: false - name: Set up Java - uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5 + uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5 with: distribution: temurin java-version: "25" diff --git a/.github/workflows/multi-version-test.yml b/.github/workflows/multi-version-test.yml index 2ae27bc02..74f963d82 100644 --- a/.github/workflows/multi-version-test.yml +++ b/.github/workflows/multi-version-test.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Java ${{ matrix.java }} id: setup-java - uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5 + uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5 with: distribution: "temurin" java-version: ${{ matrix.java }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 29d0416c2..a8661430b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,7 +79,7 @@ jobs: run: mise run build-release - name: Set up Apache Maven Central - uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5 + uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5 with: distribution: "temurin" java-version: "21" From b49124b54b75792c9e33c670d9678d2981d57b8f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:51:46 +0000 Subject: [PATCH 03/83] chore(deps): update dependency com.uber.nullaway:nullaway to v0.13.8 (#2314) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [com.uber.nullaway:nullaway](https://redirect.github.com/uber/NullAway) | `0.13.7` → `0.13.8` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.uber.nullaway:nullaway/0.13.8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.uber.nullaway:nullaway/0.13.7/0.13.8?slim=true) | --- ### Release Notes
uber/NullAway (com.uber.nullaway:nullaway) ### [`v0.13.8`](https://redirect.github.com/uber/NullAway/blob/HEAD/CHANGELOG.md#Version-0138) Mostly minor bug fixes. Note that NullAway now treats `Map.remove` as returning `@Nullable` ([#​1623](https://redirect.github.com/uber/NullAway/issues/1623)), which may lead to newly-reported warnings. - Quote syntax element references in error messages by [@​AryamannSingh7](https://redirect.github.com/AryamannSingh7) ([#​1620](https://redirect.github.com/uber/NullAway/issues/1620)) - Fix stream nullability propagation through sorted() (Fixes [#​1538](https://redirect.github.com/uber/NullAway/issues/1538)) by [@​dyrpsf](https://redirect.github.com/dyrpsf) ([#​1610](https://redirect.github.com/uber/NullAway/issues/1610)) - Add support for reactor by [@​subhramit](https://redirect.github.com/subhramit) ([#​1599](https://redirect.github.com/uber/NullAway/issues/1599)) - Fix issue with passing poly expression to a function parameter with type from library model ([#​1614](https://redirect.github.com/uber/NullAway/issues/1614)) - Fix crash with library model [@​Nullable](https://redirect.github.com/Nullable) being applied to wildcard ([#​1615](https://redirect.github.com/uber/NullAway/issues/1615)) - Add more modeling for Optional ([#​1613](https://redirect.github.com/uber/NullAway/issues/1613)) - Update lombok section at README.md by [@​jevanlingen](https://redirect.github.com/jevanlingen) ([#​1624](https://redirect.github.com/uber/NullAway/issues/1624)) - Model Map.remove as nullable by [@​codingkiddo](https://redirect.github.com/codingkiddo) ([#​1623](https://redirect.github.com/uber/NullAway/issues/1623)) - Better support for conditional expressions in JSpecify mode ([#​1608](https://redirect.github.com/uber/NullAway/issues/1608)) - Fix issue with reading annotations on record constructor parameters due to javac bug ([#​1636](https://redirect.github.com/uber/NullAway/issues/1636)) - Maintenance - Update to Gradle 9.6.1 and AGP 9.3.0 ([#​1634](https://redirect.github.com/uber/NullAway/issues/1634))
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). --------- Signed-off-by: Gregor Zeitlinger Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .../prometheus-metrics-instrumentation-caffeine.txt | 6 +++++- .../prometheus-metrics-instrumentation-guava.txt | 6 +++++- pom.xml | 2 +- .../instrumentation/caffeine/CacheMetricsCollector.java | 2 ++ .../instrumentation/guava/CacheMetricsCollector.java | 2 ++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-caffeine.txt b/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-caffeine.txt index 731adee45..2745dbce5 100644 --- a/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-caffeine.txt +++ b/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-caffeine.txt @@ -1,2 +1,6 @@ Comparing source compatibility of prometheus-metrics-instrumentation-caffeine-1.8.1-SNAPSHOT.jar against prometheus-metrics-instrumentation-caffeine-1.8.0.jar -No changes. +=== UNCHANGED CLASS: PUBLIC io.prometheus.metrics.instrumentation.caffeine.CacheMetricsCollector (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + === UNCHANGED METHOD: PUBLIC com.github.benmanes.caffeine.cache.Cache removeCache(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + diff --git a/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-guava.txt b/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-guava.txt index 7391e926c..bb87fbec9 100644 --- a/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-guava.txt +++ b/docs/apidiffs/current_vs_latest/prometheus-metrics-instrumentation-guava.txt @@ -1,2 +1,6 @@ Comparing source compatibility of prometheus-metrics-instrumentation-guava-1.8.1-SNAPSHOT.jar against prometheus-metrics-instrumentation-guava-1.8.0.jar -No changes. +=== UNCHANGED CLASS: PUBLIC io.prometheus.metrics.instrumentation.guava.CacheMetricsCollector (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + === UNCHANGED METHOD: PUBLIC com.google.common.cache.Cache removeCache(java.lang.String) + +++ NEW ANNOTATION: javax.annotation.Nullable + diff --git a/pom.xml b/pom.xml index 5752f4ce9..f9126506f 100644 --- a/pom.xml +++ b/pom.xml @@ -505,7 +505,7 @@ com.uber.nullaway nullaway - 0.13.7 + 0.13.8 diff --git a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java index ba7552910..687cd4349 100644 --- a/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-caffeine/src/main/java/io/prometheus/metrics/instrumentation/caffeine/CacheMetricsCollector.java @@ -20,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** * Collect metrics from Caffeine's com.github.benmanes.caffeine.cache.Cache. @@ -149,6 +150,7 @@ public void addCache(String cacheName, AsyncCache cache) { * * @param cacheName cache to be removed */ + @Nullable public Cache removeCache(String cacheName) { return children.remove(cacheName); } diff --git a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java index b807a28f0..0b6ff3d78 100644 --- a/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java +++ b/prometheus-metrics-instrumentation-guava/src/main/java/io/prometheus/metrics/instrumentation/guava/CacheMetricsCollector.java @@ -16,6 +16,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import javax.annotation.Nullable; /** * Collect metrics from Guava's com.google.common.cache.Cache. @@ -100,6 +101,7 @@ public void addCache(String cacheName, Cache cache) { * * @param cacheName cache to be removed */ + @Nullable public Cache removeCache(String cacheName) { return children.remove(cacheName); } From ae53256daebc0794336395892c13dfeaf8f003a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:54:34 +0000 Subject: [PATCH 04/83] chore(deps): update jdx/mise-action action to v4.2.1 (#2312) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) | action | patch | `v4.2.0` → `v4.2.1` | --- ### Release Notes
jdx/mise-action (jdx/mise-action) ### [`v4.2.1`](https://redirect.github.com/jdx/mise-action/releases/tag/v4.2.1): : Signed checksums and PATH export fix [Compare Source](https://redirect.github.com/jdx/mise-action/compare/v4.2.0...v4.2.1) A small patch release with two user-facing fixes: mise downloads are now verified against minisign-signed release checksums by default, and the `env` input no longer leaks the runner's `PATH` into subsequent steps. ##### Fixed ##### Verify mise downloads with signed checksums ([#​548](https://redirect.github.com/jdx/mise-action/pull/548)) by [@​jdx](https://redirect.github.com/jdx) The action now embeds mise's minisign public key and verifies `SHASUMS256.txt.minisig` before trusting any release checksums, then checks the downloaded mise binary's SHA256 against the verified list. This applies to both GitHub release archives (verified before extraction) and the default `mise.jdx.dev` CDN path (verified against the signed checksum for the matching release asset). If a CDN download fails verification, the action warns and falls back to the signed GitHub release asset instead of installing an unverified binary. - The existing `sha256` input still works as an explicit override. - Pinned mise versions older than `2024.12.24` (which predate minisign checksums) get a warning and skip signed verification rather than failing. - Because tar installs now extract from a verified file on disk, the previous streaming `download | tar` fast path is replaced with a download-then-verify-then-extract flow. Thanks to [@​potiuk](https://redirect.github.com/potiuk) for the detailed threat-model writeup in [#​547](https://redirect.github.com/jdx/mise-action/issues/547). ##### Exclude `PATH` from environment export ([#​556](https://redirect.github.com/jdx/mise-action/pull/556)) by [@​jdx](https://redirect.github.com/jdx) The `env` input has always documented that "PATH modifications are not part of this", but since the switch to `mise env --json` in [#​252](https://redirect.github.com/jdx/mise-action/pull/252) (needed for redaction support), the action was exporting every string value returned by mise — including the computed `PATH` — into `GITHUB_ENV`. That effectively snapshotted the runner's entire `PATH` into subsequent steps and let `[env] _.path` entries in `mise.toml` leak past the action's own PATH management. `exportMiseEnv` now skips `PATH` (case-insensitive) when exporting JSON env vars, restoring the documented behavior. Normal mise env vars are still exported, and PATH continues to be managed by the action's own setup (e.g. `add_shims_to_path`). Fixes [#​555](https://redirect.github.com/jdx/mise-action/issues/555). **Full Changelog**:
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/api-diff.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/bump-api-diff-baseline.yml | 2 +- .github/workflows/generate-protobuf.yml | 2 +- .github/workflows/github-pages.yaml | 2 +- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/jmx-exporter-compatibility.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/micrometer-compatibility.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 2 +- .github/workflows/pr-benchmarks.yml | 2 +- .github/workflows/regenerate-api-diff-otel.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 457568672..acee388d8 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/api-diff.yml b/.github/workflows/api-diff.yml index 6d4a83f37..0ee1cb3d1 100644 --- a/.github/workflows/api-diff.yml +++ b/.github/workflows/api-diff.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 with: persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b6009e1ab..bc883876c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 with: persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/bump-api-diff-baseline.yml b/.github/workflows/bump-api-diff-baseline.yml index 4df5ee582..229f97043 100644 --- a/.github/workflows/bump-api-diff-baseline.yml +++ b/.github/workflows/bump-api-diff-baseline.yml @@ -33,7 +33,7 @@ jobs: with: ref: ${{ env.SNAPSHOT_BRANCH }} persist-credentials: true - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml index 60483ade7..7673047c7 100644 --- a/.github/workflows/generate-protobuf.yml +++ b/.github/workflows/generate-protobuf.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 310a023bf..67ea65944 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -37,7 +37,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 83e13d7d4..2aa8be06d 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -31,7 +31,7 @@ jobs: persist-credentials: false - name: Set up mise - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index 486955927..2b5cacc6c 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 with: persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c9b20142e..de90c8d7b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 # needed for git diff --merge-base in lint:links - name: Setup mise - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index e13198be4..f089bb4db 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 6352f57a1..88228ad1a 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index 0cde105bc..6de4ed5e1 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/pr-benchmarks.yml b/.github/workflows/pr-benchmarks.yml index 0e38c2869..41621f9c7 100644 --- a/.github/workflows/pr-benchmarks.yml +++ b/.github/workflows/pr-benchmarks.yml @@ -46,7 +46,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/regenerate-api-diff-otel.yml b/.github/workflows/regenerate-api-diff-otel.yml index 9e91fcfa3..438880814 100644 --- a/.github/workflows/regenerate-api-diff-otel.yml +++ b/.github/workflows/regenerate-api-diff-otel.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a8661430b..6664a71ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,7 +69,7 @@ jobs: ref: ${{ inputs.tag }} persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index dfb82be26..1717b77fe 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 From b27d0e76628e0b62a8618588538c7f49c415d593 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:54:49 +0000 Subject: [PATCH 05/83] chore(deps): update github/codeql-action action to v4.37.1 (#2310) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.0` → `v4.37.1` | --- ### Release Notes
github/codeql-action (github/codeql-action) ### [`v4.37.1`](https://redirect.github.com/github/codeql-action/releases/tag/v4.37.1) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.0...v4.37.1) - *Upcoming breaking change*: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. [#​3956](https://redirect.github.com/github/codeql-action/pull/3956) - Update default CodeQL bundle version to [2.26.1](https://redirect.github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1). [#​4019](https://redirect.github.com/github/codeql-action/pull/4019)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d803abd6c..2f6db5afa 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -37,7 +37,7 @@ jobs: path: ~/.m2/repository key: ${{ runner.os }}-maven-codeql-${{ hashFiles('**/pom.xml') }} - name: Initialize CodeQL - uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 + uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 with: languages: java tools: linked @@ -56,6 +56,6 @@ jobs: -Djavadoc.skip=true - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 + uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 with: category: /language:java diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 184664f37..1a1eb958d 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,6 +41,6 @@ jobs: retention-days: 5 - name: Upload to code scanning - uses: github/codeql-action/upload-sarif@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 + uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 with: sarif_file: results.sarif From 5e813a0a8cd488b678fcc55dca85bb8d5c84dbad Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 20 Jul 2026 12:33:20 +0200 Subject: [PATCH 06/83] docs: document semantic PR title guidance (#2318) ## Summary - Document the Conventional Commits-style pull request title format. - Add examples and common title types for contributors. ## Validation - `git diff --check` - `mise run lint:fix` Signed-off-by: Gregor Zeitlinger --- CONTRIBUTING.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d2a93b676..519b98fea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,6 +12,18 @@ Prometheus uses GitHub to manage reviews of pull requests. This will avoid unnecessary work and surely give you and us a good deal of inspiration. +## Pull Request Titles + +Use a [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#summary)-style +title for pull requests: + +```text +[optional scope]: +``` + +For example: `fix(metrics): handle empty scrapes`. Common types include `feat`, `fix`, +`docs`, `test`, `refactor`, `perf`, `build`, `ci`, `chore`, and `revert`. + ## Signing Off Commits Every commit must include a `Signed-off-by` line, as required by the From 0a917717bbd9ec2112f3e85b4d8d03777a39b511 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 20 Jul 2026 14:31:07 +0200 Subject: [PATCH 07/83] ci: split PR benchmarks by topic (#2303) ## Summary Replace the parallel base/head PR benchmark comparison with topic-split benchmark jobs. Each topic compares base and head sequentially on the same runner, while topics still run in parallel for better wall-clock time. ## Changes - Split PR benchmarks into topic jobs: counter, histogram, and exposition. - Run base and head sequentially inside each topic job so each comparison uses the same runner. - Merge per-topic JMH JSON results in the summary job before generating the PR comment. - Add a comparison note clarifying that base/head are compared on the same runner within each topic. - Add histogram benchmark variants for classic-only histograms: - shared contended 4-thread benchmark remains as `prometheusClassic` - single-thread benchmark: `prometheusClassicSingleThread` - per-thread 4-thread benchmark: `prometheusClassicPerThread` ## Why Running base and head in separate jobs was faster but not reliable enough because GitHub Actions can schedule them on different CPU models. Topic splitting keeps the reliable same-runner comparison within each topic while still allowing unrelated benchmark topics to run in parallel. ## Validation - Ran `mise run lint:fix`. - Ran `mise run build`. - Ran `python3 -m py_compile .mise/tasks/generate_benchmark_summary.py`. - Ran `git diff --check`. - Verified the JMH include patterns select the intended benchmarks with `java -jar benchmarks/target/benchmarks.jar -l ...`. - Smoke-tested the topic result merge and summary generation using the latest #2252 benchmark artifact. --- .github/workflows/pr-benchmarks.yml | 104 ++++++++++++------ .mise/tasks/generate_benchmark_summary.py | 11 ++ .../benchmarks/HistogramBenchmark.java | 30 +++++ 3 files changed, 111 insertions(+), 34 deletions(-) diff --git a/.github/workflows/pr-benchmarks.yml b/.github/workflows/pr-benchmarks.yml index 41621f9c7..b4502b059 100644 --- a/.github/workflows/pr-benchmarks.yml +++ b/.github/workflows/pr-benchmarks.yml @@ -23,25 +23,24 @@ jobs: fail-fast: false matrix: include: - - name: base - repository: ${{ github.repository }} - ref: ${{ github.event.pull_request.base.sha }} - sha: ${{ github.event.pull_request.base.sha }} - - name: head - repository: ${{ github.event.pull_request.head.repo.full_name }} - ref: ${{ github.event.pull_request.head.sha }} - sha: ${{ github.event.pull_request.head.sha }} + - topic: counter + pattern: CounterBenchmark + - topic: histogram + pattern: HistogramBenchmark + - topic: exposition + pattern: HistogramTextFormatBenchmark|TextFormatUtilBenchmark permissions: contents: read # checkout only env: HEAD_SHA: ${{ github.event.pull_request.head.sha }} PR_NUMBER: ${{ github.event.pull_request.number }} + JMH_PATTERN: ${{ matrix.pattern }} steps: - - name: Checkout ${{ matrix.name }} + - name: Checkout PR base uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: - repository: ${{ matrix.repository }} - ref: ${{ matrix.ref }} + repository: ${{ github.repository }} + ref: ${{ github.event.pull_request.base.sha }} persist-credentials: false fetch-depth: 0 @@ -55,26 +54,49 @@ jobs: uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/.m2/repository - key: ${{ runner.os }}-pr-bench-maven-${{ matrix.name }}-${{ matrix.sha }} + key: ${{ runner.os }}-pr-bench-maven-${{ matrix.topic }}-${{ env.HEAD_SHA }} restore-keys: | + ${{ runner.os }}-pr-bench-maven-${{ matrix.topic }}- ${{ runner.os }}-pr-bench-maven- ${{ runner.os }}-maven- - - name: Run ${{ matrix.name }} JMH benchmarks - run: mise run benchmark:ci-json - - - name: Capture ${{ matrix.name }} runner info + - name: Capture runner info run: | python3 ./.mise/tasks/generate_benchmark_summary.py \ - --write-system-info runner-info.json + --write-system-info /tmp/runner-info.json + + - name: Run base ${{ matrix.topic }} benchmarks + run: mise run benchmark:ci-json + env: + JMH_ARGS: -f 3 -wi 3 -i 5 ${{ env.JMH_PATTERN }} + + - name: Save base ${{ matrix.topic }} results + run: mv benchmark-results.json /tmp/base-results.json - - name: Upload ${{ matrix.name }} raw benchmark results + - name: Checkout PR head + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.sha }} + persist-credentials: false + fetch-depth: 0 + + - name: Run head ${{ matrix.topic }} benchmarks + run: mise run benchmark:ci-json + env: + JMH_ARGS: -f 3 -wi 3 -i 5 ${{ env.JMH_PATTERN }} + + - name: Save head ${{ matrix.topic }} results + run: mv benchmark-results.json /tmp/head-results.json + + - name: Upload ${{ matrix.topic }} benchmark results uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: pr-benchmark-raw-${{ matrix.name }}-${{ env.PR_NUMBER }}-${{ env.HEAD_SHA }} + name: pr-benchmark-topic-${{ matrix.topic }}-${{ env.PR_NUMBER }}-${{ env.HEAD_SHA }} path: | - benchmark-results.json - runner-info.json + /tmp/base-results.json + /tmp/head-results.json + /tmp/runner-info.json retention-days: 5 summarize: @@ -95,28 +117,42 @@ jobs: persist-credentials: false fetch-depth: 0 - - name: Download base benchmark results + - name: Download topic benchmark results uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: - name: pr-benchmark-raw-base-${{ env.PR_NUMBER }}-${{ env.HEAD_SHA }} - path: /tmp/base-benchmark-results + pattern: pr-benchmark-topic-*-${{ env.PR_NUMBER }}-${{ env.HEAD_SHA }} + path: /tmp/topic-benchmark-results - - name: Download head benchmark results - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: pr-benchmark-raw-head-${{ env.PR_NUMBER }}-${{ env.HEAD_SHA }} - path: /tmp/head-benchmark-results + - name: Merge topic benchmark results + run: | + python3 - <<'PY' + import json + from pathlib import Path + + root = Path('/tmp/topic-benchmark-results') + for name in ('base', 'head'): + files = sorted(root.glob(f'*/{name}-results.json')) + if not files: + raise SystemExit(f'No {name} benchmark result files found') + merged = [] + for file in files: + with open(file, 'r') as f: + merged.extend(json.load(f)) + with open(f'/tmp/{name}-benchmark-results.json', 'w') as f: + json.dump(merged, f) + f.write('\n') + PY - name: Generate benchmark summary run: | python3 ./.mise/tasks/generate_benchmark_summary.py \ - --input /tmp/head-benchmark-results/benchmark-results.json \ - --baseline /tmp/base-benchmark-results/benchmark-results.json \ - --system-info /tmp/head-benchmark-results/runner-info.json \ - --baseline-system-info /tmp/base-benchmark-results/runner-info.json \ + --input /tmp/head-benchmark-results.json \ + --baseline /tmp/base-benchmark-results.json \ --output-dir benchmark-results \ --commit-sha "${{ github.event.pull_request.head.sha }}" \ - --baseline-sha "${{ github.event.pull_request.base.sha }}" + --baseline-sha "${{ github.event.pull_request.base.sha }}" \ + --comparison-note \ + "Base and head are compared on the same runner within each topic." env: GITHUB_REPOSITORY: ${{ github.event.pull_request.head.repo.full_name }} GITHUB_BASE_REPOSITORY: ${{ github.repository }} diff --git a/.mise/tasks/generate_benchmark_summary.py b/.mise/tasks/generate_benchmark_summary.py index cd51e8ac0..e37f1e09c 100644 --- a/.mise/tasks/generate_benchmark_summary.py +++ b/.mise/tasks/generate_benchmark_summary.py @@ -60,6 +60,11 @@ def parse_args(): default=None, help="Baseline GitHub repository for commit links", ) + parser.add_argument( + "--comparison-note", + default=None, + help="Optional note to include in the benchmark comparison section", + ) parser.add_argument( "--system-info", default=None, @@ -337,6 +342,7 @@ def generate_comparison_section( baseline_sha: str, repo: str, baseline_repo: str, + comparison_note: Optional[str] = None, system_info: Optional[Dict[str, str]] = None, baseline_system_info: Optional[Dict[str, str]] = None, ) -> List[str]: @@ -353,6 +359,8 @@ def generate_comparison_section( md.append(f"- **Head:** {format_commit_link(commit_sha, repo)}") md.append(f"- **Base:** {format_commit_link(baseline_sha, baseline_repo)}") md.append("- **Change:** positive means the PR is faster than base.") + if comparison_note: + md.append(f"- **Note:** {comparison_note}") if baseline_system_info: md.append(f"- **Head runner:** {format_system_info(system_info)}") md.append(f"- **Base runner:** {format_system_info(baseline_system_info)}") @@ -406,6 +414,7 @@ def generate_markdown( baseline_results: Optional[List] = None, baseline_sha: Optional[str] = None, baseline_repo: Optional[str] = None, + comparison_note: Optional[str] = None, system_info: Optional[Dict[str, str]] = None, baseline_system_info: Optional[Dict[str, str]] = None, ) -> str: @@ -461,6 +470,7 @@ def generate_markdown( baseline_sha, repo, baseline_repo, + comparison_note=comparison_note, system_info=sysinfo, baseline_system_info=baseline_system_info, ) @@ -671,6 +681,7 @@ def main(): baseline_results=baseline_results, baseline_sha=baseline_sha, baseline_repo=baseline_repo, + comparison_note=args.comparison_note, system_info=system_info, baseline_system_info=baseline_system_info, ) diff --git a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java index 72cba0f9f..41b7097db 100644 --- a/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java +++ b/benchmarks/src/main/java/io/prometheus/metrics/benchmarks/HistogramBenchmark.java @@ -47,6 +47,16 @@ public PrometheusClassicHistogram() { } } + @State(Scope.Thread) + public static class PrometheusClassicHistogramPerThread { + + final Histogram noLabels; + + public PrometheusClassicHistogramPerThread() { + noLabels = Histogram.builder().name("test").help("help").classicOnly().build(); + } + } + @State(Scope.Benchmark) public static class PrometheusNativeHistogram { @@ -143,6 +153,26 @@ public Histogram prometheusClassic( return histogram.noLabels; } + @Benchmark + @Threads(1) + public Histogram prometheusClassicSingleThread( + RandomNumbers randomNumbers, PrometheusClassicHistogram histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.noLabels.observe(randomNumbers.randomNumbers[i]); + } + return histogram.noLabels; + } + + @Benchmark + @Threads(4) + public Histogram prometheusClassicPerThread( + RandomNumbers randomNumbers, PrometheusClassicHistogramPerThread histogram) { + for (int i = 0; i < randomNumbers.randomNumbers.length; i++) { + histogram.noLabels.observe(randomNumbers.randomNumbers[i]); + } + return histogram.noLabels; + } + @Benchmark @Threads(4) public Histogram prometheusNative( From baa2bbb140e9b5d600ed8f3576c059fc0b25b28b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:31:34 +0200 Subject: [PATCH 08/83] chore(deps): update actions/checkout action to v7.0.1 (#2321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://redirect.github.com/actions/checkout) | action | patch | `v7.0.0` → `v7.0.1` | --- ### Release Notes
actions/checkout (actions/checkout) ### [`v7.0.1`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v701) [Compare Source](https://redirect.github.com/actions/checkout/compare/v7.0.0...v7.0.1) - Bump github/codeql-action from 3 to 4 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2475](https://redirect.github.com/actions/checkout/pull/2475) - Bump actions/setup-node from 4 to 6 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2477](https://redirect.github.com/actions/checkout/pull/2477) - Bump docker/build-push-action from 6.5.0 to 7.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2478](https://redirect.github.com/actions/checkout/pull/2478) - Bump docker/login-action from 3.3.0 to 4.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2479](https://redirect.github.com/actions/checkout/pull/2479) - Bump actions/checkout from 6 to 7 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2488](https://redirect.github.com/actions/checkout/pull/2488) - Bump actions/upload-artifact from 4 to 7 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2476](https://redirect.github.com/actions/checkout/pull/2476) - eslint 9 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2474](https://redirect.github.com/actions/checkout/pull/2474) - Bump the minor-actions-dependencies group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2499](https://redirect.github.com/actions/checkout/pull/2499) - skip running unsafe pr check if input is default by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2518](https://redirect.github.com/actions/checkout/pull/2518) - trim only ascii whitespace for branch by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2521](https://redirect.github.com/actions/checkout/pull/2521) - escape values passed to --unset by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2530](https://redirect.github.com/actions/checkout/pull/2530)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/micrometer-compatibility.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 4 ++-- .github/workflows/pr-benchmarks.yml | 6 +++--- .github/workflows/release.yml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 2aa8be06d..6a78ce47c 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -26,7 +26,7 @@ jobs: java-version: [8, 11, 17, 21, 25] steps: - name: Check out - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index de90c8d7b..421a70c17 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 # needed for git diff --merge-base in lint:links diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index f089bb4db..ac154b3c8 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -27,7 +27,7 @@ jobs: # renovate: datasource=git-refs depName=zeitlinger/micrometer packageName=https://github.com/zeitlinger/micrometer currentValue=feat/prom-client-java-typed-family-descriptor ref: 8f90b70807f5a063c592e3b17ef3b908be894086 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index 6de4ed5e1..a140e55b0 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -28,7 +28,7 @@ jobs: contents: read # checkout only steps: - name: Checkout main branch - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -75,7 +75,7 @@ jobs: contents: write # push generated results to the benchmarks branch steps: - name: Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # zizmor: ignore[artipacked] -- needs credentials to push to benchmarks branch persist-credentials: true diff --git a/.github/workflows/pr-benchmarks.yml b/.github/workflows/pr-benchmarks.yml index b4502b059..40bd50f1d 100644 --- a/.github/workflows/pr-benchmarks.yml +++ b/.github/workflows/pr-benchmarks.yml @@ -37,7 +37,7 @@ jobs: JMH_PATTERN: ${{ matrix.pattern }} steps: - name: Checkout PR base - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.repository }} ref: ${{ github.event.pull_request.base.sha }} @@ -74,7 +74,7 @@ jobs: run: mv benchmark-results.json /tmp/base-results.json - name: Checkout PR head - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.event.pull_request.head.repo.full_name }} ref: ${{ github.event.pull_request.head.sha }} @@ -110,7 +110,7 @@ jobs: PR_NUMBER: ${{ github.event.pull_request.number }} steps: - name: Checkout PR head - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ github.event.pull_request.head.repo.full_name }} ref: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6664a71ca..456173d15 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: "If the GPG Key Expired" fi - name: Checkout Plugin Repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.tag }} persist-credentials: false From 243322c8b7012fc88c497d0f1a85cd7e161a6a09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:31:57 +0200 Subject: [PATCH 09/83] chore(deps): update actions/checkout digest to 3d3c42e (#2320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://redirect.github.com/actions/checkout) ([changelog](https://redirect.github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0..3d3c42e5aac5ba805825da76410c181273ba90b1)) | action | digest | `9c091bb` → `3d3c42e` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/api-diff.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/bump-api-diff-baseline.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/generate-protobuf.yml | 4 ++-- .github/workflows/github-pages.yaml | 2 +- .github/workflows/jmx-exporter-compatibility.yml | 2 +- .github/workflows/multi-version-test.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/regenerate-api-diff-otel.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index acee388d8..4e2204fdd 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -12,7 +12,7 @@ jobs: - name: Check out with: persist-credentials: false - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 diff --git a/.github/workflows/api-diff.yml b/.github/workflows/api-diff.yml index 0ee1cb3d1..d93f8732e 100644 --- a/.github/workflows/api-diff.yml +++ b/.github/workflows/api-diff.yml @@ -29,7 +29,7 @@ jobs: API_DIFF_BASELINE_VERSION: ${{ inputs.baseline_version }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc883876c..f5eb59a36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 diff --git a/.github/workflows/bump-api-diff-baseline.yml b/.github/workflows/bump-api-diff-baseline.yml index 229f97043..88e276efe 100644 --- a/.github/workflows/bump-api-diff-baseline.yml +++ b/.github/workflows/bump-api-diff-baseline.yml @@ -29,7 +29,7 @@ jobs: permissions: contents: write # push to the snapshot PR branch steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ env.SNAPSHOT_BRANCH }} persist-credentials: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2f6db5afa..22b6da2dc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -21,7 +21,7 @@ jobs: security-events: write # required for github/codeql-action/analyze to upload SARIF steps: - name: Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml index 7673047c7..dbd042db9 100644 --- a/.github/workflows/generate-protobuf.yml +++ b/.github/workflows/generate-protobuf.yml @@ -14,7 +14,7 @@ jobs: permissions: contents: read # checkout + read-only `git fetch origin main` for the verify step steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.ref }} persist-credentials: false @@ -68,7 +68,7 @@ jobs: permissions: contents: write # push regenerated sources back to the renovate branch steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.ref }} # zizmor: ignore[artipacked] -- needs credentials to push diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index 67ea65944..ff7268e9a 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -32,7 +32,7 @@ jobs: if: github.repository == 'prometheus/client_java' runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false fetch-tags: "true" diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index 2b5cacc6c..247a8ecd3 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -19,7 +19,7 @@ jobs: jmx-exporter-compatibility: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 diff --git a/.github/workflows/multi-version-test.yml b/.github/workflows/multi-version-test.yml index 74f963d82..9ab3ac0e3 100644 --- a/.github/workflows/multi-version-test.yml +++ b/.github/workflows/multi-version-test.yml @@ -15,7 +15,7 @@ jobs: java: [17, 21, 25] steps: - name: Check out - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 88228ad1a..1e5ad7ede 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -12,7 +12,7 @@ jobs: - name: Check out with: persist-credentials: false - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: version: v2026.7.5 diff --git a/.github/workflows/regenerate-api-diff-otel.yml b/.github/workflows/regenerate-api-diff-otel.yml index 438880814..c6e38b11b 100644 --- a/.github/workflows/regenerate-api-diff-otel.yml +++ b/.github/workflows/regenerate-api-diff-otel.yml @@ -14,7 +14,7 @@ jobs: permissions: contents: read # checkout + read-only `git fetch origin main` for the verify step steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.ref }} persist-credentials: false @@ -61,7 +61,7 @@ jobs: permissions: contents: write # push regenerated apidiffs back to the renovate branch steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.ref }} # zizmor: ignore[artipacked] -- needs credentials to push diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1a1eb958d..33cad8d72 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -22,7 +22,7 @@ jobs: id-token: write # required by scorecard-action for OIDC token steps: - name: Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index 1717b77fe..702d2b2fb 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -13,7 +13,7 @@ jobs: build: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false fetch-tags: "true" From eaa177514ebbab2ce9b956b3525a9db63b1ece64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 09:55:51 +0200 Subject: [PATCH 10/83] chore(deps): update grafana/grafana docker tag to v13.1.1 (#2322) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/grafana](https://redirect.github.com/grafana/grafana) | patch | `13.1.0` → `13.1.1` | --- ### Release Notes
grafana/grafana (grafana/grafana) ### [`v13.1.1`](https://redirect.github.com/grafana/grafana/compare/v13.1.0...v13.1.1)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index 97d20349d..71884779c 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:13.1.0@sha256:121a7a9ece6dc10b969f1f96eed64b4f07dfac0d0b8abc070f7cb83bbde86f63 + image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index 4811ace29..7cc0e1a65 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -59,7 +59,7 @@ services: command: - --config.file=/config.yaml grafana: - image: grafana/grafana:13.1.0@sha256:121a7a9ece6dc10b969f1f96eed64b4f07dfac0d0b8abc070f7cb83bbde86f63 + image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 network_mode: host ports: - "3000:3000" diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index 8cb3b73c2..a24c34aca 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:13.1.0@sha256:121a7a9ece6dc10b969f1f96eed64b4f07dfac0d0b8abc070f7cb83bbde86f63 + image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml From e6f4b6dce2e10261b847958299611254025a3f1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 09:56:07 +0200 Subject: [PATCH 11/83] chore(deps): update github/codeql-action action to v4.37.2 (#2323) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.1` → `v4.37.2` | --- ### Release Notes
github/codeql-action (github/codeql-action) ### [`v4.37.2`](https://redirect.github.com/github/codeql-action/releases/tag/v4.37.2) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.1...v4.37.2) - The new address format for the `config-file` input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the `remote=` prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. [#​4023](https://redirect.github.com/github/codeql-action/pull/4023) - The CodeQL Action can now make use of [configured private registries](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries) in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. [#​4007](https://redirect.github.com/github/codeql-action/pull/4007)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 22b6da2dc..2832d34eb 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -37,7 +37,7 @@ jobs: path: ~/.m2/repository key: ${{ runner.os }}-maven-codeql-${{ hashFiles('**/pom.xml') }} - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 with: languages: java tools: linked @@ -56,6 +56,6 @@ jobs: -Djavadoc.skip=true - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 with: category: /language:java diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 33cad8d72..ee3345250 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,6 +41,6 @@ jobs: retention-days: 5 - name: Upload to code scanning - uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/upload-sarif@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 with: sarif_file: results.sarif From f0a28a9ffcbc35e9ab34189bd40b42f078f6089a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 11:45:20 +0200 Subject: [PATCH 12/83] chore(deps): update grafana/grafana:13.1.1 docker digest to 7cb8c64 (#2324) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/grafana](https://redirect.github.com/grafana/grafana) | digest | `1c1bd67` → `7cb8c64` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-custom-buckets/docker-compose.yaml | 2 +- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-native-histogram/docker-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/example-custom-buckets/docker-compose.yaml b/examples/example-custom-buckets/docker-compose.yaml index 71884779c..509ef6f3d 100644 --- a/examples/example-custom-buckets/docker-compose.yaml +++ b/examples/example-custom-buckets/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 + image: grafana/grafana:13.1.1@sha256:7cb8c64c4d57a57e734073f3cc94620adb24a0acb929bd80ba9f14017e3a975b network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index 7cc0e1a65..ad5f542cf 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -59,7 +59,7 @@ services: command: - --config.file=/config.yaml grafana: - image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 + image: grafana/grafana:13.1.1@sha256:7cb8c64c4d57a57e734073f3cc94620adb24a0acb929bd80ba9f14017e3a975b network_mode: host ports: - "3000:3000" diff --git a/examples/example-native-histogram/docker-compose.yaml b/examples/example-native-histogram/docker-compose.yaml index a24c34aca..5e2d70398 100644 --- a/examples/example-native-histogram/docker-compose.yaml +++ b/examples/example-native-histogram/docker-compose.yaml @@ -18,7 +18,7 @@ services: - --enable-feature=native-histograms - --config.file=/prometheus.yml grafana: - image: grafana/grafana:13.1.1@sha256:1c1bd67c54c5fcf6e759897852b5a584191bd6796e8d328a5ace457799801261 + image: grafana/grafana:13.1.1@sha256:7cb8c64c4d57a57e734073f3cc94620adb24a0acb929bd80ba9f14017e3a975b network_mode: host volumes: - ./docker-compose/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/grafana-datasources.yaml From c291ebad6a15ba7ec57622b9e2a67e9e9eb9e986 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 11:45:37 +0200 Subject: [PATCH 13/83] chore(deps): update github/codeql-action action to v4.37.3 (#2325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.2` → `v4.37.3` | --- ### Release Notes
github/codeql-action (github/codeql-action) ### [`v4.37.3`](https://redirect.github.com/github/codeql-action/releases/tag/v4.37.3) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.2...v4.37.3) No user facing changes.
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2832d34eb..4d0950bed 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -37,7 +37,7 @@ jobs: path: ~/.m2/repository key: ${{ runner.os }}-maven-codeql-${{ hashFiles('**/pom.xml') }} - name: Initialize CodeQL - uses: github/codeql-action/init@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 + uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3 with: languages: java tools: linked @@ -56,6 +56,6 @@ jobs: -Djavadoc.skip=true - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 + uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3 with: category: /language:java diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ee3345250..06b37bf4a 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,6 +41,6 @@ jobs: retention-days: 5 - name: Upload to code scanning - uses: github/codeql-action/upload-sarif@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2 + uses: github/codeql-action/upload-sarif@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3 with: sarif_file: results.sarif From e7079662b346d30e9c1aaa3cb6381473c3278fdc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:07:25 +0200 Subject: [PATCH 14/83] chore(deps): update otel/opentelemetry-collector-contrib docker tag to v0.157.0 (#2326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [otel/opentelemetry-collector-contrib](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases) | minor | `0.156.0` → `0.157.0` | --- ### Release Notes
open-telemetry/opentelemetry-collector-releases (otel/opentelemetry-collector-contrib) ### [`v0.157.0`](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/blob/HEAD/CHANGELOG.md#v01570) [Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/compare/v0.156.0...v0.157.0) ##### 🛑 Breaking changes 🛑 - `contrib`: Remove deprecated signalfx receiver from the contrib distribution ([#​1551](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/1551)) - `packaging`: Prevent service being started/enabled upon install for rpms ([#​1334](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/1334)) This brings behaviour inline with usual expectations for rpm packages which usually leave this up to the system administrator. ##### 🚀 New components 🚀 - `cardinalityguardianprocessor`: Add Cardinality Guardian processor to the OpenTelemetry Collector Contrib. ([#​1549](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/1549)) ##### 💡 Enhancements 💡 - `ebpf-profiler`: Use a scratch image similar to the contrib image for the ebpf-profiler image ([#​930](https://redirect.github.com/open-telemetry/opentelemetry-collector-releases/issues/930))
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-exemplars-tail-sampling/docker-compose.yaml | 2 +- examples/example-exporter-opentelemetry/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/example-exemplars-tail-sampling/docker-compose.yaml b/examples/example-exemplars-tail-sampling/docker-compose.yaml index ad5f542cf..f03204807 100644 --- a/examples/example-exemplars-tail-sampling/docker-compose.yaml +++ b/examples/example-exemplars-tail-sampling/docker-compose.yaml @@ -36,7 +36,7 @@ services: - -jar - /example-greeting-service.jar collector: - image: otel/opentelemetry-collector-contrib:0.156.0@sha256:125bdbeb7590cc1952c5b3430ecf14063568980c2c93d5b38676cc0446ed8108 + image: otel/opentelemetry-collector-contrib:0.157.0@sha256:f2f01157055a9b2aab9df7118e1f1c9abf345e99b23bc7a2bc791db374a7d0f6 network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml diff --git a/examples/example-exporter-opentelemetry/docker-compose.yaml b/examples/example-exporter-opentelemetry/docker-compose.yaml index 300bd18ef..4e526c3fb 100644 --- a/examples/example-exporter-opentelemetry/docker-compose.yaml +++ b/examples/example-exporter-opentelemetry/docker-compose.yaml @@ -13,7 +13,7 @@ services: #- -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 - /example-exporter-opentelemetry.jar collector: - image: otel/opentelemetry-collector-contrib:0.156.0@sha256:125bdbeb7590cc1952c5b3430ecf14063568980c2c93d5b38676cc0446ed8108 + image: otel/opentelemetry-collector-contrib:0.157.0@sha256:f2f01157055a9b2aab9df7118e1f1c9abf345e99b23bc7a2bc791db374a7d0f6 network_mode: host volumes: - ./config/otelcol-config.yaml:/config.yaml From 7cdd3ad0549778dd2b2674601bba63bbd1acfff7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:19:40 +0200 Subject: [PATCH 15/83] chore(deps): update dependency org.apache.maven.plugins:maven-jar-plugin to v3.5.1 (#2327) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.apache.maven.plugins:maven-jar-plugin](https://maven.apache.org/plugins/) ([source](https://redirect.github.com/apache/maven-jar-plugin)) | `3.5.0` → `3.5.1` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-jar-plugin/3.5.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-jar-plugin/3.5.0/3.5.1?slim=true) | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9126506f..100bde3a7 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,7 @@ maven-jar-plugin - 3.5.0 + 3.5.1 maven-deploy-plugin From 1ca27164b646266a10ead6ad1e2e6b5648567b2f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:19:44 +0200 Subject: [PATCH 16/83] fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.30.0-alpha (#2328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://redirect.github.com/open-telemetry/opentelemetry-java-instrumentation) | `2.29.0-alpha` → `2.30.0-alpha` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.30.0-alpha?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.29.0-alpha/2.30.0-alpha?slim=true) | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/example-otel-jvm-runtime-metrics/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-otel-jvm-runtime-metrics/pom.xml b/examples/example-otel-jvm-runtime-metrics/pom.xml index cd0c1ba79..fab994313 100644 --- a/examples/example-otel-jvm-runtime-metrics/pom.xml +++ b/examples/example-otel-jvm-runtime-metrics/pom.xml @@ -28,7 +28,7 @@ io.opentelemetry.instrumentation opentelemetry-instrumentation-bom-alpha - 2.29.0-alpha + 2.30.0-alpha pom import From 07623c14dedfeffed3eace5b8718127add250668 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:08:52 +0000 Subject: [PATCH 17/83] fix(deps): update dependency io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha to v2.30.0-alpha (#2330) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha](https://redirect.github.com/open-telemetry/opentelemetry-java-instrumentation) | `2.29.0-alpha` → `2.30.0-alpha` | ![age](https://developer.mend.io/api/mc/badges/age/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.30.0-alpha?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha/2.29.0-alpha/2.30.0-alpha?slim=true) | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 100bde3a7..d03c6cd6c 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 4.3.0 3.13.2 6.1.2 - 2.29.0-alpha + 2.30.0-alpha 8 25 From 61d79993fc7f854b0749c3f0635c3fa02057adce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:30:44 +0200 Subject: [PATCH 18/83] chore(deps): update ossf/scorecard-action action to v2.4.4 (#2338) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [ossf/scorecard-action](https://redirect.github.com/ossf/scorecard-action) | action | patch | `v2.4.3` → `v2.4.4` | --- ### Release Notes
ossf/scorecard-action (ossf/scorecard-action) ### [`v2.4.4`](https://redirect.github.com/ossf/scorecard-action/releases/tag/v2.4.4) [Compare Source](https://redirect.github.com/ossf/scorecard-action/compare/v2.4.3...v2.4.4) #### What's Changed This update bumps the Scorecard version to the v5.5.0 release. For a complete list of changes, please refer to the [Scorecard v5.4.0 release notes](https://redirect.github.com/ossf/scorecard/releases/tag/v5.4.0) and the [Scorecard v5.5.0 release notes](https://redirect.github.com/ossf/scorecard/releases/tag/v5.5.0). - log POST failures instead of failing entire action by [@​spencerschrock](https://redirect.github.com/spencerschrock) in [#​1625](https://redirect.github.com/ossf/scorecard-action/pull/1625) **Full Changelog**:
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 06b37bf4a..a2512f957 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -27,7 +27,7 @@ jobs: persist-credentials: false - name: Run OSSF Scorecard analysis - uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 + uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4 with: results_file: results.sarif results_format: sarif From e5e6053a3d989b8e3977ad8c0ccd3c33ce296845 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 24 Jul 2026 08:32:53 +0200 Subject: [PATCH 19/83] ci: run current OATS consumer suites (#2229) ## Summary - replace the legacy direct OATS invocation with the current `oats-config.yaml` and schema v3 cases - install the released OATS v0.8.0 binary through Mise's `aqua:grafana/oats` backend and pin gcx v0.5.0 - keep the existing example-exporter suites but run them through shared LGTM fixtures and a gcx wrapper - preserve the custom-check path while moving the suite onto the current OATS runtime ## Why This gives OATS v0.8.0 real downstream CI coverage for: - compose-backed metric suites - custom-check execution - HTTP/protobuf and gRPC exporter variants - current gcx-driven query flow ## Validation - `mise x aqua:grafana/oats@0.8.0 -- oats version` - `mise run lint` - CI runs `mise run acceptance-test` with the released OATS CLI --------- Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 3 +- .../oats-tests/agent/oats-case.yaml | 20 +++++ .../oats-tests/agent/oats.yaml | 12 --- .../agent/service_instance_id_check.py | 52 ----------- .../oats-tests/http/oats-case.yaml | 11 +++ .../oats-tests/http/oats.yaml | 10 --- mise.lock | 89 ++++++++++++++++++- mise.toml | 5 +- oats-config.yaml | 6 ++ 9 files changed, 127 insertions(+), 81 deletions(-) create mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/oats-case.yaml delete mode 100644 examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml delete mode 100755 examples/example-exporter-opentelemetry/oats-tests/agent/service_instance_id_check.py create mode 100644 examples/example-exporter-opentelemetry/oats-tests/http/oats-case.yaml delete mode 100644 examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml create mode 100644 oats-config.yaml diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index 4f3f8c203..513b437c6 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -158,11 +158,12 @@ "mise": [ "actionlint", "aqua:grafana/flint", + "aqua:grafana/gcx", + "aqua:grafana/oats", "aqua:jonwiggins/xmloxide", "aqua:owenlamont/ryl", "biome", "editorconfig-checker", - "go:github.com/grafana/oats", "google-java-format", "hugo", "java", diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/oats-case.yaml b/examples/example-exporter-opentelemetry/oats-tests/agent/oats-case.yaml new file mode 100644 index 000000000..a8a05d0f2 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/agent/oats-case.yaml @@ -0,0 +1,20 @@ +name: java agent exporter preserves target_info identity +fixture: + compose: + template: lgtm + file: docker-compose.yml +seed: + type: app +expected: + metrics: + - promql: "uptime_seconds_total{}" + value: ">= 0" + - promql: 'count(target_info{service_name!="otelcol-contrib"})' + value: "== 2" + - promql: 'count(count by (instance) (target_info{service_name!="otelcol-contrib"}))' + value: "== 1" + custom-checks: + - script: | + #!/usr/bin/env bash + set -euo pipefail + curl -fsS "${OATS_GRAFANA_URL:?}/api/health" >/dev/null diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml deleted file mode 100644 index 899d1cd5d..000000000 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/oats.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# OATS is an acceptance testing framework for OpenTelemetry - -# https://github.com/grafana/oats/tree/main/yaml -oats-schema-version: 2 -docker-compose: - files: - - ./docker-compose.yml -expected: - custom-checks: - - script: ./service_instance_id_check.py - metrics: - - promql: "uptime_seconds_total{}" - value: ">= 0" diff --git a/examples/example-exporter-opentelemetry/oats-tests/agent/service_instance_id_check.py b/examples/example-exporter-opentelemetry/oats-tests/agent/service_instance_id_check.py deleted file mode 100755 index 35ff88b8d..000000000 --- a/examples/example-exporter-opentelemetry/oats-tests/agent/service_instance_id_check.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python3 -""" -Check if the service instance id is present in the exported data. -Returns 0 if the service instance id is present in the exported data. -""" - -import json -import urllib.parse -from urllib.request import urlopen - - -def get_json(url): - with urlopen(url) as response: - return json.loads(response.read().decode("utf-8")) - - -def main(): - # Query Prometheus for target_info - res = get_json("http://localhost:9090/api/v1/query?query=target_info") - - # Uncomment for local debugging - # with open('example_target_info.json') as f: - # res = json.load(f) - - instance_ids = { - r["metric"]["instance"] - for r in res["data"]["result"] - if r["metric"].get("service_name") != "otelcol-contrib" - } - instance_ids = list(instance_ids) - - print(f"Instance ids found:{instance_ids}") - if len(instance_ids) > 1: - print("More than one instance id found") - print(res) - - # Both the agent and the exporter should report the same instance id - assert len(instance_ids) == 1, "Expected exactly one instance id" - - query = f'target_info{{instance="{instance_ids[0]}"}}' - encoded_query = urllib.parse.quote_plus(query) - res = get_json(f"http://localhost:9090/api/v1/query?query={encoded_query}") - - infos = res["data"]["result"] - print(infos) - - # They should not have the same target info (e.g. only the agent has telemetry_distro_name) - assert len(infos) == 2, "Expected two target info results" - - -if __name__ == "__main__": - main() diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/oats-case.yaml b/examples/example-exporter-opentelemetry/oats-tests/http/oats-case.yaml new file mode 100644 index 000000000..fab99dfe3 --- /dev/null +++ b/examples/example-exporter-opentelemetry/oats-tests/http/oats-case.yaml @@ -0,0 +1,11 @@ +name: http protobuf exporter emits uptime metric +fixture: + compose: + template: lgtm + file: docker-compose.yml +seed: + type: app +expected: + metrics: + - promql: "uptime_seconds_total{}" + value: ">= 0" diff --git a/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml b/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml deleted file mode 100644 index dbcfcf84f..000000000 --- a/examples/example-exporter-opentelemetry/oats-tests/http/oats.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# OATS is an acceptance testing framework for OpenTelemetry - -# https://github.com/grafana/oats/tree/main/yaml -oats-schema-version: 2 -docker-compose: - files: - - ./docker-compose.yml -expected: - metrics: - - promql: "uptime_seconds_total{}" - value: ">= 0" diff --git a/mise.lock b/mise.lock index 89d88d894..fb15a188d 100644 --- a/mise.lock +++ b/mise.lock @@ -86,6 +86,91 @@ url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-x86_64-p url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469229804" provenance = "github-attestations" +[[tools."aqua:grafana/gcx"]] +version = "v0.5.0" +backend = "aqua:grafana/gcx" + +[tools."aqua:grafana/gcx"."platforms.linux-arm64"] +checksum = "sha256:07811e994101abf3fe51b7d9d5bbcc045830382ece80f37af29d32234cbe4731" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583603" + +[tools."aqua:grafana/gcx"."platforms.linux-arm64-musl"] +checksum = "sha256:07811e994101abf3fe51b7d9d5bbcc045830382ece80f37af29d32234cbe4731" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583603" + +[tools."aqua:grafana/gcx"."platforms.linux-x64"] +checksum = "sha256:5c0ce026b0625da09ee976115799cba28e6c84375f802c64f7995c0ba87a83b6" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583622" + +[tools."aqua:grafana/gcx"."platforms.linux-x64-musl"] +checksum = "sha256:5c0ce026b0625da09ee976115799cba28e6c84375f802c64f7995c0ba87a83b6" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583622" + +[tools."aqua:grafana/gcx"."platforms.macos-arm64"] +checksum = "sha256:3835b426490dddbf0cd3cd4a96566ebb2b2a45121c3d61c518e8c3ae54d1ac0c" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583602" + +[tools."aqua:grafana/gcx"."platforms.macos-x64"] +checksum = "sha256:40db287702572bc9e7c5decdd25cd054e8b076008b8f3d543eafa721441da4db" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583604" + +[tools."aqua:grafana/gcx"."platforms.windows-x64"] +checksum = "sha256:e71bdc867b6d13399d4aad15a667c7bc5c6fbf37a187cb87dafeb61113c48921" +url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_windows_amd64.zip" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583601" + +[[tools."aqua:grafana/oats"]] +version = "0.8.0" +backend = "aqua:grafana/oats" + +[tools."aqua:grafana/oats"."platforms.linux-arm64"] +checksum = "sha256:82eaf1e836cea916b96cef6745423efd8256ceab64bbabd1fa8f13b3883a1212" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171323" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.linux-arm64-musl"] +checksum = "sha256:82eaf1e836cea916b96cef6745423efd8256ceab64bbabd1fa8f13b3883a1212" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171323" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.linux-x64"] +checksum = "sha256:ea4368c6d7f62244ce959ba60512f271d46d133b50350077257e2bb81c03a5ca" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171351" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.linux-x64-musl"] +checksum = "sha256:ea4368c6d7f62244ce959ba60512f271d46d133b50350077257e2bb81c03a5ca" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171351" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.macos-arm64"] +checksum = "sha256:156bb14787a09093de8ad0370c95e8104b771ca0b3ede382541f9837db797f27" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171322" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.macos-x64"] +checksum = "sha256:034bc120d0d8bbf8aff05f61a6b569efec821df19bd25bb602ee77d4a6368235" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171352" +provenance = "github-attestations" + +[tools."aqua:grafana/oats"."platforms.windows-x64"] +checksum = "sha256:166a5577c66efa9e4d677856ae1780212ee27c081042c8d54db0c996019adbc0" +url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_windows_amd64.zip" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171324" +provenance = "github-attestations" + [[tools."aqua:jonwiggins/xmloxide"]] version = "v0.4.3" backend = "aqua:jonwiggins/xmloxide" @@ -250,10 +335,6 @@ checksum = "sha256:7ec31e1a6a9983aa2a4942cb66dfd35e8b61e76263460413988438ae14269 url = "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.8.0/ec-windows-amd64.zip" url_api = "https://api.github.com/repos/editorconfig-checker/editorconfig-checker/releases/assets/460248513" -[[tools."go:github.com/grafana/oats"]] -version = "0.7.0" -backend = "go:github.com/grafana/oats" - [[tools.google-java-format]] version = "1.35.0" backend = "aqua:google/google-java-format" diff --git a/mise.toml b/mise.toml index 93e9a3634..a9dbac2bc 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,6 @@ [tools] -"go:github.com/grafana/oats" = "0.7.0" +"aqua:grafana/gcx" = "v0.5.0" +"aqua:grafana/oats" = "0.8.0" hugo = "0.164.0" java = "temurin-25.0.3+9.0.LTS" node = "24.18.0" @@ -93,7 +94,7 @@ run = "flint run --fix" [tasks.acceptance-test] description = "Run OATs acceptance tests" depends = "build" -run = "oats -lgtm-version $LGTM_VERSION -timeout 5m examples/" +run = "oats --no-cache --lgtm-version $LGTM_VERSION --timeout 5m ." [tasks.javadoc] description = "Generate Javadoc" diff --git a/oats-config.yaml b/oats-config.yaml new file mode 100644 index 000000000..d23490ffb --- /dev/null +++ b/oats-config.yaml @@ -0,0 +1,6 @@ +meta: + version: 3 + +cases: + - examples/example-exporter-opentelemetry/oats-tests/http/oats-case.yaml + - examples/example-exporter-opentelemetry/oats-tests/agent/oats-case.yaml From 174651dd3168ad2337dbb75377661445facb4d09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 16:00:40 +0200 Subject: [PATCH 20/83] chore(deps): update dependency grafana/docker-otel-lgtm to v0.29.2 (#2339) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [grafana/docker-otel-lgtm](https://redirect.github.com/grafana/docker-otel-lgtm) | patch | `0.29.1` → `0.29.2` | --- ### Release Notes
grafana/docker-otel-lgtm (grafana/docker-otel-lgtm) ### [`v0.29.2`](https://redirect.github.com/grafana/docker-otel-lgtm/releases/tag/v0.29.2) [Compare Source](https://redirect.github.com/grafana/docker-otel-lgtm/compare/v0.29.1...v0.29.2) #### What's Changed ##### Other Changes - Refresh stale Grafana-managed plugins by [@​martincostello](https://redirect.github.com/martincostello) in [#​1621](https://redirect.github.com/grafana/docker-otel-lgtm/pull/1621) **Full Changelog**:
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index a9dbac2bc..7d63e10db 100644 --- a/mise.toml +++ b/mise.toml @@ -27,7 +27,7 @@ zizmor = "1.26.1" [env] FLINT_CONFIG_DIR = ".github/config" # renovate: datasource=github-releases depName=grafana/docker-otel-lgtm -LGTM_VERSION = "0.29.1" +LGTM_VERSION = "0.29.2" # Latest JMX Exporter release; used as the default ref for the compatibility job. # renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced DEFAULT_JMX_EXPORTER_VERSION = "v1.6.0" From 7c081da30c522abb0b931d3800bbc5f3b2904ad4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 16:00:56 +0200 Subject: [PATCH 21/83] chore(deps): update jdx/mise-action action to v4.2.2 (#2340) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) | action | patch | `v4.2.1` → `v4.2.2` | --- ### Release Notes
jdx/mise-action (jdx/mise-action) ### [`v4.2.2`](https://redirect.github.com/jdx/mise-action/compare/v4.2.1...v4.2.2) [Compare Source](https://redirect.github.com/jdx/mise-action/compare/v4.2.1...v4.2.2)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/api-diff.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/bump-api-diff-baseline.yml | 2 +- .github/workflows/generate-protobuf.yml | 2 +- .github/workflows/github-pages.yaml | 2 +- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/jmx-exporter-compatibility.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/micrometer-compatibility.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 2 +- .github/workflows/pr-benchmarks.yml | 2 +- .github/workflows/regenerate-api-diff-otel.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 4e2204fdd..758d948a7 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/api-diff.yml b/.github/workflows/api-diff.yml index d93f8732e..eed6c4178 100644 --- a/.github/workflows/api-diff.yml +++ b/.github/workflows/api-diff.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5eb59a36..17204a05a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/bump-api-diff-baseline.yml b/.github/workflows/bump-api-diff-baseline.yml index 88e276efe..05690d928 100644 --- a/.github/workflows/bump-api-diff-baseline.yml +++ b/.github/workflows/bump-api-diff-baseline.yml @@ -33,7 +33,7 @@ jobs: with: ref: ${{ env.SNAPSHOT_BRANCH }} persist-credentials: true - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml index dbd042db9..56cb3a57b 100644 --- a/.github/workflows/generate-protobuf.yml +++ b/.github/workflows/generate-protobuf.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index ff7268e9a..b96983857 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -37,7 +37,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 6a78ce47c..3b2adc7a6 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -31,7 +31,7 @@ jobs: persist-credentials: false - name: Set up mise - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index 247a8ecd3..361b43f63 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 421a70c17..e10003316 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 # needed for git diff --merge-base in lint:links - name: Setup mise - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index ac154b3c8..50d401336 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 1e5ad7ede..472667350 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index a140e55b0..38b939b22 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/pr-benchmarks.yml b/.github/workflows/pr-benchmarks.yml index 40bd50f1d..a20e1cb28 100644 --- a/.github/workflows/pr-benchmarks.yml +++ b/.github/workflows/pr-benchmarks.yml @@ -45,7 +45,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/regenerate-api-diff-otel.yml b/.github/workflows/regenerate-api-diff-otel.yml index c6e38b11b..54accc0ef 100644 --- a/.github/workflows/regenerate-api-diff-otel.yml +++ b/.github/workflows/regenerate-api-diff-otel.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 456173d15..5bc70732c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,7 +69,7 @@ jobs: ref: ${{ inputs.tag }} persist-credentials: false - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index 702d2b2fb..4cbe51d26 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 From 8d257bd70f1b4c7c31d70c559495fc66b9bff874 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jul 2026 10:55:56 +0200 Subject: [PATCH 22/83] chore(deps): update jdx/mise-action action to v4.2.3 (#2343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [jdx/mise-action](https://redirect.github.com/jdx/mise-action) | action | patch | `v4.2.2` → `v4.2.3` | --- ### Release Notes
jdx/mise-action (jdx/mise-action) ### [`v4.2.3`](https://redirect.github.com/jdx/mise-action/compare/v4.2.2...v4.2.3) [Compare Source](https://redirect.github.com/jdx/mise-action/compare/v4.2.2...v4.2.3)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/acceptance-tests.yml | 2 +- .github/workflows/api-diff.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/bump-api-diff-baseline.yml | 2 +- .github/workflows/generate-protobuf.yml | 2 +- .github/workflows/github-pages.yaml | 2 +- .github/workflows/java-version-matrix-tests.yml | 2 +- .github/workflows/jmx-exporter-compatibility.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/micrometer-compatibility.yml | 2 +- .github/workflows/native-tests.yml | 2 +- .github/workflows/nightly-benchmarks.yml | 2 +- .github/workflows/pr-benchmarks.yml | 2 +- .github/workflows/regenerate-api-diff-otel.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-release-build.yml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml index 758d948a7..410da0c3f 100644 --- a/.github/workflows/acceptance-tests.yml +++ b/.github/workflows/acceptance-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/api-diff.yml b/.github/workflows/api-diff.yml index eed6c4178..c7ad1f065 100644 --- a/.github/workflows/api-diff.yml +++ b/.github/workflows/api-diff.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 17204a05a..765b685f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/bump-api-diff-baseline.yml b/.github/workflows/bump-api-diff-baseline.yml index 05690d928..edbf002f8 100644 --- a/.github/workflows/bump-api-diff-baseline.yml +++ b/.github/workflows/bump-api-diff-baseline.yml @@ -33,7 +33,7 @@ jobs: with: ref: ${{ env.SNAPSHOT_BRANCH }} persist-credentials: true - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/generate-protobuf.yml b/.github/workflows/generate-protobuf.yml index 56cb3a57b..6c6e54495 100644 --- a/.github/workflows/generate-protobuf.yml +++ b/.github/workflows/generate-protobuf.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index b96983857..a168df077 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -37,7 +37,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/java-version-matrix-tests.yml b/.github/workflows/java-version-matrix-tests.yml index 3b2adc7a6..fbe49c90f 100644 --- a/.github/workflows/java-version-matrix-tests.yml +++ b/.github/workflows/java-version-matrix-tests.yml @@ -31,7 +31,7 @@ jobs: persist-credentials: false - name: Set up mise - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index 361b43f63..154c6f0a2 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e10003316..a78b590f9 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 # needed for git diff --merge-base in lint:links - name: Setup mise - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index 50d401336..a27f75048 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 472667350..473a2935f 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -13,7 +13,7 @@ jobs: with: persist-credentials: false uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/nightly-benchmarks.yml b/.github/workflows/nightly-benchmarks.yml index 38b939b22..2aa5bf1aa 100644 --- a/.github/workflows/nightly-benchmarks.yml +++ b/.github/workflows/nightly-benchmarks.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/pr-benchmarks.yml b/.github/workflows/pr-benchmarks.yml index a20e1cb28..39f02cae9 100644 --- a/.github/workflows/pr-benchmarks.yml +++ b/.github/workflows/pr-benchmarks.yml @@ -45,7 +45,7 @@ jobs: fetch-depth: 0 - name: Setup mise - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/regenerate-api-diff-otel.yml b/.github/workflows/regenerate-api-diff-otel.yml index 54accc0ef..da1db33b2 100644 --- a/.github/workflows/regenerate-api-diff-otel.yml +++ b/.github/workflows/regenerate-api-diff-otel.yml @@ -18,7 +18,7 @@ jobs: with: ref: ${{ github.ref }} persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5bc70732c..a30db041e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,7 +69,7 @@ jobs: ref: ${{ inputs.tag }} persist-credentials: false - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 diff --git a/.github/workflows/test-release-build.yml b/.github/workflows/test-release-build.yml index 4cbe51d26..64bc75b30 100644 --- a/.github/workflows/test-release-build.yml +++ b/.github/workflows/test-release-build.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false fetch-tags: "true" fetch-depth: 0 - - uses: jdx/mise-action@f10502fc09dadecfefb962fff68ce77213930204 # v4.2.2 + - uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3 with: version: v2026.7.5 sha256: 5f7ab76afdf0780d12edeaa67e908094e9ccf7924cfe203e415c1cfb87bbf778 From 9432fdc1933611d34d944d4640ebca3bf91f8ee4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jul 2026 10:56:34 +0200 Subject: [PATCH 23/83] chore(deps): update dependency aqua:grafana/gcx to v0.6.0 (#2342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [aqua:grafana/gcx](https://redirect.github.com/grafana/gcx) | minor | `0.5.0` → `0.6.0` | --- ### Release Notes
grafana/gcx (aqua:grafana/gcx) ### [`v0.6.0`](https://redirect.github.com/grafana/gcx/blob/HEAD/CHANGELOG.md#v060-2026-07-24) [Compare Source](https://redirect.github.com/grafana/gcx/compare/v0.5.0...v0.6.0) ##### Breaking changes - Naming convergence: verb-first subcommand renames across all providers (e.g. `versions`→`list-versions`, `create`→`upsert`, `summary`→`stats`) - Config split into separate stacks, cloud entries, and contexts (auto-migrates) - Agent output contract: one JSON document per finite command - Profiles: `profile-types` renamed to `list-profile-types` at both mounts - Alert: dropped `create`/`update`/`apply` aliases from templates `upsert` ##### Features - Telemetry: first-run notice and default-on anonymous usage stats - Output: list truncation contract with honest caps and agent-legible metadata - aio11y: experiments v2 shapes and commands, plus conversation annotations - kg: `--dry-run` for model-rules and prom-rules upsert - Profiles: time-range flags for `labels` and `list-profile-types` ##### Fixes - Cloud: stop misreporting invalid stack slugs as "slug already taken" - appo11y: honor `--config` across the direct command tree - aio11y: honor `--config` in direct agento11y CRUD commands - irm: decode expanded webhook integration filters ##### Docs - Added anonymous usage statistics page; fixed usage-stats command examples
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.lock | 44 ++++++++++++++++++++++---------------------- mise.toml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/mise.lock b/mise.lock index fb15a188d..25e7b7042 100644 --- a/mise.lock +++ b/mise.lock @@ -87,43 +87,43 @@ url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469229804" provenance = "github-attestations" [[tools."aqua:grafana/gcx"]] -version = "v0.5.0" +version = "v0.6.0" backend = "aqua:grafana/gcx" [tools."aqua:grafana/gcx"."platforms.linux-arm64"] -checksum = "sha256:07811e994101abf3fe51b7d9d5bbcc045830382ece80f37af29d32234cbe4731" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583603" +checksum = "sha256:4678cce06fc9d6cc364c460f67be0bb06861e00e3c058e48697ae7428938efcb" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386380" [tools."aqua:grafana/gcx"."platforms.linux-arm64-musl"] -checksum = "sha256:07811e994101abf3fe51b7d9d5bbcc045830382ece80f37af29d32234cbe4731" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583603" +checksum = "sha256:4678cce06fc9d6cc364c460f67be0bb06861e00e3c058e48697ae7428938efcb" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386380" [tools."aqua:grafana/gcx"."platforms.linux-x64"] -checksum = "sha256:5c0ce026b0625da09ee976115799cba28e6c84375f802c64f7995c0ba87a83b6" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583622" +checksum = "sha256:5e76c064f14d9ec360cc48c46251b06a47762ab0dc755e4275e14ce2f67e8dbe" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386396" [tools."aqua:grafana/gcx"."platforms.linux-x64-musl"] -checksum = "sha256:5c0ce026b0625da09ee976115799cba28e6c84375f802c64f7995c0ba87a83b6" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583622" +checksum = "sha256:5e76c064f14d9ec360cc48c46251b06a47762ab0dc755e4275e14ce2f67e8dbe" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386396" [tools."aqua:grafana/gcx"."platforms.macos-arm64"] -checksum = "sha256:3835b426490dddbf0cd3cd4a96566ebb2b2a45121c3d61c518e8c3ae54d1ac0c" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_darwin_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583602" +checksum = "sha256:7192ec16aef172d03031aa156c155eb351f230dae86e64e1ed337503fe45a1eb" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386379" [tools."aqua:grafana/gcx"."platforms.macos-x64"] -checksum = "sha256:40db287702572bc9e7c5decdd25cd054e8b076008b8f3d543eafa721441da4db" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_darwin_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583604" +checksum = "sha256:b5174d5c47ffeaf21c1a65c83b908538cf664649199bd017d5f3addb537fc4aa" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386377" [tools."aqua:grafana/gcx"."platforms.windows-x64"] -checksum = "sha256:e71bdc867b6d13399d4aad15a667c7bc5c6fbf37a187cb87dafeb61113c48921" -url = "https://github.com/grafana/gcx/releases/download/v0.5.0/gcx_0.5.0_windows_amd64.zip" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/484583601" +checksum = "sha256:de456400960e2405de01dc493f7659e6a2a6168ea2c26b02e08ccbd06fa22385" +url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_windows_amd64.zip" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386381" [[tools."aqua:grafana/oats"]] version = "0.8.0" diff --git a/mise.toml b/mise.toml index 7d63e10db..c44ba3da7 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -"aqua:grafana/gcx" = "v0.5.0" +"aqua:grafana/gcx" = "v0.6.0" "aqua:grafana/oats" = "0.8.0" hugo = "0.164.0" java = "temurin-25.0.3+9.0.LTS" From 372423c0e54cff6206e9ba5845bd33f69f6c033c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 11:03:26 +0200 Subject: [PATCH 24/83] chore(deps): update flint to v0.22.9 (#2345) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [aqua:grafana/flint](https://redirect.github.com/grafana/flint) | patch | `0.22.7` → `0.22.9` | | [grafana/flint](https://redirect.github.com/grafana/flint) | patch | `v0.22.7` → `v0.22.9` | --- ### Release Notes
grafana/flint (aqua:grafana/flint) ### [`v0.22.9`](https://redirect.github.com/grafana/flint/blob/HEAD/CHANGELOG.md#0229---2026-07-14) [Compare Source](https://redirect.github.com/grafana/flint/compare/v0.22.8...v0.22.9) ##### Fixed - stream lychee input files through stdin ([#​400](https://redirect.github.com/grafana/flint/pull/400)) - discover flint project root from parent mise files ([#​401](https://redirect.github.com/grafana/flint/pull/401)) ##### Other - add local flint testing guidance ([#​402](https://redirect.github.com/grafana/flint/pull/402)) - *(deps)* update taiki-e/install-action action to v2.83.1 ([#​399](https://redirect.github.com/grafana/flint/pull/399)) ### [`v0.22.8`](https://redirect.github.com/grafana/flint/blob/HEAD/CHANGELOG.md#0228---2026-07-13) [Compare Source](https://redirect.github.com/grafana/flint/compare/v0.22.7...v0.22.8) ##### Fixed - avoid Windows arg-length limits in git check-attr and Scope::Files checks ([#​390](https://redirect.github.com/grafana/flint/pull/390)) ##### Other - *(deps)* lock file maintenance ([#​397](https://redirect.github.com/grafana/flint/pull/397)) - *(deps)* update dependency mise to v2026.7.5 ([#​395](https://redirect.github.com/grafana/flint/pull/395)) - *(deps)* update linters ([#​396](https://redirect.github.com/grafana/flint/pull/396)) - *(deps)* update taiki-e/install-action action to v2.83.0 ([#​394](https://redirect.github.com/grafana/flint/pull/394)) - *(deps)* update dependency rust to v1.97.0 ([#​392](https://redirect.github.com/grafana/flint/pull/392)) - *(deps)* update taiki-e/install-action action to v2.82.11 ([#​391](https://redirect.github.com/grafana/flint/pull/391)) - *(deps)* update dependency go to v1.26.5 ([#​389](https://redirect.github.com/grafana/flint/pull/389)) - *(deps)* update taiki-e/install-action action to v2.82.10 ([#​388](https://redirect.github.com/grafana/flint/pull/388)) - *(deps)* update taiki-e/install-action action to v2.82.9 ([#​387](https://redirect.github.com/grafana/flint/pull/387))
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 4am on Monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/renovate.json5 | 2 +- mise.lock | 32 ++++++++++++++++---------------- mise.toml | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index e0f47d2a1..0dc002f19 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,6 +1,6 @@ { $schema: "https://docs.renovatebot.com/renovate-schema.json", - extends: ["config:best-practices", "config:recommended", "github>grafana/flint#v0.22.7"], + extends: ["config:best-practices", "config:recommended", "github>grafana/flint#v0.22.9"], platformCommit: "enabled", automerge: true, ignorePaths: [ diff --git a/mise.lock b/mise.lock index 25e7b7042..179dfef1d 100644 --- a/mise.lock +++ b/mise.lock @@ -47,43 +47,43 @@ url_api = "https://api.github.com/repos/rhysd/actionlint/releases/assets/3849249 provenance = "github-attestations" [[tools."aqua:grafana/flint"]] -version = "0.22.7" +version = "0.22.9" backend = "aqua:grafana/flint" [tools."aqua:grafana/flint"."platforms.linux-arm64"] -checksum = "sha256:a9dc15057dee4a896b0015c5574a330865b5f031f9b67e64a50c342f04d70de1" -url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-aarch64-unknown-linux-gnu.tar.gz" -url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469225119" +checksum = "sha256:aae323ea911f9a5012879b79fd3b913837d301098173684d5f9672b6d15c1193" +url = "https://github.com/grafana/flint/releases/download/v0.22.9/flint-aarch64-unknown-linux-gnu.tar.gz" +url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476876537" provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.linux-arm64-musl"] provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.linux-x64"] -checksum = "sha256:9a0fdec27fa1d101b139e73ba73c4837210a8659903e0a3fefb83b7fadb60048" -url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-x86_64-unknown-linux-gnu.tar.gz" -url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469224671" +checksum = "sha256:e7b0597d82568e441dab13091f674f15c36914b0f412c8fcc19d3ed880da320a" +url = "https://github.com/grafana/flint/releases/download/v0.22.9/flint-x86_64-unknown-linux-gnu.tar.gz" +url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476875905" provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.linux-x64-musl"] provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.macos-arm64"] -checksum = "sha256:e3a7df200923fc22d34df5e67caebe949a6f7fa9a4ebaf3afd51f3c92bc85f63" -url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-aarch64-apple-darwin.tar.gz" -url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469225067" +checksum = "sha256:0370a9f0f16b262cb2c683cc2da539d39e131a3167ac44d3471b57135508b3b2" +url = "https://github.com/grafana/flint/releases/download/v0.22.9/flint-aarch64-apple-darwin.tar.gz" +url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476875995" provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.macos-x64"] -checksum = "sha256:79c85a3abd9cbec8c1d2844cf0c5d2c2da1857278149df38d8075e48775bef34" -url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-x86_64-apple-darwin.tar.gz" -url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469226207" +checksum = "sha256:b14167a1e47ac34439518680ff5df16554056c5099bafd650f01a37cf29b4a3a" +url = "https://github.com/grafana/flint/releases/download/v0.22.9/flint-x86_64-apple-darwin.tar.gz" +url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476878878" provenance = "github-attestations" [tools."aqua:grafana/flint"."platforms.windows-x64"] -checksum = "sha256:a42a94ba2b7035d1d21f5ba34b64093c2e7c9c2af2b151adab113c787e6c0220" -url = "https://github.com/grafana/flint/releases/download/v0.22.7/flint-x86_64-pc-windows-msvc.zip" -url_api = "https://api.github.com/repos/grafana/flint/releases/assets/469229804" +checksum = "sha256:b5b9fb31413e11600ec0f8d4c0cf56c7698b1e38f156018364b3f1a2dcfbcbd0" +url = "https://github.com/grafana/flint/releases/download/v0.22.9/flint-x86_64-pc-windows-msvc.zip" +url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476892021" provenance = "github-attestations" [[tools."aqua:grafana/gcx"]] diff --git a/mise.toml b/mise.toml index c44ba3da7..94c3beb17 100644 --- a/mise.toml +++ b/mise.toml @@ -8,7 +8,7 @@ protoc = "35.1" # Linters actionlint = "1.7.12" -"aqua:grafana/flint" = "0.22.7" +"aqua:grafana/flint" = "0.22.9" "aqua:jonwiggins/xmloxide" = "v0.4.3" "aqua:owenlamont/ryl" = "0.21.0" biome = "2.5.3" From a75c5fd53509d3544a51c17c9649a05de4907eae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 13:20:14 +0200 Subject: [PATCH 25/83] chore(deps): update actions/stale action to v11 (#2348) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/stale](https://redirect.github.com/actions/stale) | action | major | `v10.4.0` → `v11.0.0` | --- ### Release Notes
actions/stale (actions/stale) ### [`v11.0.0`](https://redirect.github.com/actions/stale/releases/tag/v11.0.0) [Compare Source](https://redirect.github.com/actions/stale/compare/v11.0.0...v11.0.0) #### What's Changed ##### Enhancement - Migrate to ESM and update dependencies by [@​chiranjib-swain](https://github-grid.enterprise.slack.com/team/U08CVLQ4JKE) in [#​1350](https://redirect.github.com/actions/stale/pull/1350) ##### Dependency Update - Override brace-expansion to 5.0.8 to address 24 high-severity dependency vulnerabilities by [@​dependabot](https://redirect.github.com/dependabot) in [#​1351](https://redirect.github.com/actions/stale/pull/1351) **Full Changelog**: ### [`v11`](https://redirect.github.com/actions/stale/compare/v10.4.0...v11.0.0) [Compare Source](https://redirect.github.com/actions/stale/compare/v10.4.0...v11.0.0)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/issue-management-stale-action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/issue-management-stale-action.yml b/.github/workflows/issue-management-stale-action.yml index e90b120a5..f0a294745 100644 --- a/.github/workflows/issue-management-stale-action.yml +++ b/.github/workflows/issue-management-stale-action.yml @@ -25,7 +25,7 @@ jobs: # Handle stale PRs # - After 120 days inactive: Adds "stale" label + warning comment # - After 30 more days inactive: Closes - - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10.4.0 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: days-before-issue-stale: -1 days-before-issue-close: -1 @@ -43,7 +43,7 @@ jobs: # Handle stale issues # - After 360 days (12 months) inactive: Adds "stale" label + warning comment # - After 30 more days inactive: Closes - - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10.4.0 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: days-before-issue-stale: 360 days-before-issue-close: 30 From f6fe4934c34b7ef40a1c90af1d0b85b37ba05499 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:52:28 +0200 Subject: [PATCH 26/83] chore(deps): update linters (#2346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > ℹ️ **Note** > > This PR body was truncated due to platform limits. This PR contains the following updates: | Package | Update | Change | Pending | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [aqua:jonwiggins/xmloxide](https://redirect.github.com/jonwiggins/xmloxide) | patch | `0.4.3` → `0.4.4` | | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/jonwiggins%2fxmloxide/0.4.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/jonwiggins%2fxmloxide/v0.4.3/0.4.4?slim=true) | | [biome](https://redirect.github.com/biomejs/biome) | patch | `2.5.3` → `2.5.5` | | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/biomejs%2fbiome/2.5.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/biomejs%2fbiome/2.5.3/2.5.5?slim=true) | | [npm:renovate](https://renovatebot.com) ([source](https://redirect.github.com/renovatebot/renovate)) | minor | [`43.257.4` → `43.279.1`](https://octochangelog.com/compare?repo=renovatebot%2Frenovate&from=43.257.4&to=43.279.1) | `43.283.0` (+10) | ![age](https://developer.mend.io/api/mc/badges/age/npm/renovate/43.279.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/renovate/43.257.4/43.279.1?slim=true) | | [ruff](https://redirect.github.com/astral-sh/ruff) | minor | `0.15.21` → `0.16.0` | | ![age](https://developer.mend.io/api/mc/badges/age/github-releases/astral-sh%2fruff/0.16.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-releases/astral-sh%2fruff/0.15.21/0.16.0?slim=true) | | [rumdl](https://redirect.github.com/rvben/rumdl) | patch | `v0.2.31` → `v0.2.43` | | ![age](https://developer.mend.io/api/mc/badges/age/github-releases/rvben%2frumdl/v0.2.43?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-releases/rvben%2frumdl/v0.2.31/v0.2.43?slim=true) | | [zizmor](https://redirect.github.com/zizmorcore/zizmor) | minor | `1.26.1` → `1.28.0` | | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/zizmorcore%2fzizmor/1.28.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/zizmorcore%2fzizmor/1.26.1/1.28.0?slim=true) | --- ### Release Notes
jonwiggins/xmloxide (aqua:jonwiggins/xmloxide) ### [`v0.4.4`](https://redirect.github.com/jonwiggins/xmloxide/blob/HEAD/CHANGELOG.md#044---2026-07-20) [Compare Source](https://redirect.github.com/jonwiggins/xmloxide/compare/v0.4.3...v0.4.4) ##### Security - **Fix stack exhaustion when parsing deeply-nested DTD content models** (CVE-2026-61727 / GHSA-7jmw-29gc-ffx4, thanks [@​williamareynolds](https://redirect.github.com/williamareynolds)). The DTD parser recursed without a depth bound when parsing an `` content model, so a small untrusted document with many nested `(` in a content model could overflow the stack and abort the process — an uncatchable denial of service (CWE-674). This is reachable on the default parse path because the internal DTD subset is parsed during ordinary parsing, and the existing `ParseOptions::max_depth` did not cover it (it bounds element nesting, not the DTD content-model grammar). The content-model recursion is now bounded at 256 levels and returns a normal `ParseError` past the limit; well-formed DTDs are unaffected.
biomejs/biome (biome) ### [`v2.5.5`](https://redirect.github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.5): Biome CLI v2.5.5 [Compare Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.4...@biomejs/biome@2.5.5) #### 2.5.5 ##### Patch Changes - [#​10972](https://redirect.github.com/biomejs/biome/pull/10972) [`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) for unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing `2n` case: ```ts declare const value: 1n | 2n; switch (value) { case 1n: break; } ``` - [#​10972](https://redirect.github.com/biomejs/biome/pull/10972) [`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed false positives in [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/) and [`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/) when member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved: ```ts type Recursive = Recursive; declare const value: Recursive; String(value); value || "fallback"; ``` - [#​10977](https://redirect.github.com/biomejs/biome/pull/10977) [`0bf7486`](https://redirect.github.com/biomejs/biome/commit/0bf748653e488d0b959d39847641438cdb28188b) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [#​10922](https://redirect.github.com/biomejs/biome/issues/10922): the action [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) no longer triggers for HTML instructions. - [#​10957](https://redirect.github.com/biomejs/biome/pull/10957) [`cf263c4`](https://redirect.github.com/biomejs/biome/commit/cf263c4700e9f24115e541d1f142934a9b2d878f) Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) failing to detect `Object.fromEntries`, `Object.defineProperty`, and `Reflect.defineProperty` calls with comments between their tokens. - [#​10983](https://redirect.github.com/biomejs/biome/pull/10983) [`edc0ed7`](https://redirect.github.com/biomejs/biome/commit/edc0ed738ab8da3d512d527196684bd668090854) Thanks [@​ayaangazali](https://redirect.github.com/ayaangazali)! - Fixed [#​10980](https://redirect.github.com/biomejs/biome/issues/10980): [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/) no longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as `` in Astro and Svelte files. Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the `link` role instead of `generic`. - [#​10889](https://redirect.github.com/biomejs/biome/pull/10889) [`89526e3`](https://redirect.github.com/biomejs/biome/commit/89526e3858c437408ec9ff192c35a866ad991d1b) Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries. ```diff - A:HOVER { COLOR: INITIAL; } + A:hover { color: initial; } - @​KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } } + @​keyframes :GLOBAL KeepFrames { from { color: RED; } } - @​CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } } + @​container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } } ``` - [#​10964](https://redirect.github.com/biomejs/biome/pull/10964) [`794ccd0`](https://redirect.github.com/biomejs/biome/commit/794ccd0528345c4eaa87af1d86f02475277a0a22) Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! - Fixed CSS formatting for comments between declaration values and `!important`. ```diff -a { color: /* before */ /* after */ red !important; } +a { color: /* before */ red /* after */ !important; } ``` - [#​10993](https://redirect.github.com/biomejs/biome/pull/10993) [`b7a9694`](https://redirect.github.com/biomejs/biome/commit/b7a969425d4292fc7c50440da7aea41ce5c9a9c2) Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks. ```diff -.before > /* comment */ .after {} +.before /* comment */ > .after {} ``` It now also keeps selectors with escaped newlines in attribute values inline when they fit. ```diff -div - span[foo="bar\ +div span[foo="bar\ value"] {} ``` - [#​10978](https://redirect.github.com/biomejs/biome/pull/10978) [`8ebafe1`](https://redirect.github.com/biomejs/biome/commit/8ebafe1c7489f1f7af379b8e52b8ad063c82d28a) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [#​10870](https://redirect.github.com/biomejs/biome/issues/10870): [`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/) no longer reports false positives such as `import type { NextRequest } from "next/server"`. - [#​10901](https://redirect.github.com/biomejs/biome/pull/10901) [`68c10e6`](https://redirect.github.com/biomejs/biome/commit/68c10e672fc886b31423b18be01e873d3bf77f43) Thanks [@​Socialpranker](https://redirect.github.com/Socialpranker)! - Fixed [#​10622](https://redirect.github.com/biomejs/biome/issues/10622): the HTML/Vue parser no longer panics on the argument-less `v-bind` shorthand (`:="props"`). This syntax is valid Vue and equivalent to `v-bind="props"`, so the parser now accepts it (along with the longhand `v-bind:="props"`) instead of crashing while building a diagnostic for a missing argument. - [#​10936](https://redirect.github.com/biomejs/biome/pull/10936) [`7df46f5`](https://redirect.github.com/biomejs/biome/commit/7df46f5be0880a02cb37453f01b83c1ba59b1e44) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Improved generic tuple inference for [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The rule now recognizes specialised tuple element types returned through generic aliases. - [#​10941](https://redirect.github.com/biomejs/biome/pull/10941) [`f787725`](https://redirect.github.com/biomejs/biome/commit/f7877258271e20523d5c673e62912fce1d85cd56) Thanks [@​siketyan](https://redirect.github.com/siketyan)! - Fixed [`#10855`](https://redirect.github.com/biomejs/biome/issues/10855): Biome now supports parsing and formatting CSS custom media queries declared with [`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@​custom-media). - [#​10969](https://redirect.github.com/biomejs/biome/pull/10969) [`72d309b`](https://redirect.github.com/biomejs/biome/commit/72d309b655cee70473e20b061f5a45112139688c) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations. - [`e62f6b6`](https://redirect.github.com/biomejs/biome/commit/e62f6b61461227bbfd57fdf1b50b2dc8c01ea5a0) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [#​10963](https://redirect.github.com/biomejs/biome/issues/10963): Biome no longer panics when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) checks a call to a function with multiple call signatures imported from another module. - [#​10931](https://redirect.github.com/biomejs/biome/pull/10931) [`899c60d`](https://redirect.github.com/biomejs/biome/commit/899c60d506115b3f62030236cbd0901bf294e6ab) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed `check --write` command. Now the command reports code frame of the formatted code, if the formatter is enabled. - [#​10904](https://redirect.github.com/biomejs/biome/pull/10904) [`ceee4f4`](https://redirect.github.com/biomejs/biome/commit/ceee4f43dabf88d86b87c9a4ce6051b6738869c2) Thanks [@​qzwxsaedc](https://redirect.github.com/qzwxsaedc)! - Fixed [#​10892](https://redirect.github.com/biomejs/biome/issues/10892): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged: ```ts import type Types from "./types"; declare function parse(): Types.Result; const result = parse(); if (!result.success) { } ``` - [#​10962](https://redirect.github.com/biomejs/biome/pull/10962) [`f0a67f2`](https://redirect.github.com/biomejs/biome/commit/f0a67f2e56c0785595c5cf14a93dba5bb32acf2d) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Biome no longer removes embedded styles and scripts in HTML files. - [#​11000](https://redirect.github.com/biomejs/biome/pull/11000) [`5039a1e`](https://redirect.github.com/biomejs/biome/commit/5039a1ee35771d0193de65a6326781313ab77afb) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects. - [#​10957](https://redirect.github.com/biomejs/biome/pull/10957) [`cf263c4`](https://redirect.github.com/biomejs/biome/commit/cf263c4700e9f24115e541d1f142934a9b2d878f) Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Improved the performance of the [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) lint rule by about 50%. - [#​10992](https://redirect.github.com/biomejs/biome/pull/10992) [`4bf9b21`](https://redirect.github.com/biomejs/biome/commit/4bf9b21319df240e2c5ef2e5a9cb2e9582a0e1d1) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/): The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates. For example, the following callback is now reported. ```ts declare function consume(...args: [number, () => void]): void; const prefix: [number] = [1]; consume(...prefix, async () => {}); ``` - [#​10915](https://redirect.github.com/biomejs/biome/pull/10915) [`b3b12b3`](https://redirect.github.com/biomejs/biome/commit/b3b12b3fe390feabbd9ba097922d6c7e56823406) Thanks [@​Functionhx](https://redirect.github.com/Functionhx)! - Added the rule [`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/). The rule flags negated expressions on the left side of strict equality checks like `!foo === bar` — due to operator precedence this evaluates as `(!foo) === bar` which is almost always a mistake for `foo !== bar`. The rule provides an unsafe fix that flips the operator. ```js // Invalid !foo === bar; !foo !== bar; // Valid foo !== bar; foo === bar; ``` - [#​10970](https://redirect.github.com/biomejs/biome/pull/10970) [`bd1038b`](https://redirect.github.com/biomejs/biome/commit/bd1038be1ad110aae60bcdbe9a154c6a2fc85c14) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Improved overload selection for [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/). Biome now handles overloaded calls, overloaded constructors, rest parameters, union arguments, and generic constraints without selecting an incompatible signature. For example, `noMisusedPromises` now reports the async callback passed to the synchronous overload: ```ts declare function consume(kind: "async", callback: () => Promise): void; declare function consume(kind: "sync", callback: () => void): void; consume("sync", async () => {}); ``` - [#​10933](https://redirect.github.com/biomejs/biome/pull/10933) [`48a4abb`](https://redirect.github.com/biomejs/biome/commit/48a4abb99d41b1241b2a5812a12247b671d0dfed) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) to recognize bigint zero indexes. - [#​10931](https://redirect.github.com/biomejs/biome/pull/10931) [`899c60d`](https://redirect.github.com/biomejs/biome/commit/899c60d506115b3f62030236cbd0901bf294e6ab) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed an orchestration issue that could lead to deadlocks when type-aware rules are enabled. - [#​10969](https://redirect.github.com/biomejs/biome/pull/10969) [`72d309b`](https://redirect.github.com/biomejs/biome/commit/72d309b655cee70473e20b061f5a45112139688c) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Hardened the Biome Language Server by improving its synchronisation logic. - [#​10972](https://redirect.github.com/biomejs/biome/pull/10972) [`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed false positives in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) and [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) when Promise or thenable inference cannot complete. These rules now suppress diagnostics instead of treating incomplete type information as a definite result. For example, `useAwaitThenable` no longer reports `await value` when the value's thenability is unknown: ```ts declare const value: unknown; async function consume() { await value; } ``` #### What's Changed - chore: add latitude to sponsors by [@​ematipico](https://redirect.github.com/ematipico) in [#​10947](https://redirect.github.com/biomejs/biome/pull/10947) - fix(workspace): make `process_file` call stateless by [@​ematipico](https://redirect.github.com/ematipico) in [#​10931](https://redirect.github.com/biomejs/biome/pull/10931) - feat(css): support custom media queries by [@​siketyan](https://redirect.github.com/siketyan) in [#​10941](https://redirect.github.com/biomejs/biome/pull/10941) - fix(inference): harden Salsa type inference by [@​ematipico](https://redirect.github.com/ematipico) in [#​10932](https://redirect.github.com/biomejs/biome/pull/10932) - feat(css\_formatter): align syntax-owned casing policy by [@​denbezrukov](https://redirect.github.com/denbezrukov) in [#​10889](https://redirect.github.com/biomejs/biome/pull/10889) - fix(markdown): let space-indented bullets interrupt paragraphs in block quotes by [@​jfmcdowell](https://redirect.github.com/jfmcdowell) in [#​10914](https://redirect.github.com/biomejs/biome/pull/10914) - feat(lint): add noNegationInEqualityCheck rule by [@​Functionhx](https://redirect.github.com/Functionhx) in [#​10915](https://redirect.github.com/biomejs/biome/pull/10915) - docs(useIterableCallbackReturn): fix list bullet for the from method by [@​dfedoryshchev](https://redirect.github.com/dfedoryshchev) in [#​10956](https://redirect.github.com/biomejs/biome/pull/10956) - refactor(lint): port direct type-aware rules by [@​ematipico](https://redirect.github.com/ematipico) in [#​10933](https://redirect.github.com/biomejs/biome/pull/10933) - chore: changeset and skip check deps by [@​ematipico](https://redirect.github.com/ematipico) in [#​10962](https://redirect.github.com/biomejs/biome/pull/10962) - feat: parse angular attributes by [@​Netail](https://redirect.github.com/Netail) in [#​9242](https://redirect.github.com/biomejs/biome/pull/9242) - fix(css\_formatter): format comments before !important by [@​denbezrukov](https://redirect.github.com/denbezrukov) in [#​10964](https://redirect.github.com/biomejs/biome/pull/10964) - fix(parser): accept argument-less v-bind shorthand `:="props"` in HTML/Vue by [@​Socialpranker](https://redirect.github.com/Socialpranker) in [#​10901](https://redirect.github.com/biomejs/biome/pull/10901) - refactor(lint): port behavior-sensitive type rules by [@​ematipico](https://redirect.github.com/ematipico) in [#​10934](https://redirect.github.com/biomejs/biome/pull/10934) - perf(noThenProperty): use typed syntax tree traversal and TokenText by [@​dyc3](https://redirect.github.com/dyc3) in [#​10957](https://redirect.github.com/biomejs/biome/pull/10957) - fix(workspace): synchronisation and logging by [@​ematipico](https://redirect.github.com/ematipico) in [#​10969](https://redirect.github.com/biomejs/biome/pull/10969) - fix(inference): resolve members of default namespace imports by [@​qzwxsaedc](https://redirect.github.com/qzwxsaedc) in [#​10904](https://redirect.github.com/biomejs/biome/pull/10904) - refactor: discourage usages of `Text`, prefer `TokenText` by [@​dyc3](https://redirect.github.com/dyc3) in [#​10967](https://redirect.github.com/biomejs/biome/pull/10967) - fix(analyzer): handle HTML processing instructions by [@​ematipico](https://redirect.github.com/ematipico) in [#​10977](https://redirect.github.com/biomejs/biome/pull/10977) - fix(inference): improve imported and aliased types by [@​ematipico](https://redirect.github.com/ematipico) in [#​10936](https://redirect.github.com/biomejs/biome/pull/10936) - fix(resolver): fallback to disk loading if `exports` is missing by [@​ematipico](https://redirect.github.com/ematipico) in [#​10978](https://redirect.github.com/biomejs/biome/pull/10978) - fix(inference): improve overload selection by [@​ematipico](https://redirect.github.com/ematipico) in [#​10970](https://redirect.github.com/biomejs/biome/pull/10970) - chore(deps): update rust crate quote to 1.0.47 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10726](https://redirect.github.com/biomejs/biome/pull/10726) - chore(deps): update rust crate rustc-hash to 2.1.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10857](https://redirect.github.com/biomejs/biome/pull/10857) - fix(inference): argument and type parameters inference by [@​ematipico](https://redirect.github.com/ematipico) in [#​10992](https://redirect.github.com/biomejs/biome/pull/10992) - fix(inference): improve member and Promise inference by [@​ematipico](https://redirect.github.com/ematipico) in [#​10971](https://redirect.github.com/biomejs/biome/pull/10971) - fix(css\_formatter): preserve selector boundary comments by [@​denbezrukov](https://redirect.github.com/denbezrukov) in [#​10993](https://redirect.github.com/biomejs/biome/pull/10993) - fix: preview ci by [@​Netail](https://redirect.github.com/Netail) in [#​11001](https://redirect.github.com/biomejs/biome/pull/11001) - fix(daemon): avoid disconnection from clients by [@​ematipico](https://redirect.github.com/ematipico) in [#​11000](https://redirect.github.com/biomejs/biome/pull/11000) - chore(deps): update rust crate globset to 0.4.19 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10999](https://redirect.github.com/biomejs/biome/pull/10999) - feat(fmt/yaml): format document markers, directives, and multi-doc streams by [@​dyc3](https://redirect.github.com/dyc3) in [#​10989](https://redirect.github.com/biomejs/biome/pull/10989) - fix(html\_analyze): account for shorthand attributes when computing implicit ARIA roles by [@​ayaangazali](https://redirect.github.com/ayaangazali) in [#​10983](https://redirect.github.com/biomejs/biome/pull/10983) - fix(inference): suppress incomplete type results by [@​ematipico](https://redirect.github.com/ematipico) in [#​10972](https://redirect.github.com/biomejs/biome/pull/10972) - chore(deps): update dependency [@​changesets/cli](https://redirect.github.com/changesets/cli) to v2.31.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10997](https://redirect.github.com/biomejs/biome/pull/10997) - chore(deps): update rust crate anyhow to 1.0.104 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10998](https://redirect.github.com/biomejs/biome/pull/10998) - ci: release by [@​github-actions](https://redirect.github.com/github-actions)\[bot] in [#​10948](https://redirect.github.com/biomejs/biome/pull/10948) #### New Contributors - [@​Functionhx](https://redirect.github.com/Functionhx) made their first contribution in [#​10915](https://redirect.github.com/biomejs/biome/pull/10915) - [@​Socialpranker](https://redirect.github.com/Socialpranker) made their first contribution in [#​10901](https://redirect.github.com/biomejs/biome/pull/10901) - [@​qzwxsaedc](https://redirect.github.com/qzwxsaedc) made their first contribution in [#​10904](https://redirect.github.com/biomejs/biome/pull/10904) - [@​ayaangazali](https://redirect.github.com/ayaangazali) made their first contribution in [#​10983](https://redirect.github.com/biomejs/biome/pull/10983) **Full Changelog**: ### [`v2.5.4`](https://redirect.github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.4): Biome CLI v2.5.4 [Compare Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.3...@biomejs/biome@2.5.4) #### 2.5.4 ##### Patch Changes - [#​10665](https://redirect.github.com/biomejs/biome/pull/10665) [`55ff995`](https://redirect.github.com/biomejs/biome/commit/55ff995098148446b7e7fdfc19053902bb987122) Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Improved the performance of the HTML parser slightly in our synthetic benchmarks. - [#​10894](https://redirect.github.com/biomejs/biome/pull/10894) [`f4fb10e`](https://redirect.github.com/biomejs/biome/commit/f4fb10e176e537e8ce2cac0c3fd4c38a77f91886) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [#​6392](https://redirect.github.com/biomejs/biome/issues/6392): On-type formatting no longer moves comments before an `if` statement into its body. - [#​10939](https://redirect.github.com/biomejs/biome/pull/10939) [`f2799db`](https://redirect.github.com/biomejs/biome/commit/f2799db38e3d8a644207d9b8f957abea6cb3d9fa) Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed [#​10930](https://redirect.github.com/biomejs/biome/issues/10930): [`noLabelWithoutControl`](https://biomejs.dev/linter/rules/no-label-without-control/) now correctly detects text interpolation in Astro, Svelte & Vue as valid accessible content. - [#​10945](https://redirect.github.com/biomejs/biome/pull/10945) [`ae15d98`](https://redirect.github.com/biomejs/biome/commit/ae15d98bbf2222fbb34e3e31832cba9676a6d01c) Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed [#​10942](https://redirect.github.com/biomejs/biome/issues/10942): Svelte directives don't throw an accidental debug log anymore. - [#​10842](https://redirect.github.com/biomejs/biome/pull/10842) [`5e1abfe`](https://redirect.github.com/biomejs/biome/commit/5e1abfee59155b5fdca8813314371ed54c06acfb) Thanks [@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! - Fixed [#​9196](https://redirect.github.com/biomejs/biome/issues/9196): `biome check --write --unsafe` no longer hangs forever when applying the [`noCommentText`](https://biomejs.dev/linter/rules/no-comment-text/) code fix. The rule's fix now wraps the comment in a real JSX expression container (`{/* comment */}`) instead of re-inserting the braces as plain JSX text, so the fixed code is no longer reported again by the same rule. - [#​10891](https://redirect.github.com/biomejs/biome/pull/10891) [`ecca79e`](https://redirect.github.com/biomejs/biome/commit/ecca79e8ff10f40aa676212c0db0a970c6091615) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Fixed [`#10885`](https://redirect.github.com/biomejs/biome/issues/10885): prevented a module-inference regression introduced by a housekeeping change. - [#​10886](https://redirect.github.com/biomejs/biome/pull/10886) [`60c8043`](https://redirect.github.com/biomejs/biome/commit/60c8043527f7ccc7b505471e1042f2a4324e4d31) Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed [#​10727](https://redirect.github.com/biomejs/biome/issues/10727): Biome now breaks the arguments of curried `test.each`, `it.each`, `describe.each`, and `test.for` calls when they exceed the configured line width. ```diff - test.each([[1, 2]])("a description that is long enough to push the hugged opening line beyond the print width", (a, b) => { - expect(a).toBe(b); - }); + test.each([[1, 2]])( + "a description that is long enough to push the hugged opening line beyond the print width", + (a, b) => { + expect(a).toBe(b); + }, + ); ``` - [#​10895](https://redirect.github.com/biomejs/biome/pull/10895) [`01a85f0`](https://redirect.github.com/biomejs/biome/commit/01a85f04b09f0af05b16a15c137421e312ceada5) Thanks [@​ematipico](https://redirect.github.com/ematipico)! - Biome will now remove stale Unix daemon sockets from older Biome versions when starting a newer daemon. #### What's Changed - feat(yml/fmt): basic block properties by [@​ematipico](https://redirect.github.com/ematipico) in [#​10873](https://redirect.github.com/biomejs/biome/pull/10873) - feat(useSortedClasses): sort important-suffix classes in sort\_v4 by [@​johncarmack1984](https://redirect.github.com/johncarmack1984) in [#​10880](https://redirect.github.com/biomejs/biome/pull/10880) - fix(format/js): wrap curried test each calls by [@​dyc3](https://redirect.github.com/dyc3) in [#​10886](https://redirect.github.com/biomejs/biome/pull/10886) - fix(markdown): parse whitespace after list markers by [@​tidefield](https://redirect.github.com/tidefield) in [#​10869](https://redirect.github.com/biomejs/biome/pull/10869) - fix(inference): use correct function when cloning data by [@​ematipico](https://redirect.github.com/ematipico) in [#​10891](https://redirect.github.com/biomejs/biome/pull/10891) - docs(noDuplicateProperties): note that [@​keyframes](https://redirect.github.com/keyframes) declarations are ignored by [@​dfedoryshchev](https://redirect.github.com/dfedoryshchev) in [#​10893](https://redirect.github.com/biomejs/biome/pull/10893) - fix(lint): prevent noCommentText fix from looping forever by [@​JamBalaya56562](https://redirect.github.com/JamBalaya56562) in [#​10842](https://redirect.github.com/biomejs/biome/pull/10842) - fix(core): cleanup old sockets in Unix by [@​ematipico](https://redirect.github.com/ematipico) in [#​10895](https://redirect.github.com/biomejs/biome/pull/10895) - feat(inference): inference engine via salsa by [@​ematipico](https://redirect.github.com/ematipico) in [#​10888](https://redirect.github.com/biomejs/biome/pull/10888) - chore(deps): update dependency [@​types/node](https://redirect.github.com/types/node) to v24.13.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10920](https://redirect.github.com/biomejs/biome/pull/10920) - chore(deps): update github-actions by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10921](https://redirect.github.com/biomejs/biome/pull/10921) - chore(deps): update pnpm to v11.11.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10925](https://redirect.github.com/biomejs/biome/pull/10925) - chore(deps): update rust crate jiff to 0.2.32 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10923](https://redirect.github.com/biomejs/biome/pull/10923) - chore(deps): update rust crate regex to 1.13.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​10926](https://redirect.github.com/biomejs/biome/pull/10926) - fix(fmt): don't move comments inside if statement by [@​ematipico](https://redirect.github.com/ematipico) in [#​10894](https://redirect.github.com/biomejs/biome/pull/10894) - fix(html\_analyze): noLabelWithoutControl interpolation by [@​Netail](https://redirect.github.com/Netail) in [#​10939](https://redirect.github.com/biomejs/biome/pull/10939) - refactor(parse/html): keywords for all html/svg tags by [@​dyc3](https://redirect.github.com/dyc3) in [#​10665](https://redirect.github.com/biomejs/biome/pull/10665) - perf(lint/html): avoid string comparisons for tag names by [@​dyc3](https://redirect.github.com/dyc3) in [#​10692](https://redirect.github.com/biomejs/biome/pull/10692) - fix: accidental debug log by [@​Netail](https://redirect.github.com/Netail) in [#​10945](https://redirect.github.com/biomejs/biome/pull/10945) - ci: release by [@​github-actions](https://redirect.github.com/github-actions)\[bot] in [#​10887](https://redirect.github.com/biomejs/biome/pull/10887) **Full Changelog**:
renovatebot/renovate (npm:renovate) ### [`v43.279.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.279.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.279.0...43.279.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.77.2 (main) ([#​44816](https://redirect.github.com/renovatebot/renovate/issues/44816)) ([ee7285a](https://redirect.github.com/renovatebot/renovate/commit/ee7285afa72f3526efabb93083056e787b47c421)) ##### Miscellaneous Chores - **deps:** update dependency astral-sh/uv to v0.11.32 (main) ([#​44813](https://redirect.github.com/renovatebot/renovate/issues/44813)) ([d9f4492](https://redirect.github.com/renovatebot/renovate/commit/d9f44927b3b114098839d2861c3c0637afa533e6)) - **deps:** update dependency markdownlint-cli2 to v0.23.1 (main) ([#​44814](https://redirect.github.com/renovatebot/renovate/issues/44814)) ([3ecb103](https://redirect.github.com/renovatebot/renovate/commit/3ecb1037792fd0dfd429a2e1c569cd29369e7b30)) - **deps:** update dependency uv to v0.11.32 (main) ([#​44815](https://redirect.github.com/renovatebot/renovate/issues/44815)) ([6026442](https://redirect.github.com/renovatebot/renovate/commit/6026442bbb8ac7d6a25dce2a1ccb9b7ed2a4fbe7)) - **deps:** update ossf/scorecard-action action to v2.4.4 (main) ([#​44811](https://redirect.github.com/renovatebot/renovate/issues/44811)) ([9a48b68](https://redirect.github.com/renovatebot/renovate/commit/9a48b6871aab41afc40cb3f1074edff92f0b4475)) - **deps:** update zizmor (main) ([#​44812](https://redirect.github.com/renovatebot/renovate/issues/44812)) ([bc8843e](https://redirect.github.com/renovatebot/renovate/commit/bc8843ef2e7361879f4a87314d9978de056d0a60)) ### [`v43.279.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.279.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.5...43.279.0) ##### Features - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.77.0 (main) ([#​44802](https://redirect.github.com/renovatebot/renovate/issues/44802)) ([609a1be](https://redirect.github.com/renovatebot/renovate/commit/609a1bee80ca69a1423a37f6072ea17fb63de649)) ##### Documentation - **mend-hosted:** correctly note "Community (OSS)" vCPUs ([#​44798](https://redirect.github.com/renovatebot/renovate/issues/44798)) ([996dfbb](https://redirect.github.com/renovatebot/renovate/commit/996dfbb49a0b182257f56a9fd6935f53abce8cee)) ##### Miscellaneous Chores - **deps:** update dependency tsdown to v0.22.9 (main) ([#​44801](https://redirect.github.com/renovatebot/renovate/issues/44801)) ([5b5dea6](https://redirect.github.com/renovatebot/renovate/commit/5b5dea6c758060ba8075ee7ad0206b0bf3f750b6)) - **gitlab:** tidy up around gitlab codeowner role support ([#​44796](https://redirect.github.com/renovatebot/renovate/issues/44796)) ([e59b10a](https://redirect.github.com/renovatebot/renovate/commit/e59b10a17cb58609e7a7c411134346700d84fb8c)) ##### Code Refactoring - **linters:** add linters for Json.pipe and schema location ([#​44684](https://redirect.github.com/renovatebot/renovate/issues/44684)) ([ac0407b](https://redirect.github.com/renovatebot/renovate/commit/ac0407bdee07dec8010e91922caea5374b325240)) ##### Tests - exclude .claude/worktrees from vitest and prettier ([#​44799](https://redirect.github.com/renovatebot/renovate/issues/44799)) ([943f917](https://redirect.github.com/renovatebot/renovate/commit/943f917cb094b80947fc390d44cdc8fd095f4625)) ### [`v43.278.5`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.5) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.4...43.278.5) ##### Bug Fixes - **changelog:** re-add old facebook/react URL ([#​44792](https://redirect.github.com/renovatebot/renovate/issues/44792)) ([9c98086](https://redirect.github.com/renovatebot/renovate/commit/9c98086bcac797f410c13b66813556c0fbfe69db)) ##### Miscellaneous Chores - **deps:** update dependency vite to v8.1.5 (main) ([#​44791](https://redirect.github.com/renovatebot/renovate/issues/44791)) ([d4d3c55](https://redirect.github.com/renovatebot/renovate/commit/d4d3c5501cddf45e42e2b2bad7a1108a6ba1d88d)) ### [`v43.278.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.3...43.278.4) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.12 (main) ([#​44790](https://redirect.github.com/renovatebot/renovate/issues/44790)) ([5a400e2](https://redirect.github.com/renovatebot/renovate/commit/5a400e29658b77c550e13ef9dbf2d87de5f2ff7a)) ##### Miscellaneous Chores - **deps:** update dependency pnpm to v11.13.1 (main) ([#​44789](https://redirect.github.com/renovatebot/renovate/issues/44789)) ([e70b316](https://redirect.github.com/renovatebot/renovate/commit/e70b316553f939c36f934c592c521dd629e5fcd0)) ##### Tests - **util/exec:** remove deprecated reference to `trust level` ([#​44244](https://redirect.github.com/renovatebot/renovate/issues/44244)) ([a72dc7e](https://redirect.github.com/renovatebot/renovate/commit/a72dc7e8237850244bc821b512330232f0224e84)) ### [`v43.278.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.2...43.278.3) ##### Miscellaneous Chores - **deps:** update dependency vitest-mock-extended to v5 (main) ([#​44786](https://redirect.github.com/renovatebot/renovate/issues/44786)) ([d6f2426](https://redirect.github.com/renovatebot/renovate/commit/d6f2426599316bfb200017a6b82be63f50335123)) ##### Build System - **deps:** update dependency typescript to v7 (main) ([#​44785](https://redirect.github.com/renovatebot/renovate/issues/44785)) ([b01c6db](https://redirect.github.com/renovatebot/renovate/commit/b01c6db069c69b63f4df60f2330f154f5fd1db50)) ### [`v43.278.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.1...43.278.2) ##### Bug Fixes - **preset/monorepo:** re-add old facebook/react URL ([#​44782](https://redirect.github.com/renovatebot/renovate/issues/44782)) ([da47cb0](https://redirect.github.com/renovatebot/renovate/commit/da47cb0688fde339b27032e3c12f8ce80f557af5)) ### [`v43.278.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.278.0...43.278.1) ##### Build System - **deps:** update dependency [@​opentelemetry/otlp-transformer](https://redirect.github.com/opentelemetry/otlp-transformer) to v0.220.0 (main) ([#​44783](https://redirect.github.com/renovatebot/renovate/issues/44783)) ([89b60af](https://redirect.github.com/renovatebot/renovate/commit/89b60afc77938539f3b6a5ac3aaa367a7366257a)) ### [`v43.278.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.278.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.277.1...43.278.0) ##### Features - **instrumentation:** allow exporting OTLP JSON file ([#​42284](https://redirect.github.com/renovatebot/renovate/issues/42284)) ([adbc20e](https://redirect.github.com/renovatebot/renovate/commit/adbc20e88eefb1f392592bb6ce6c90025bb9716f)) ### [`v43.277.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.277.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.277.0...43.277.1) ##### Bug Fixes - **presets/monorepo:** update react and react-native source URLs to react/react org ([#​44780](https://redirect.github.com/renovatebot/renovate/issues/44780)) ([61e4c9c](https://redirect.github.com/renovatebot/renovate/commit/61e4c9c2d1901f813c0462ab28368a982556e5d2)) ##### Documentation - **manager:** make sure that Supported Datasources are de-duped and sorted ([#​44765](https://redirect.github.com/renovatebot/renovate/issues/44765)) ([3888247](https://redirect.github.com/renovatebot/renovate/commit/38882472093c53d0a3a8cf1e7045055109f60e06)), closes [#​44764](https://redirect.github.com/renovatebot/renovate/issues/44764) ### [`v43.277.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.277.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.276.0...43.277.0) ##### Features - **gitlab:** add gitlab codeowners role support ([#​44621](https://redirect.github.com/renovatebot/renovate/issues/44621)) ([2f9735f](https://redirect.github.com/renovatebot/renovate/commit/2f9735f249ca9f518c851ac5f07f295aa85c1e20)) ##### Bug Fixes - **schedule:** match cron schedules on the edge of an hour ([#​44757](https://redirect.github.com/renovatebot/renovate/issues/44757)) ([54acab0](https://redirect.github.com/renovatebot/renovate/commit/54acab06ee989baba813bd418cd3b360803bed9f)) ### [`v43.276.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.276.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.275.2...43.276.0) ##### Features - **github-actions:** support `sigstore/cosign-installer` version input ([#​44766](https://redirect.github.com/renovatebot/renovate/issues/44766)) ([f01f1b5](https://redirect.github.com/renovatebot/renovate/commit/f01f1b59941017cec06730ff9c4fb8489c02d903)) - **managers:** add support for the Smithy framework ([#​44737](https://redirect.github.com/renovatebot/renovate/issues/44737)) ([8708834](https://redirect.github.com/renovatebot/renovate/commit/87088344a2e86058e8980d669f43bfaf9b8e0aac)) ##### Bug Fixes - **manager/npm:** don't include versions in extracted Yarn `resolutions`' `depName`# ([#​44776](https://redirect.github.com/renovatebot/renovate/issues/44776)) ([476d10a](https://redirect.github.com/renovatebot/renovate/commit/476d10a8076e20ac85c6254cc281aebfaca1b342)), closes [#​44768](https://redirect.github.com/renovatebot/renovate/issues/44768) ##### Miscellaneous Chores - **deps:** update dependency tsdown to v0.22.8 (main) ([#​44778](https://redirect.github.com/renovatebot/renovate/issues/44778)) ([d2ef8e8](https://redirect.github.com/renovatebot/renovate/commit/d2ef8e8f380bee6d4fe542f04c0630948d9805e1)) - **deps:** update dependency uv to v0.11.31 (main) ([#​44770](https://redirect.github.com/renovatebot/renovate/issues/44770)) ([2bebe63](https://redirect.github.com/renovatebot/renovate/commit/2bebe63852f02fa201abc5b01a5d96d6f666ed07)) ### [`v43.275.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.275.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.275.1...43.275.2) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.11 (main) ([#​44775](https://redirect.github.com/renovatebot/renovate/issues/44775)) ([381a5b4](https://redirect.github.com/renovatebot/renovate/commit/381a5b420d2a89bbb96aa39d42d1d103b1a5782a)) ##### Miscellaneous Chores - **deps:** update dependency [@​biomejs/biome](https://redirect.github.com/biomejs/biome) to v2.5.4 (main) ([#​44773](https://redirect.github.com/renovatebot/renovate/issues/44773)) ([df82d39](https://redirect.github.com/renovatebot/renovate/commit/df82d390c7d50ada96fafe7460d5e59eaceefd60)) - **deps:** update github/codeql-action action to v4.37.3 (main) ([#​44774](https://redirect.github.com/renovatebot/renovate/issues/44774)) ([a04cf91](https://redirect.github.com/renovatebot/renovate/commit/a04cf91bf2ea58aa58c132f1f711f6d014f6dcda)) ### [`v43.275.1`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.275.1) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.275.0...43.275.1) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.10 (main) ([#​44771](https://redirect.github.com/renovatebot/renovate/issues/44771)) ([5586073](https://redirect.github.com/renovatebot/renovate/commit/55860735c5ccdbe3bbf87c03747bc92a37b65ccf)) ##### Miscellaneous Chores - **deps:** update dependency [@​smithy/util-stream](https://redirect.github.com/smithy/util-stream) to v4.7.9 (main) ([#​44767](https://redirect.github.com/renovatebot/renovate/issues/44767)) ([6894228](https://redirect.github.com/renovatebot/renovate/commit/68942287120befbcfee373326ee7899e8790d773)) - **deps:** update dependency astral-sh/uv to v0.11.31 (main) ([#​44769](https://redirect.github.com/renovatebot/renovate/issues/44769)) ([f31eedd](https://redirect.github.com/renovatebot/renovate/commit/f31eeddafea6ec3a8bc3995b908e2489494f0d19)) ### [`v43.275.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.275.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.274.0...43.275.0) ##### Features - **onboarding:** use summary view if hitting platform limits ([#​44256](https://redirect.github.com/renovatebot/renovate/issues/44256)) ([969d1a1](https://redirect.github.com/renovatebot/renovate/commit/969d1a1c49ff273218fe10a094bbd9bbf9a3ae6b)), closes [#​41502](https://redirect.github.com/renovatebot/renovate/issues/41502) ### [`v43.274.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.274.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.273.0...43.274.0) ##### Features - **datasource/docker:** Read Official Image annotations ([#​44755](https://redirect.github.com/renovatebot/renovate/issues/44755)) ([572554f](https://redirect.github.com/renovatebot/renovate/commit/572554f4243ada6242c7c5124d3df0fefcff854e)) ##### Miscellaneous Chores - **deps:** update github/codeql-action action to v4.37.2 (main) ([#​44760](https://redirect.github.com/renovatebot/renovate/issues/44760)) ([2f7284f](https://redirect.github.com/renovatebot/renovate/commit/2f7284fd153b2fa0b154039feb77e6642c6fb937)) ##### Code Refactoring - **onboarding:** add functions to summarise "What to expect" ([#​43764](https://redirect.github.com/renovatebot/renovate/issues/43764)) ([4fbfc60](https://redirect.github.com/renovatebot/renovate/commit/4fbfc6095a6eeffc947210d4b8aa4f6d3c09c5e4)), closes [#​41502](https://redirect.github.com/renovatebot/renovate/issues/41502) ### [`v43.273.0`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.273.0) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.9...43.273.0) ##### Features - **platform:** get all branch update dates in a more performant manner ([#​44582](https://redirect.github.com/renovatebot/renovate/issues/44582)) ([f932d52](https://redirect.github.com/renovatebot/renovate/commit/f932d52fbd5b85526999a1a21ebbc69b029658a9)) ##### Code Refactoring - **config/global:** improve type restrictions for `GlobalConfig.OPTIONS` ([#​44636](https://redirect.github.com/renovatebot/renovate/issues/44636)) ([d16dc9a](https://redirect.github.com/renovatebot/renovate/commit/d16dc9a73970afd7f0f94984d9da403307b2956b)) ### [`v43.272.9`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.9) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.8...43.272.9) ##### Bug Fixes - **manager/dockerfile:** handle single-quoted empty ARG default value ([#​44522](https://redirect.github.com/renovatebot/renovate/issues/44522)) ([1f5f6da](https://redirect.github.com/renovatebot/renovate/commit/1f5f6dab2a74c982a3f5fb740d89523599184243)) ### [`v43.272.8`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.8) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.7...43.272.8) ##### Bug Fixes - **git-submodule:** handle ./ relative paths in URL resolution ([#​44742](https://redirect.github.com/renovatebot/renovate/issues/44742)) ([bad5e22](https://redirect.github.com/renovatebot/renovate/commit/bad5e2284e8cc8d52635173b83573eac0c37b7f8)) ### [`v43.272.7`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.7) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.6...43.272.7) ##### Bug Fixes - **gomod:** pseudo-version digest updates produce no change when module is absent from go proxy ([#​44477](https://redirect.github.com/renovatebot/renovate/issues/44477)) ([e5ace74](https://redirect.github.com/renovatebot/renovate/commit/e5ace746bbba09c2f93d2930ad4d935a55b7922b)) ### [`v43.272.6`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.6) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.5...43.272.6) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.8 (main) ([#​44747](https://redirect.github.com/renovatebot/renovate/issues/44747)) ([a00c621](https://redirect.github.com/renovatebot/renovate/commit/a00c621f8dc4212ac52687c93ae3d60e3324fc11)) - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.9 (main) ([#​44748](https://redirect.github.com/renovatebot/renovate/issues/44748)) ([d2aa7e3](https://redirect.github.com/renovatebot/renovate/commit/d2aa7e3e9465872580066db6f1fb6d842077e19a)) ##### Miscellaneous Chores - **deps:** update dependency astral-sh/uv to v0.11.30 (main) ([#​44745](https://redirect.github.com/renovatebot/renovate/issues/44745)) ([451ed1c](https://redirect.github.com/renovatebot/renovate/commit/451ed1ced5530d39a6f7b864730a0080276b2ead)) - **deps:** update dependency uv to v0.11.30 (main) ([#​44746](https://redirect.github.com/renovatebot/renovate/issues/44746)) ([984cb43](https://redirect.github.com/renovatebot/renovate/commit/984cb434c2733ff08a1cfad8407c9db07891f75e)) ##### Tests - replace deprecated Biome `recommended` with `preset` ([#​44735](https://redirect.github.com/renovatebot/renovate/issues/44735)) ([73d21dd](https://redirect.github.com/renovatebot/renovate/commit/73d21dd84924700be5aeea97addd53d5e3674d31)) ### [`v43.272.5`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.5) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.4...43.272.5) ##### Bug Fixes - **deps:** update ghcr.io/renovatebot/base-image docker tag to v13.76.7 (main) ([#​44743](https://redirect.github.com/renovatebot/renovate/issues/44743)) ([1e7391f](https://redirect.github.com/renovatebot/renovate/commit/1e7391f4a60bc47c93bd25ffc33498419645e0cd)) ##### Miscellaneous Chores - **deps:** update actions/checkout action to v6.1.0 (main) ([#​44741](https://redirect.github.com/renovatebot/renovate/issues/44741)) ([e3541c1](https://redirect.github.com/renovatebot/renovate/commit/e3541c14668c93bffccdd675af50f459a12d6dda)) - **deps:** update dependency astral-sh/uv to v0.11.29 (main) ([#​44619](https://redirect.github.com/renovatebot/renovate/issues/44619)) ([75d2ca1](https://redirect.github.com/renovatebot/renovate/commit/75d2ca1f78b88e66aac15c8eff33e9a266b14b81)) - **deps:** update dependency protobufjs\@​8.0.1 to v8.7.1 (main) ([#​44733](https://redirect.github.com/renovatebot/renovate/issues/44733)) ([f3e5741](https://redirect.github.com/renovatebot/renovate/commit/f3e57410f25892b7d92303c436c67e4d97730e74)) - **deps:** update github/codeql-action action to v4.37.1 (main) ([#​44647](https://redirect.github.com/renovatebot/renovate/issues/44647)) ([5a06fc9](https://redirect.github.com/renovatebot/renovate/commit/5a06fc94ea3d512f6d6c43bbb1d9bdaa940023fd)) ##### Code Refactoring - **linters:** enable `node/no-sync` and migrate to async calls ([#​44693](https://redirect.github.com/renovatebot/renovate/issues/44693)) ([2dbfd85](https://redirect.github.com/renovatebot/renovate/commit/2dbfd85506fddd219d5a2d70cc8629a0c103d41c)) ##### Tests - **linters:** add linting rule to enforce v8 ignore reason declaration ([#​44726](https://redirect.github.com/renovatebot/renovate/issues/44726)) ([91e068f](https://redirect.github.com/renovatebot/renovate/commit/91e068f1fd3c6d168a67f7ec26f14404bfed3c1b)) ##### Continuous Integration - periodically check for "too many releases" ([#​44734](https://redirect.github.com/renovatebot/renovate/issues/44734)) ([c7be6f1](https://redirect.github.com/renovatebot/renovate/commit/c7be6f147dfcdf3ccdc976088833fcd2093df871)), closes [#​42965](https://redirect.github.com/renovatebot/renovate/issues/42965) ### [`v43.272.4`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.4) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.3...43.272.4) ##### Documentation - fix outdated statement that Docker major updates are disabled by default ([#​44524](https://redirect.github.com/renovatebot/renovate/issues/44524)) ([b0bc33c](https://redirect.github.com/renovatebot/renovate/commit/b0bc33c8b7029ece15adc67050120cb46544e196)) - wrap preset names in code blocks ([#​44234](https://redirect.github.com/renovatebot/renovate/issues/44234)) ([6959107](https://redirect.github.com/renovatebot/renovate/commit/6959107bfbde5f365d486b447c8c3ac86190bd91)) ##### Tests - add linter for `as LongCommitSha` in test files ([#​44681](https://redirect.github.com/renovatebot/renovate/issues/44681)) ([1e03699](https://redirect.github.com/renovatebot/renovate/commit/1e03699cd67efc15c9bf26e39ecc9e6854d60323)) ##### Build System - **deps:** update dependency protobufjs to v8.7.1 (main) ([#​44732](https://redirect.github.com/renovatebot/renovate/issues/44732)) ([52907ef](https://redirect.github.com/renovatebot/renovate/commit/52907ef1665182a350a943f0a30674de5520183d)) ### [`v43.272.3`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.3) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.2...43.272.3) ##### Bug Fixes - **docker:** include `global` and `inherited` JSON schemas ([#​44674](https://redirect.github.com/renovatebot/renovate/issues/44674)) ([29ca969](https://redirect.github.com/renovatebot/renovate/commit/29ca969fe14ebb75fbbc3f10fd7f1ba8da756d31)) ### [`v43.272.2`](https://redirect.github.com/renovatebot/renovate/releases/tag/43.272.2) [Compare Source](https://redirect.github.com/renovatebot/renovate/compare/43.272.1...43.272.2) ##### Bug Fixes - **platform/azure:** evaluate policies before attempting to merge PR ([#​44631](https://redirect.github.com/renovatebot/renovate/issues/44631)) ([7ac677d](https://redirect.github.com/renovatebot/renovate/commit/7ac677dc9b0c0aa818c9fd130f80a0c4cbcd591b)) ##### Code Refactoring - **types:** document `localDir` isn't a `globalOnly` option ([#​44635](https://redirect.github.com/renovatebot/renovate/issues/44635)) ([0e6429b](https://redirect.github.com/renovatebot/renovate/commit/0e6429b13e78221486512de7bbcbb7d11f9be5e6)) ### [ > ✂ **Note** > > PR body was truncated to here.
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 4am on Monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Gregor Zeitlinger --- .mise/lib/jmx_exporter_compat.py | 16 +- .mise/lib/micrometer_compat.py | 16 +- .mise/tasks/generate_benchmark_summary.py | 80 ++++----- .mise/tasks/jmx-exporter/prepare.py | 1 - .mise/tasks/jmx-exporter/test.py | 1 - .mise/tasks/lint/bom.py | 14 +- .mise/tasks/micrometer/prepare.py | 1 - .mise/tasks/micrometer/test.py | 1 - .mise/tasks/test_update-benchmarks.py | 2 +- .mise/tasks/update_benchmarks.py | 22 +-- mise.lock | 210 +++++++++++----------- mise.toml | 12 +- 12 files changed, 188 insertions(+), 188 deletions(-) mode change 100644 => 100755 .mise/tasks/generate_benchmark_summary.py diff --git a/.mise/lib/jmx_exporter_compat.py b/.mise/lib/jmx_exporter_compat.py index be29a2715..dd364e064 100755 --- a/.mise/lib/jmx_exporter_compat.py +++ b/.mise/lib/jmx_exporter_compat.py @@ -7,8 +7,6 @@ import subprocess import xml.etree.ElementTree as ET from pathlib import Path -from typing import Optional - DEFAULT_JMX_EXPORTER_DIR = Path( os.environ.get("JMX_EXPORTER_DIR", "/tmp/jmx-exporter-compat") @@ -34,8 +32,8 @@ def run_cmd( cmd: list[str], - cwd: Optional[Path] = None, - env: Optional[dict[str, str]] = None, + cwd: Path | None = None, + env: dict[str, str] | None = None, ) -> None: subprocess.run(cmd, cwd=cwd, check=True, env=env) @@ -59,10 +57,12 @@ def check_clean_worktree(jmx_exporter_dir: Path) -> None: ) -def get_prom_version(root_dir: Path = Path.cwd()) -> str: +def get_prom_version(root_dir: Path | None = None) -> str: configured_version = DEFAULT_PROM_VERSION if configured_version: return configured_version + if root_dir is None: + root_dir = Path.cwd() pom = ET.parse(root_dir / "pom.xml") root = pom.getroot() version = root.findtext("./{*}version") @@ -96,7 +96,9 @@ def prepare_repo( ) -def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: +def install_local_artifacts(root_dir: Path | None = None) -> None: + if root_dir is None: + root_dir = Path.cwd() run_cmd( [ "./mvnw", @@ -141,7 +143,7 @@ def quick_test_images( def run_maven_test( jmx_exporter_dir: Path = DEFAULT_JMX_EXPORTER_DIR, - prom_version: Optional[str] = None, + prom_version: str | None = None, ) -> None: if prom_version is None: prom_version = get_prom_version() diff --git a/.mise/lib/micrometer_compat.py b/.mise/lib/micrometer_compat.py index dc3b9191f..b1c50d49f 100755 --- a/.mise/lib/micrometer_compat.py +++ b/.mise/lib/micrometer_compat.py @@ -6,8 +6,6 @@ import subprocess import xml.etree.ElementTree as ET from pathlib import Path -from typing import Optional - DEFAULT_MICROMETER_DIR = Path( os.environ.get("MICROMETER_DIR", "/tmp/micrometer-compat") @@ -27,7 +25,7 @@ DEFAULT_PROM_VERSION = os.environ.get("PROM_VERSION") -def run_cmd(cmd: list[str], cwd: Optional[Path] = None) -> None: +def run_cmd(cmd: list[str], cwd: Path | None = None) -> None: subprocess.run(cmd, cwd=cwd, check=True) @@ -49,10 +47,12 @@ def check_clean_worktree(micrometer_dir: Path) -> None: ) -def get_prom_version(root_dir: Path = Path.cwd()) -> str: +def get_prom_version(root_dir: Path | None = None) -> str: configured_version = DEFAULT_PROM_VERSION if configured_version: return configured_version + if root_dir is None: + root_dir = Path.cwd() pom = ET.parse(root_dir / "pom.xml") root = pom.getroot() version = root.findtext("./{*}version") @@ -64,7 +64,7 @@ def get_prom_version(root_dir: Path = Path.cwd()) -> str: def write_init_script( - init_script: Path = DEFAULT_INIT_SCRIPT, prom_version: Optional[str] = None + init_script: Path = DEFAULT_INIT_SCRIPT, prom_version: str | None = None ) -> None: if prom_version is None: prom_version = get_prom_version() @@ -120,7 +120,9 @@ def prepare_repo( ) -def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: +def install_local_artifacts(root_dir: Path | None = None) -> None: + if root_dir is None: + root_dir = Path.cwd() run_cmd( [ "./mvnw", @@ -144,7 +146,7 @@ def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: def run_gradle_test( - test_selector: Optional[str] = None, + test_selector: str | None = None, micrometer_dir: Path = DEFAULT_MICROMETER_DIR, init_script: Path = DEFAULT_INIT_SCRIPT, ) -> None: diff --git a/.mise/tasks/generate_benchmark_summary.py b/.mise/tasks/generate_benchmark_summary.py old mode 100644 new mode 100755 index e37f1e09c..3a1929b49 --- a/.mise/tasks/generate_benchmark_summary.py +++ b/.mise/tasks/generate_benchmark_summary.py @@ -18,12 +18,13 @@ import argparse import json +import math import os import shutil +import subprocess import sys from datetime import datetime, timezone from pathlib import Path -from typing import Dict, List, Optional, Tuple def parse_args(): @@ -83,7 +84,7 @@ def parse_args(): return parser.parse_args() -def get_system_info() -> Dict[str, str]: +def get_system_info() -> dict[str, str]: """Capture system hardware information.""" import multiprocessing import platform @@ -92,7 +93,7 @@ def get_system_info() -> Dict[str, str]: try: info["cpu_cores"] = str(multiprocessing.cpu_count()) - except Exception: + except NotImplementedError: pass try: @@ -104,17 +105,16 @@ def get_system_info() -> Dict[str, str]: except FileNotFoundError: # macOS try: - import subprocess - result = subprocess.run( ["sysctl", "-n", "machdep.cpu.brand_string"], capture_output=True, + check=False, text=True, timeout=5, ) if result.returncode == 0: info["cpu_model"] = result.stdout.strip() - except Exception: + except (OSError, subprocess.SubprocessError): pass try: @@ -127,18 +127,17 @@ def get_system_info() -> Dict[str, str]: except FileNotFoundError: # macOS try: - import subprocess - result = subprocess.run( ["sysctl", "-n", "hw.memsize"], capture_output=True, + check=False, text=True, timeout=5, ) if result.returncode == 0: bytes_mem = int(result.stdout.strip()) info["memory_gb"] = str(round(bytes_mem / 1024 / 1024 / 1024)) - except Exception: + except (OSError, ValueError, subprocess.SubprocessError): pass info["os"] = f"{platform.system()} {platform.release()}" @@ -146,7 +145,7 @@ def get_system_info() -> Dict[str, str]: return info -def read_system_info(path: Optional[str]) -> Dict[str, str]: +def read_system_info(path: str | None) -> dict[str, str]: """Read system info from JSON, or capture it from the current host.""" if not path: return get_system_info() @@ -163,7 +162,7 @@ def write_system_info(path: str) -> None: f.write("\n") -def format_system_info(sysinfo: Optional[Dict[str, str]]) -> str: +def format_system_info(sysinfo: dict[str, str] | None) -> str: """Format captured system info for markdown.""" if not sysinfo: return "unknown" @@ -179,23 +178,22 @@ def format_system_info(sysinfo: Optional[Dict[str, str]]) -> str: return ", ".join(parts) if parts else "unknown" -def get_commit_sha(provided_sha: Optional[str]) -> str: +def get_commit_sha(provided_sha: str | None) -> str: """Get commit SHA from argument, git, or return 'local'.""" if provided_sha: return provided_sha try: - import subprocess - result = subprocess.run( ["git", "rev-parse", "HEAD"], capture_output=True, + check=False, text=True, timeout=5, ) if result.returncode == 0: return result.stdout.strip() - except Exception: + except (OSError, subprocess.SubprocessError): pass return "local" @@ -221,7 +219,7 @@ def format_error(error) -> str: """Format error value, handling NaN.""" try: error_val = float(error) - if error_val != error_val: # NaN check + if math.isnan(error_val): return "" elif error_val >= 1_000: return f"± {error_val / 1_000:.2f}K" @@ -244,18 +242,18 @@ def short_benchmark_name(name: str) -> str: return name.replace("io.prometheus.metrics.benchmarks.", "") -def metric_score(result: Dict) -> Optional[float]: +def metric_score(result: dict) -> float | None: """Extract a benchmark score as a finite float.""" try: score = float(result.get("primaryMetric", {}).get("score")) - if score == score: + if not math.isnan(score): return score except (ValueError, TypeError): pass return None -def score_interval(result: Dict) -> Optional[Tuple[float, float]]: +def score_interval(result: dict) -> tuple[float, float] | None: """Extract the JMH confidence interval for a benchmark result.""" metric = result.get("primaryMetric", {}) confidence = metric.get("scoreConfidence") @@ -263,7 +261,7 @@ def score_interval(result: Dict) -> Optional[Tuple[float, float]]: try: low = float(confidence[0]) high = float(confidence[1]) - if low == low and high == high: + if not math.isnan(low) and not math.isnan(high): return min(low, high), max(low, high) except (ValueError, TypeError): pass @@ -273,21 +271,21 @@ def score_interval(result: Dict) -> Optional[Tuple[float, float]]: return None try: error = float(metric.get("scoreError")) - if error == error: + if not math.isnan(error): return score - error, score + error except (ValueError, TypeError): pass return None -def lower_is_better(result: Dict) -> bool: +def lower_is_better(result: dict) -> bool: """Return true for JMH modes where lower score is better.""" mode = str(result.get("mode", "")) unit = str(result.get("primaryMetric", {}).get("scoreUnit", "")) return mode in {"avgt", "sample", "ss"} or unit.endswith("/op") -def comparison_status(head: Dict, baseline: Dict) -> str: +def comparison_status(head: dict, baseline: dict) -> str: """Classify a benchmark comparison using confidence intervals.""" head_interval = score_interval(head) baseline_interval = score_interval(baseline) @@ -317,7 +315,7 @@ def comparison_status(head: Dict, baseline: Dict) -> str: return "faster" if head_score > baseline_score else "slower" -def performance_change(head: Dict, baseline: Dict) -> Optional[float]: +def performance_change(head: dict, baseline: dict) -> float | None: """Return percent performance change, with positive meaning faster.""" head_score = metric_score(head) baseline_score = metric_score(baseline) @@ -328,7 +326,7 @@ def performance_change(head: Dict, baseline: Dict) -> Optional[float]: return (head_score / float(baseline_score) - 1) * 100 -def format_change(change: Optional[float]) -> str: +def format_change(change: float | None) -> str: """Format a percent performance change.""" if change is None: return "" @@ -336,16 +334,16 @@ def format_change(change: Optional[float]) -> str: def generate_comparison_section( - results: List, - baseline_results: List, + results: list, + baseline_results: list, commit_sha: str, baseline_sha: str, repo: str, baseline_repo: str, - comparison_note: Optional[str] = None, - system_info: Optional[Dict[str, str]] = None, - baseline_system_info: Optional[Dict[str, str]] = None, -) -> List[str]: + comparison_note: str | None = None, + system_info: dict[str, str] | None = None, + baseline_system_info: dict[str, str] | None = None, +) -> list[str]: """Generate a base-vs-head benchmark comparison section.""" by_name = {b.get("benchmark", ""): b for b in results if b.get("benchmark")} baseline_by_name = { @@ -408,15 +406,15 @@ def generate_comparison_section( def generate_markdown( - results: List, + results: list, commit_sha: str, repo: str, - baseline_results: Optional[List] = None, - baseline_sha: Optional[str] = None, - baseline_repo: Optional[str] = None, - comparison_note: Optional[str] = None, - system_info: Optional[Dict[str, str]] = None, - baseline_system_info: Optional[Dict[str, str]] = None, + baseline_results: list | None = None, + baseline_sha: str | None = None, + baseline_repo: str | None = None, + comparison_note: str | None = None, + system_info: dict[str, str] | None = None, + baseline_system_info: dict[str, str] | None = None, ) -> str: """Generate markdown summary from JMH results.""" datetime_str = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") @@ -477,12 +475,12 @@ def generate_markdown( ) # Group by benchmark class - benchmarks_by_class: Dict[str, List] = {} + benchmarks_by_class: dict[str, list] = {} for b in results: name = b.get("benchmark", "") parts = name.rsplit(".", 1) if len(parts) == 2: - class_name, method = parts + class_name, _method = parts class_short = class_name.split(".")[-1] else: class_short = "Other" @@ -563,7 +561,7 @@ def generate_markdown( try: error_val = float(error) - if error_val != error_val: # NaN + if math.isnan(error_val): error_str = "" else: error_str = f"± {error_val:.3f}" diff --git a/.mise/tasks/jmx-exporter/prepare.py b/.mise/tasks/jmx-exporter/prepare.py index 348415f7f..845b76661 100755 --- a/.mise/tasks/jmx-exporter/prepare.py +++ b/.mise/tasks/jmx-exporter/prepare.py @@ -5,7 +5,6 @@ import sys - sys.path.insert(0, ".mise/lib") diff --git a/.mise/tasks/jmx-exporter/test.py b/.mise/tasks/jmx-exporter/test.py index 3e3989300..0f7694c19 100755 --- a/.mise/tasks/jmx-exporter/test.py +++ b/.mise/tasks/jmx-exporter/test.py @@ -5,7 +5,6 @@ import sys - sys.path.insert(0, ".mise/lib") diff --git a/.mise/tasks/lint/bom.py b/.mise/tasks/lint/bom.py index d77b88e23..e4c70988c 100755 --- a/.mise/tasks/lint/bom.py +++ b/.mise/tasks/lint/bom.py @@ -7,7 +7,6 @@ import sys from fnmatch import fnmatch from pathlib import Path -from typing import List ROOT = Path(__file__).resolve().parents[3] # repo root (.. from .mise/tasks/lint) IGNORE_DIRS = {"prometheus-metrics-parent"} @@ -31,7 +30,7 @@ def first_artifact_id(pom_file: Path) -> str: return matches[1].strip() -def add_dir(dir_path: Path, want: List[str]): +def add_dir(dir_path: Path, want: list[str]): if not dir_path.is_dir(): raise FileNotFoundError(f"Directory {dir_path} does not exist.") @@ -49,8 +48,8 @@ def add_dir(dir_path: Path, want: List[str]): want.append(artifact_id) -def collect_want(root: Path) -> List[str]: - want: List[str] = [] +def collect_want(root: Path) -> list[str]: + want: list[str] = [] # top-level prometheus-metrics* for entry in sorted(root.iterdir()): if entry.is_dir() and fnmatch(entry.name, f"{MODULE_PREFIX}*"): @@ -68,14 +67,15 @@ def collect_want(root: Path) -> List[str]: return want_unique -def collect_have(bom_pom: Path) -> List[str]: +def collect_have(bom_pom: Path) -> list[str]: if not bom_pom.is_file(): raise FileNotFoundError(f"BOM file {bom_pom} does not exist.") text = bom_pom.read_text(encoding="utf-8") # find artifactId values that start with MODULE_PREFIX matches = re.findall( - r"\s*(%s[^<\s]*)\s*" % re.escape(MODULE_PREFIX), text + rf"\s*({re.escape(MODULE_PREFIX)}[^<\s]*)\s*", + text, ) return sorted(matches) @@ -108,7 +108,7 @@ def main() -> int: else: return 0 - except Exception as e: + except (OSError, RuntimeError) as e: print(e, file=sys.stderr) return 1 diff --git a/.mise/tasks/micrometer/prepare.py b/.mise/tasks/micrometer/prepare.py index ba13acf69..c4fbf2208 100755 --- a/.mise/tasks/micrometer/prepare.py +++ b/.mise/tasks/micrometer/prepare.py @@ -5,7 +5,6 @@ import sys - sys.path.insert(0, ".mise/lib") diff --git a/.mise/tasks/micrometer/test.py b/.mise/tasks/micrometer/test.py index 40316f569..68fb3f661 100755 --- a/.mise/tasks/micrometer/test.py +++ b/.mise/tasks/micrometer/test.py @@ -5,7 +5,6 @@ import sys - sys.path.insert(0, ".mise/lib") diff --git a/.mise/tasks/test_update-benchmarks.py b/.mise/tasks/test_update-benchmarks.py index 3d80b4983..a42091ef1 100644 --- a/.mise/tasks/test_update-benchmarks.py +++ b/.mise/tasks/test_update-benchmarks.py @@ -66,7 +66,7 @@ def test_update_only_inserts_matching_class_lines(self): updated = update_pre_blocks_under_module(self.module_path, self.table) # All three files should be updated self.assertEqual( - set(os.path.basename(p) for p in updated), + {os.path.basename(p) for p in updated}, { os.path.basename(self.files["CounterBenchmark"]), os.path.basename(self.files["HistogramBenchmark"]), diff --git a/.mise/tasks/update_benchmarks.py b/.mise/tasks/update_benchmarks.py index b6eeba53c..6f7f788dd 100755 --- a/.mise/tasks/update_benchmarks.py +++ b/.mise/tasks/update_benchmarks.py @@ -29,10 +29,9 @@ import shlex import subprocess import sys -from typing import List, Optional -def run_cmd(cmd: List[str], cwd: Optional[str] = None) -> str: +def run_cmd(cmd: list[str], cwd: str | None = None) -> str: """Run a command, stream stdout/stderr to the console for progress, and return the full output. This replaces the previous blocking subprocess.run approach so users can see build / JMH @@ -47,7 +46,7 @@ def run_cmd(cmd: List[str], cwd: Optional[str] = None) -> str: print(f"Command not found: {cmd[0]}") raise - output_lines: List[str] = [] + output_lines: list[str] = [] try: assert proc.stdout is not None # Stream lines as they appear and capture them for returning @@ -94,7 +93,7 @@ def find_benchmarks_jar(module: str) -> str: return jar -def run_jmh(jar: str, java_cmd: str, extra_args: Optional[str]) -> str: +def run_jmh(jar: str, java_cmd: str, extra_args: str | None) -> str: args = [java_cmd, "-jar", jar, "-rf", "text"] if extra_args: args += shlex.split(extra_args) @@ -128,7 +127,7 @@ def extract_first_table(jmh_output: str) -> str: return table -def filter_table_for_class(table: str, class_name: str) -> Optional[str]: +def filter_table_for_class(table: str, class_name: str) -> str | None: """ Return a table string that contains only the header and the lines belonging to `class_name`. If no matching lines are found, return None. @@ -157,16 +156,19 @@ def filter_table_for_class(table: str, class_name: str) -> Optional[str]: return header + "\n" + "\n".join(matched) -def update_pre_blocks_under_module(module: str, table: str) -> List[str]: +def update_pre_blocks_under_module(module: str, table: str) -> list[str]: # Find files under module and update any
...
block that contains 'thrpt' updated_files = [] for path in glob.glob(os.path.join(module, "**"), recursive=True): if os.path.isdir(path): continue + content = None try: with open(path, "r", encoding="utf-8") as f: content = f.read() - except Exception: + except (OSError, UnicodeError): + pass + if content is None: continue # quick filter if "
" not in content or "thrpt" not in content:
@@ -188,10 +190,10 @@ def update_pre_blocks_under_module(module: str, table: str) -> List[str]:
         # This will match patterns like: " * 
... 
" and capture the prefix (e.g. " * ") pattern = re.compile(r"(?m)^(?P[ \t]*\*[ \t]*)
[\s\S]*?
") - def repl(m: re.Match) -> str: + def repl(m: re.Match, replacement_table: str = filtered_table) -> str: prefix = m.group("prefix") # Build the new block with the same prefix on each line - lines = filtered_table.splitlines() + lines = replacement_table.splitlines() replaced = prefix + "
\n"
             for ln in lines:
                 replaced += prefix + ln.rstrip() + "\n"
@@ -207,7 +209,7 @@ def repl(m: re.Match) -> str:
     return updated_files
 
 
-def main(argv: List[str]):
+def main(argv: list[str]):
     parser = argparse.ArgumentParser()
     parser.add_argument("--mvnw", default="./mvnw", help="Path to maven wrapper")
     parser.add_argument(
diff --git a/mise.lock b/mise.lock
index 179dfef1d..8809f7764 100644
--- a/mise.lock
+++ b/mise.lock
@@ -172,43 +172,43 @@ url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171324"
 provenance = "github-attestations"
 
 [[tools."aqua:jonwiggins/xmloxide"]]
-version = "v0.4.3"
+version = "v0.4.4"
 backend = "aqua:jonwiggins/xmloxide"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.linux-arm64"]
-checksum = "sha256:abb840c558fdc94b4c1eddb1e4a3901d6c8129dcb76f387428dc2b30a7364967"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_linux-aarch64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587060"
+checksum = "sha256:ec79d70f3e0483a54f1873b5ba36c3908c10eb77dd6c764363d232ed30c07809"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_linux-aarch64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020867"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.linux-arm64-musl"]
-checksum = "sha256:abb840c558fdc94b4c1eddb1e4a3901d6c8129dcb76f387428dc2b30a7364967"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_linux-aarch64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587060"
+checksum = "sha256:ec79d70f3e0483a54f1873b5ba36c3908c10eb77dd6c764363d232ed30c07809"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_linux-aarch64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020867"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.linux-x64"]
-checksum = "sha256:46ccd30ff3a242b3d01ab72366cc3b6762882be604ebceaa32123a40d0af2dfc"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_linux-x86-64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587058"
+checksum = "sha256:43220f57c69d0b8b10b883f11c2da17f66e854639aab84d331631d02ac220ff2"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_linux-x86-64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020866"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.linux-x64-musl"]
-checksum = "sha256:46ccd30ff3a242b3d01ab72366cc3b6762882be604ebceaa32123a40d0af2dfc"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_linux-x86-64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587058"
+checksum = "sha256:43220f57c69d0b8b10b883f11c2da17f66e854639aab84d331631d02ac220ff2"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_linux-x86-64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020866"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.macos-arm64"]
-checksum = "sha256:6a2cb055e63ae97d75cd346c34138a9e31626e1dfc0983006c422c203b5cc288"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_darwin-aarch64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587063"
+checksum = "sha256:bc93bca8c3d64d1aac2d0844966750b8d4529902624a46e42ea9b5ee9a99b0df"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_darwin-aarch64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020870"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.macos-x64"]
-checksum = "sha256:e83cbba88862d009405b5ce9e48025ff84b683a39a0832dde2db5395cb54734f"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_darwin-x86-64"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587061"
+checksum = "sha256:0f1d5955e8af0197e17f0da199321ef5f54adeb9c0f6a5acc35e122559239cb3"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_darwin-x86-64"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020868"
 
 [tools."aqua:jonwiggins/xmloxide"."platforms.windows-x64"]
-checksum = "sha256:22872cad20b8ce8ccab28c42ce17acc9aa64b82cbad7d130ee74196cd74cd414"
-url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.3/xmllint_windows-x86-64.exe"
-url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/411587062"
+checksum = "sha256:be3928e8d12e791996e1746a78ad61370d2ad83ea3036a30bb882205575f6823"
+url = "https://github.com/jonwiggins/xmloxide/releases/download/v0.4.4/xmllint_windows-x86-64.exe"
+url_api = "https://api.github.com/repos/jonwiggins/xmloxide/releases/assets/484020865"
 
 [[tools."aqua:owenlamont/ryl"]]
 version = "0.21.0"
@@ -251,49 +251,49 @@ url_api = "https://api.github.com/repos/owenlamont/ryl/releases/assets/454375990
 provenance = "github-attestations"
 
 [[tools.biome]]
-version = "2.5.3"
+version = "2.5.5"
 backend = "aqua:biomejs/biome"
 
 [tools.biome."platforms.linux-arm64"]
-checksum = "sha256:b642ded43aebcad738926b40eefd4dc2187a206d1fbfb37a45f1db4986804dbd"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-linux-arm64"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058837"
+checksum = "sha256:836d16eea672a4e92966e019582f606ef4a687496abbf6d547f31a5ef8a33548"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-linux-arm64"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416084"
 provenance = "github-attestations"
 
 [tools.biome."platforms.linux-arm64-musl"]
-checksum = "sha256:1a69ea4eb55baaec0bedd7d6ada3b1e626e2b430ecfc9a8f1b90373ca78aeb70"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-linux-arm64-musl"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058836"
+checksum = "sha256:0f487c28eca2c87e0eb79b73ad84c9fc0bbab6a6cf3513f5fedbc74ef2ca2d0b"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-linux-arm64-musl"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416087"
 provenance = "github-attestations"
 
 [tools.biome."platforms.linux-x64"]
-checksum = "sha256:ab8e74af2366127306e250652d2f32bd193601f208fcd0604112080c0ca3245b"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-linux-x64"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058832"
+checksum = "sha256:12ecb833102c8bf8ab6ede7ecd5b6e6fc76e8af95b3ef356933a1f5330afc028"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-linux-x64"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416085"
 provenance = "github-attestations"
 
 [tools.biome."platforms.linux-x64-musl"]
-checksum = "sha256:03cf125720b1d791093c9c68be34875d08638c314b3e1e63db1a45f2b418b1ca"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-linux-x64-musl"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058833"
+checksum = "sha256:549fea27c74212aaeb2c737346028facbcca7a93f66cf4aa145388dd8b18d7bc"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-linux-x64-musl"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416086"
 provenance = "github-attestations"
 
 [tools.biome."platforms.macos-arm64"]
-checksum = "sha256:610d3e1e770d373368d4ccee5a19c5e1735b0235024fcbed6ae07eb080d3bb09"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-darwin-arm64"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058834"
+checksum = "sha256:6072d68d3a4faf74c2802c106654904f2052f85675a3d1632213dd977a4b64bb"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-darwin-arm64"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416090"
 provenance = "github-attestations"
 
 [tools.biome."platforms.macos-x64"]
-checksum = "sha256:4df90556830ed35e6238e4b976b942d369a5378447c8d68b260b7a38e08b26f9"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-darwin-x64"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058835"
+checksum = "sha256:81f7f09a1ffacd225a65a29e2506ad02013b95964e684554cc5cc7ae9db005b4"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-darwin-x64"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416089"
 provenance = "github-attestations"
 
 [tools.biome."platforms.windows-x64"]
-checksum = "sha256:04c9ca46af43a0d060b22b21f94c7e1a9e8c57963a09778b8ff1d808ed536b31"
-url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.3/biome-win32-x64.exe"
-url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/470058831"
+checksum = "sha256:f24c77f79d02dff42bfa4ee62e31b0522754d87eaaa3202435c7126cdb30ebd2"
+url = "https://github.com/biomejs/biome/releases/download/%40biomejs/biome%402.5.5/biome-win32-x64.exe"
+url_api = "https://api.github.com/repos/biomejs/biome/releases/assets/484416083"
 provenance = "github-attestations"
 
 [[tools.editorconfig-checker]]
@@ -512,7 +512,7 @@ checksum = "sha256:0ae68406b42d7725661da979b1403ec9926da205c6770827f33aac9d8f26e
 url = "https://nodejs.org/dist/v24.18.0/node-v24.18.0-win-x64.zip"
 
 [[tools."npm:renovate"]]
-version = "43.257.4"
+version = "43.279.1"
 backend = "npm:renovate"
 
 [[tools.protoc]]
@@ -555,95 +555,95 @@ url = "https://github.com/protocolbuffers/protobuf/releases/download/v35.1/proto
 url_api = "https://api.github.com/repos/protocolbuffers/protobuf/releases/assets/445060259"
 
 [[tools.ruff]]
-version = "0.15.21"
+version = "0.16.0"
 backend = "aqua:astral-sh/ruff"
 
 [tools.ruff."platforms.linux-arm64"]
-checksum = "sha256:2ec7c0077431f96f74c3c72aea6505e902bc2ff47127653c8de1389ee30a3cb3"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700003"
+checksum = "sha256:7a6add3d38768dfa00c6d3853e9bd940b5526f3fbb76f02b1fe77ec0653f1e0e"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540070"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.linux-arm64-musl"]
-checksum = "sha256:2ec7c0077431f96f74c3c72aea6505e902bc2ff47127653c8de1389ee30a3cb3"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700003"
+checksum = "sha256:7a6add3d38768dfa00c6d3853e9bd940b5526f3fbb76f02b1fe77ec0653f1e0e"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540070"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.linux-x64"]
-checksum = "sha256:7e157ff9a2e13676118c587e6db0ec02d040e415b21014346d230e64789c0e78"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700081"
+checksum = "sha256:2138b7bc58ff877f5bba09aea4cc984ad5699433b6a3f811003527b8cff8e9ad"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540129"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.linux-x64-musl"]
-checksum = "sha256:7e157ff9a2e13676118c587e6db0ec02d040e415b21014346d230e64789c0e78"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700081"
+checksum = "sha256:2138b7bc58ff877f5bba09aea4cc984ad5699433b6a3f811003527b8cff8e9ad"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540129"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.macos-arm64"]
-checksum = "sha256:0452f9d5da6e8051d332cf21ae82a608d8e2cfeec5a71a46ffa9e50adbb2381d"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-aarch64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471699864"
+checksum = "sha256:ce6564491a2cc4b0659f45ee174dbef17e4dec24e03a9c03d313b5430bc21099"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-aarch64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540064"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.macos-x64"]
-checksum = "sha256:7e6ff3bd585b5b7c47634c957ac84fb5806d3c7ab4ef0e5ec1c53ce272f489da"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-x86_64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700061"
+checksum = "sha256:3d9ef6228c4eeb26d593c398b2dc5250e0f6d6425933db2993fcf30d49c78b69"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-x86_64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540116"
 provenance = "github-attestations"
 
 [tools.ruff."platforms.windows-x64"]
-checksum = "sha256:035c59abfd7bd1102e0b656f5771e6ae7a712a45ef54b5ab575541c7ff7d1eb0"
-url = "https://github.com/astral-sh/ruff/releases/download/0.15.21/ruff-x86_64-pc-windows-msvc.zip"
-url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/471700068"
+checksum = "sha256:c5d1185c47261f86361d03b547da25be79120226a6f1721d623b2aba9d27668b"
+url = "https://github.com/astral-sh/ruff/releases/download/0.16.0/ruff-x86_64-pc-windows-msvc.zip"
+url_api = "https://api.github.com/repos/astral-sh/ruff/releases/assets/487540121"
 provenance = "github-attestations"
 
 [[tools.rumdl]]
-version = "v0.2.31"
+version = "v0.2.43"
 backend = "aqua:rvben/rumdl"
 
 [tools.rumdl."platforms.linux-arm64"]
-checksum = "sha256:d5aa4ac3f94de9b6508021f70d78be592c6dc8b67ea499c6e203c1e3daf044b0"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-aarch64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381480"
+checksum = "sha256:d5388225fa5e87c558c8d9bdc78dba515ce5ac2cbf8213fcc56ecdeabe534776"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745474"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.linux-arm64-musl"]
-checksum = "sha256:d5aa4ac3f94de9b6508021f70d78be592c6dc8b67ea499c6e203c1e3daf044b0"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-aarch64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381480"
+checksum = "sha256:d5388225fa5e87c558c8d9bdc78dba515ce5ac2cbf8213fcc56ecdeabe534776"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745474"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.linux-x64"]
-checksum = "sha256:5550f7954457248c6e29715b69d4ec2e9394613de51f98b50fa81f197a29af92"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-x86_64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381477"
+checksum = "sha256:e74e580aaf32698f61081ef1f6b9748f5c3fc1df311c14ab47ad3548a6a62f81"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745475"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.linux-x64-musl"]
-checksum = "sha256:5550f7954457248c6e29715b69d4ec2e9394613de51f98b50fa81f197a29af92"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-x86_64-unknown-linux-musl.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381477"
+checksum = "sha256:e74e580aaf32698f61081ef1f6b9748f5c3fc1df311c14ab47ad3548a6a62f81"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745475"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.macos-arm64"]
-checksum = "sha256:368a02639247be530043abc36c40310090c09ef69b32f5744f9a0d9cc2673be5"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-aarch64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381484"
+checksum = "sha256:43b19e0783b68135029b4f58dcb5bb7bf571f498107f6dae107e08bc6fe07214"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-aarch64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745481"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.macos-x64"]
-checksum = "sha256:bc8933e04b5c83b8b14c21793c7f7902bc8b1a841bb1f1964c5f177b3cf7d05f"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-x86_64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381479"
+checksum = "sha256:9ae902fa12b095911a7568457afdcde73a5295b168a063cdf8d478a3728d6411"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-x86_64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745471"
 provenance = "github-attestations"
 
 [tools.rumdl."platforms.windows-x64"]
-checksum = "sha256:f8a4b2abf774301fd4ffd04f56e12fb0b2bf4357b28c63ec355405d57f0cfe88"
-url = "https://github.com/rvben/rumdl/releases/download/v0.2.31/rumdl-v0.2.31-x86_64-pc-windows-msvc.zip"
-url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/474381488"
+checksum = "sha256:7cef2e64bba950f5425c2c46983b1ca4a5122a33ff60e2cf3ff001e24d0beb30"
+url = "https://github.com/rvben/rumdl/releases/download/v0.2.43/rumdl-v0.2.43-x86_64-pc-windows-msvc.zip"
+url_api = "https://api.github.com/repos/rvben/rumdl/releases/assets/488745485"
 provenance = "github-attestations"
 
 [[tools.shellcheck]]
@@ -796,41 +796,41 @@ url = "https://github.com/crate-ci/typos/releases/download/v1.48.0/typos-v1.48.0
 url_api = "https://api.github.com/repos/crate-ci/typos/releases/assets/462430871"
 
 [[tools.zizmor]]
-version = "1.26.1"
+version = "1.28.0"
 backend = "aqua:zizmorcore/zizmor"
 
 [tools.zizmor."platforms.linux-arm64"]
-checksum = "sha256:711f5af366b299128f9a04b1470e37d990b41fbd21f14a1a4148d25004a83762"
-url = "https://github.com/zizmorcore/zizmor/releases/download/v1.26.1/zizmor-aarch64-unknown-linux-gnu.tar.gz"
-url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/453417983"
+checksum = "sha256:324e43770cfacf4216f8aefb287263b5b5c733c85b03bf7583b5cc4a0460239e"
+url = "https://github.com/zizmorcore/zizmor/releases/download/v1.28.0/zizmor-aarch64-unknown-linux-gnu.tar.gz"
+url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/485211654"
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.linux-arm64-musl"]
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.linux-x64"]
-checksum = "sha256:8556289a64e7aaf2400cd516f61a471aa91c5902cc56ad96a82fd12f90c2ef73"
-url = "https://github.com/zizmorcore/zizmor/releases/download/v1.26.1/zizmor-x86_64-unknown-linux-gnu.tar.gz"
-url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/453417985"
+checksum = "sha256:e87b67160194884e375a46a12c57ccc904f762b53845f254fab7f17d98809c09"
+url = "https://github.com/zizmorcore/zizmor/releases/download/v1.28.0/zizmor-x86_64-unknown-linux-gnu.tar.gz"
+url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/485211657"
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.linux-x64-musl"]
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.macos-arm64"]
-checksum = "sha256:68ab2b37836bbd44f6cfffcc102b9ffffbc20c5d67d84293dafb63bd2775a1da"
-url = "https://github.com/zizmorcore/zizmor/releases/download/v1.26.1/zizmor-aarch64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/453417984"
+checksum = "sha256:54949bbd6b4c8527046bb8990bac9e0dab3eec787640f4e6199ae121dd1040be"
+url = "https://github.com/zizmorcore/zizmor/releases/download/v1.28.0/zizmor-aarch64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/485211655"
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.macos-x64"]
-checksum = "sha256:2967414a561f8c1264121e8f723c3b5abcf3d1bf7ce5063114df99985dd75801"
-url = "https://github.com/zizmorcore/zizmor/releases/download/v1.26.1/zizmor-x86_64-apple-darwin.tar.gz"
-url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/453417982"
+checksum = "sha256:40a58d8560d65c71357b3977d0da425773bf8f10bf1ffd38099d963d3afdf3aa"
+url = "https://github.com/zizmorcore/zizmor/releases/download/v1.28.0/zizmor-x86_64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/485211652"
 provenance = "github-attestations"
 
 [tools.zizmor."platforms.windows-x64"]
-checksum = "sha256:c6cea156935e3b9d36faeca4fd8f622d23f7a7578da26adb34e6456abd9beb9a"
-url = "https://github.com/zizmorcore/zizmor/releases/download/v1.26.1/zizmor-x86_64-pc-windows-msvc.zip"
-url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/453417981"
+checksum = "sha256:06e5b2345323201ed4c55897651862fee3b43f79ddced799f1236f0f0d1c1c0f"
+url = "https://github.com/zizmorcore/zizmor/releases/download/v1.28.0/zizmor-x86_64-pc-windows-msvc.zip"
+url_api = "https://api.github.com/repos/zizmorcore/zizmor/releases/assets/485211651"
 provenance = "github-attestations"
diff --git a/mise.toml b/mise.toml
index 94c3beb17..497c10f19 100644
--- a/mise.toml
+++ b/mise.toml
@@ -9,20 +9,20 @@ protoc = "35.1"
 # Linters
 actionlint = "1.7.12"
 "aqua:grafana/flint" = "0.22.9"
-"aqua:jonwiggins/xmloxide" = "v0.4.3"
+"aqua:jonwiggins/xmloxide" = "v0.4.4"
 "aqua:owenlamont/ryl" = "0.21.0"
-biome = "2.5.3"
+biome = "2.5.5"
 editorconfig-checker = "3.8.0"
 google-java-format = "1.35.0"
 lychee = "0.24.2"
-"npm:renovate" = "43.257.4"
-ruff = "0.15.21"
-rumdl = "v0.2.31"
+"npm:renovate" = "43.279.1"
+ruff = "0.16.0"
+rumdl = "v0.2.43"
 shellcheck = "v0.11.0"
 shfmt = "3.13.1"
 taplo = "0.10.0"
 typos = "1.48.0"
-zizmor = "1.26.1"
+zizmor = "1.28.0"
 
 [env]
 FLINT_CONFIG_DIR = ".github/config"

From 5757c412fa58e3d664d4b4af6c0e6db40f7855b1 Mon Sep 17 00:00:00 2001
From: Gregor Zeitlinger 
Date: Tue, 28 Jul 2026 16:34:19 +0200
Subject: [PATCH 27/83] ci: limit release job to Java toolchain (#2347)

## What changed

- Restrict the Maven Central release job to the mise-managed Java
toolchain.
- Preserve the existing no-cache release configuration.

## Why

The artifact release should not install unrelated development and
linting tools from `mise.toml`. This keeps release execution focused and
prevents unrelated tool resolution failures from blocking publication.

## Validation

- `mise run lint:fix`
- `actionlint .github/workflows/release.yml`
- `git diff --check`
---
 .github/workflows/release.yml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a30db041e..2970100fc 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -15,6 +15,9 @@ jobs:
     if: ${{ github.repository == 'prometheus/client_java' }}
     environment: release
     runs-on: ubuntu-24.04
+    env:
+      # Artifact releases pair a focused tool allowlist with cache: false.
+      MISE_ENABLE_TOOLS: java
     permissions:
       actions: write # required to trigger bump-api-diff-baseline.yml via `gh workflow run`
 

From 9b0ede830fcf233fb9f9c4cb08ed91ef21fbd667 Mon Sep 17 00:00:00 2001
From: Subhramit Basu 
Date: Tue, 28 Jul 2026 20:11:29 +0530
Subject: [PATCH 28/83] feat: support metric name filtering in OpenTelemetry
 exporter (#2344)

Closes the last pending high-priority item in
https://github.com/prometheus/client_java/issues/1816 (as all others
have already been addressed).

Currently, `PrometheusMetricProducer` always exported all metrics in the
registry unconditionally. The code already had a TODO sketching how
filtering could be added:

https://github.com/prometheus/client_java/blob/9432fdc1933611d34d944d4640ebca3bf91f8ee4/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java#L47-L54

this PR implements that by reusing `ExporterFilterProperties` and
`MetricNameFilter`, as already done by `PrometheusScrapeHandler`.

As a result, the OpenTelemetry exporter now honors the shared
`io.prometheus.exporter.filter.*` configuration, making its behavior
consistent with the HTTP/Servlet exporters.

---------

Signed-off-by: subhramit 
---
 docs/content/otel/otlp.md                     |  4 +
 .../opentelemetry/OtelAutoConfig.java         |  6 +-
 .../PrometheusMetricProducer.java             | 94 ++++++++++++++++---
 .../exporter/opentelemetry/ExportTest.java    | 89 ++++++++++++++----
 .../opentelemetry/OtelAutoConfigTest.java     | 88 ++++++++++++++---
 5 files changed, 234 insertions(+), 47 deletions(-)

diff --git a/docs/content/otel/otlp.md b/docs/content/otel/otlp.md
index 31aacfcbd..e2ea987dd 100644
--- a/docs/content/otel/otlp.md
+++ b/docs/content/otel/otlp.md
@@ -44,6 +44,9 @@ By default, the `OpenTelemetryExporter` will push metrics every 60 seconds to
 the [OpenTelemetryExporter.Builder][builder-javadoc], or at runtime via
 [`io.prometheus.exporter.opentelemetry.*`][otel-properties] properties.
 
+The OpenTelemetry exporter also honors the shared [`io.prometheus.exporter.filter.*`][exporter-filter-properties] metric-name
+filter properties.
+
 In addition to the Prometheus Java client configuration, the exporter also recognizes standard
 OpenTelemetry configuration. For example, you can set
 the [OTEL_EXPORTER_OTLP_METRICS_ENDPOINT](https://opentelemetry.io/docs/concepts/sdk-configuration/otlp-exporter-configuration/#otel_exporter_otlp_metrics_endpoint)
@@ -62,4 +65,5 @@ OTel collector, and a Prometheus server.
 [builder-javadoc]: /client_java/api/io/prometheus/metrics/exporter/opentelemetry/OpenTelemetryExporter.Builder.html
 [opentelemetry-example]: https://github.com/prometheus/client_java/tree/main/examples/example-exporter-opentelemetry
 [otel-pipeline]: /client_java/images/otel-pipeline.png
+[exporter-filter-properties]: {{< relref "../config/config.md#exporter-filter-properties" >}}
 [otel-properties]: {{< relref "../config/config.md#exporter-opentelemetry-properties" >}}
diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java
index 2ea96e3c3..267ff23ad 100644
--- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java
+++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfig.java
@@ -40,8 +40,10 @@ static MetricReader createReader(
     MetricReader reader = requireNonNull(readerRef.get());
     boolean preserveNames = resolvePreserveNames(builder, config);
     reader.register(
-        new PrometheusMetricProducer(
-            registry, instrumentationScopeInfo, getResourceField(sdk), preserveNames));
+        PrometheusMetricProducer.builder(
+                registry, instrumentationScopeInfo, getResourceField(sdk), preserveNames)
+            .exporterFilterProperties(config.getExporterFilterProperties())
+            .build());
     return reader;
   }
 
diff --git a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
index 886cdd85c..2c3e399f7 100644
--- a/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
+++ b/prometheus-metrics-exporter-opentelemetry/src/main/java/io/prometheus/metrics/exporter/opentelemetry/PrometheusMetricProducer.java
@@ -7,7 +7,9 @@
 import io.opentelemetry.sdk.metrics.export.CollectionRegistration;
 import io.opentelemetry.sdk.resources.Resource;
 import io.opentelemetry.sdk.resources.ResourceBuilder;
+import io.prometheus.metrics.config.ExporterFilterProperties;
 import io.prometheus.metrics.exporter.opentelemetry.otelmodel.MetricDataFactory;
+import io.prometheus.metrics.model.registry.MetricNameFilter;
 import io.prometheus.metrics.model.registry.PrometheusRegistry;
 import io.prometheus.metrics.model.snapshots.CounterSnapshot;
 import io.prometheus.metrics.model.snapshots.GaugeSnapshot;
@@ -22,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.function.Predicate;
 import javax.annotation.Nullable;
 
 class PrometheusMetricProducer implements CollectionRegistration {
@@ -30,29 +33,65 @@ class PrometheusMetricProducer implements CollectionRegistration {
   private final Resource resource;
   private final InstrumentationScopeInfo instrumentationScopeInfo;
   private final boolean preserveNames;
+  @Nullable private final Predicate nameFilter;
 
-  public PrometheusMetricProducer(
+  private PrometheusMetricProducer(
       PrometheusRegistry registry,
       InstrumentationScopeInfo instrumentationScopeInfo,
       Resource resource,
-      boolean preserveNames) {
+      boolean preserveNames,
+      @Nullable Predicate nameFilter) {
     this.registry = registry;
     this.instrumentationScopeInfo = instrumentationScopeInfo;
     this.resource = resource;
     this.preserveNames = preserveNames;
+    this.nameFilter = nameFilter;
+  }
+
+  /**
+   * Creates a builder for a producer with no metric name filtering by default, i.e. all metrics in
+   * {@code registry} are exported unless filter properties are configured on the builder.
+   */
+  static Builder builder(
+      PrometheusRegistry registry,
+      InstrumentationScopeInfo instrumentationScopeInfo,
+      Resource resource,
+      boolean preserveNames) {
+    return new Builder(registry, instrumentationScopeInfo, resource, preserveNames);
+  }
+
+  /**
+   * Builds a name filter from {@code io.prometheus.exporter.filter.*} properties, mirroring how
+   * {@code PrometheusScrapeHandler} builds its filter for the Servlet/HTTPServer exporters so that
+   * filtering config behaves consistently across exporters.
+   *
+   * 

OpenTelemetry's own Views API also supports filtering and aggregation, and may be preferable + * for OpenTelemetry-specific deployments; this filter is intended for users who want the same + * {@code io.prometheus.exporter.filter.*} config to apply regardless of which exporter they use. + * + * @return {@code null} if no filter properties are set, to avoid the overhead of testing every + * metric name against a filter that matches everything. + */ + @Nullable + private static Predicate makeNameFilter(ExporterFilterProperties props) { + if (props.getAllowedMetricNames() == null + && props.getExcludedMetricNames() == null + && props.getAllowedMetricNamePrefixes() == null + && props.getExcludedMetricNamePrefixes() == null) { + return null; + } + return MetricNameFilter.builder() + .nameMustBeEqualTo(props.getAllowedMetricNames()) + .nameMustNotBeEqualTo(props.getExcludedMetricNames()) + .nameMustStartWith(props.getAllowedMetricNamePrefixes()) + .nameMustNotStartWith(props.getExcludedMetricNamePrefixes()) + .build(); } @Override public Collection collectAllMetrics() { - // Note: Currently all metrics from the registry are exported. To add metric filtering - // similar to the Servlet exporter, one could: - // 1. Add filter properties to ExporterOpenTelemetryProperties (allowedNames, excludedNames, - // etc.) - // 2. Convert these properties to a Predicate using MetricNameFilter.builder() - // 3. Call registry.scrape(filter) instead of registry.scrape() - // OpenTelemetry also provides its own Views API for filtering and aggregation, which may be - // preferred for OpenTelemetry-specific deployments. - MetricSnapshots snapshots = registry.scrape(); + MetricSnapshots snapshots = + nameFilter != null ? registry.scrape(nameFilter) : registry.scrape(); Resource resourceWithTargetInfo = resource.merge(resourceFromTargetInfo(snapshots)); InstrumentationScopeInfo scopeFromInfo = instrumentationScopeFromOtelScopeInfo(snapshots); List result = new ArrayList<>(snapshots.size()); @@ -142,4 +181,37 @@ private void addUnlessNull(List result, @Nullable MetricData data) { result.add(data); } } + + static class Builder { + private final PrometheusRegistry registry; + private final Resource resource; + private final InstrumentationScopeInfo instrumentationScopeInfo; + private final boolean preserveNames; + private ExporterFilterProperties filterProperties = ExporterFilterProperties.builder().build(); + + private Builder( + PrometheusRegistry registry, + InstrumentationScopeInfo instrumentationScopeInfo, + Resource resource, + boolean preserveNames) { + this.registry = registry; + this.instrumentationScopeInfo = instrumentationScopeInfo; + this.resource = resource; + this.preserveNames = preserveNames; + } + + Builder exporterFilterProperties(ExporterFilterProperties filterProperties) { + this.filterProperties = filterProperties; + return this; + } + + PrometheusMetricProducer build() { + return new PrometheusMetricProducer( + registry, + instrumentationScopeInfo, + resource, + preserveNames, + makeNameFilter(filterProperties)); + } + } } diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java index 0332eb574..4329df4b8 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/ExportTest.java @@ -12,6 +12,7 @@ import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; +import io.prometheus.metrics.config.ExporterFilterProperties; import io.prometheus.metrics.core.metrics.Counter; import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.core.metrics.Histogram; @@ -46,11 +47,12 @@ void setUp() throws IllegalAccessException, NoSuchFieldException { MetricReader reader = (MetricReader) field.get(testing); PrometheusMetricProducer prometheusMetricProducer = - new PrometheusMetricProducer( - registry, - InstrumentationScopeInfo.create("test"), - Resource.create(Attributes.builder().put("staticRes", "value").build()), - false); + PrometheusMetricProducer.builder( + registry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + false) + .build(); reader.register(prometheusMetricProducer); } @@ -332,11 +334,12 @@ void preserveNamesWithUnit() { InMemoryMetricReader reader = InMemoryMetricReader.create(); PrometheusRegistry preserveRegistry = new PrometheusRegistry(); reader.register( - new PrometheusMetricProducer( - preserveRegistry, - InstrumentationScopeInfo.create("test"), - Resource.create(Attributes.builder().put("staticRes", "value").build()), - true)); + PrometheusMetricProducer.builder( + preserveRegistry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + true) + .build()); Counter.builder().name("req").unit(Unit.BYTES).register(preserveRegistry).inc(); @@ -350,11 +353,12 @@ void preserveNamesWithUnitAlreadyInName() { InMemoryMetricReader reader = InMemoryMetricReader.create(); PrometheusRegistry preserveRegistry = new PrometheusRegistry(); reader.register( - new PrometheusMetricProducer( - preserveRegistry, - InstrumentationScopeInfo.create("test"), - Resource.create(Attributes.builder().put("staticRes", "value").build()), - true)); + PrometheusMetricProducer.builder( + preserveRegistry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + true) + .build()); Counter.builder().name("req_bytes").unit(Unit.BYTES).register(preserveRegistry).inc(); @@ -368,11 +372,12 @@ void preserveNamesWithoutUnit() { InMemoryMetricReader reader = InMemoryMetricReader.create(); PrometheusRegistry preserveRegistry = new PrometheusRegistry(); reader.register( - new PrometheusMetricProducer( - preserveRegistry, - InstrumentationScopeInfo.create("test"), - Resource.create(Attributes.builder().put("staticRes", "value").build()), - true)); + PrometheusMetricProducer.builder( + preserveRegistry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + true) + .build()); Counter.builder().name("events_total").register(preserveRegistry).inc(); @@ -381,6 +386,50 @@ void preserveNamesWithoutUnit() { OpenTelemetryAssertions.assertThat(metrics.get(0)).hasName("events_total"); } + @Test + void metricNameFilterExcludedNames() { + InMemoryMetricReader reader = InMemoryMetricReader.create(); + PrometheusRegistry filteredRegistry = new PrometheusRegistry(); + reader.register( + PrometheusMetricProducer.builder( + filteredRegistry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + false) + .exporterFilterProperties( + ExporterFilterProperties.builder().excludedNames("secret_total").build()) + .build()); + + Counter.builder().name("secret").register(filteredRegistry).inc(); + Counter.builder().name("public").register(filteredRegistry).inc(); + + List metrics = new ArrayList<>(reader.collectAllMetrics()); + assertThat(metrics).hasSize(1); + OpenTelemetryAssertions.assertThat(metrics.get(0)).hasName("public"); + } + + @Test + void metricNameFilterAllowedPrefixes() { + InMemoryMetricReader reader = InMemoryMetricReader.create(); + PrometheusRegistry filteredRegistry = new PrometheusRegistry(); + reader.register( + PrometheusMetricProducer.builder( + filteredRegistry, + InstrumentationScopeInfo.create("test"), + Resource.create(Attributes.builder().put("staticRes", "value").build()), + false) + .exporterFilterProperties( + ExporterFilterProperties.builder().allowedPrefixes("http_").build()) + .build()); + + Counter.builder().name("http_requests").register(filteredRegistry).inc(); + Counter.builder().name("jvm_threads").register(filteredRegistry).inc(); + + List metrics = new ArrayList<>(reader.collectAllMetrics()); + assertThat(metrics).hasSize(1); + OpenTelemetryAssertions.assertThat(metrics.get(0)).hasName("http_requests"); + } + private MetricAssert metricAssert() { List metrics = testing.getMetrics(); assertThat(metrics).hasSize(1); diff --git a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java index a81aec440..19a737122 100644 --- a/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java +++ b/prometheus-metrics-exporter-opentelemetry/src/test/java/io/prometheus/metrics/exporter/opentelemetry/OtelAutoConfigTest.java @@ -7,11 +7,21 @@ import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.export.CollectionRegistration; +import io.opentelemetry.sdk.metrics.export.MetricReader; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.prometheus.metrics.config.ExporterFilterProperties; import io.prometheus.metrics.config.ExporterOpenTelemetryProperties; import io.prometheus.metrics.config.PrometheusProperties; import io.prometheus.metrics.config.PrometheusPropertiesLoader; +import io.prometheus.metrics.core.metrics.Counter; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -67,21 +77,16 @@ public static Stream testCases() { "values from builder", new TestCase() .expectedProperties( - Map.of( - "otel.exporter.otlp.protocol", - Optional.of("http/protobuf"), - "otel.exporter.otlp.endpoint", - Optional.of("http://builder:4318"), - "otel.exporter.otlp.headers", - Optional.of("h=builder-v"), - "otel.metric.export.interval", - Optional.of("2s"), - "otel.exporter.otlp.timeout", - Optional.of("3s"), - "otel.service.name", - Optional.of("builder-service"))) + ImmutableMap.>builder() + .put("otel.exporter.otlp.protocol", Optional.of("http/protobuf")) + .put("otel.exporter.otlp.endpoint", Optional.of("http://builder:4318")) + .put("otel.exporter.otlp.headers", Optional.of("h=builder-v")) + .put("otel.metric.export.interval", Optional.of("2s")) + .put("otel.exporter.otlp.timeout", Optional.of("3s")) + .put("otel.service.name", Optional.of("builder-service")) + .build()) .expectedResourceAttributes( - Map.of( + ImmutableMap.of( "key", "builder-value", "service.name", @@ -316,6 +321,61 @@ void resolvePreserveNamesFromConfig() { assertThat(OtelAutoConfig.resolvePreserveNames(builder, config)).isTrue(); } + @Test + void createReaderUsesExporterFilterProperties() throws IllegalAccessException { + PrometheusRegistry registry = new PrometheusRegistry(); + PrometheusProperties config = + PrometheusProperties.builder() + .exporterFilterProperties( + ExporterFilterProperties.builder().excludedNames("secret_total").build()) + .build(); + OpenTelemetryExporter.Builder builder = + OpenTelemetryExporter.builder(config).registry(registry); + MetricReader reader = OtelAutoConfig.createReader(builder, config, registry); + + try { + Counter.builder().name("secret").register(registry).inc(); + Counter.builder().name("public").register(registry).inc(); + + PrometheusMetricProducer producer = findPrometheusMetricProducer(reader); + List metrics = new ArrayList<>(producer.collectAllMetrics()); + assertThat(metrics).hasSize(1); + OpenTelemetryAssertions.assertThat(metrics.get(0)).hasName("public"); + } finally { + reader.shutdown(); + } + } + + // MetricReader does not expose registered CollectionRegistrations, so this test locates the + // registered PrometheusMetricProducer reflectively to verify that OtelAutoConfig wires exporter + // filter properties through to it. + private static PrometheusMetricProducer findPrometheusMetricProducer(Object object) + throws IllegalAccessException { + assertThat(object).isNotNull(); + for (Field field : object.getClass().getDeclaredFields()) { + field.setAccessible(true); + Object value = field.get(object); + if (value instanceof PrometheusMetricProducer) { + return (PrometheusMetricProducer) value; + } + if (value instanceof CollectionRegistration) { + return findPrometheusMetricProducer(value); + } + if (value instanceof Iterable) { + for (Object element : (Iterable) value) { + if (element instanceof PrometheusMetricProducer) { + return (PrometheusMetricProducer) element; + } + if (element instanceof CollectionRegistration) { + return findPrometheusMetricProducer(element); + } + } + } + } + throw new AssertionError( + "Did not find PrometheusMetricProducer in " + object.getClass().getName()); + } + private static ExporterOpenTelemetryProperties getExporterOpenTelemetryProperties( TestCase testCase) { if (testCase.propertiesBuilder == null) { From c78e5e147bb54f03776e52719bb796b7a0e003f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 17:12:19 +0200 Subject: [PATCH 29/83] chore(deps): update dependency aqua:grafana/gcx to v1 (#2349) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [aqua:grafana/gcx](https://redirect.github.com/grafana/gcx) | major | `0.6.0` → `1.0.0` | --- ### Release Notes

grafana/gcx (aqua:grafana/gcx) ### [`v1.0.0`](https://redirect.github.com/grafana/gcx/blob/HEAD/CHANGELOG.md#v100-2026-07-28) [Compare Source](https://redirect.github.com/grafana/gcx/compare/v0.6.0...v1.0.0) ##### Features - alert: add ruler subtree for datasource-managed rule writes - kg: add `entities correlate` to resolve entities from alert labels - kg: add entity quality reports (`kg quality`), folded into `kg diagnose` ##### Fixes - alert: make GMA alert rules modifiable via the resources tier - cloud: drop status/createdAt/updatedAt from stack regions output - aio11y: point plugin id at renamed grafana-agento11y-app ##### Docs - GA: remove public preview warnings, add GA notes across docs and README - skills: harden agento11y-instrument and agento11y-prod-setup guidance - stop prescribing Editor/Admin for service-account tokens; installation fixes
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.lock | 44 ++++++++++++++++++++++---------------------- mise.toml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/mise.lock b/mise.lock index 8809f7764..f09cb34a5 100644 --- a/mise.lock +++ b/mise.lock @@ -87,43 +87,43 @@ url_api = "https://api.github.com/repos/grafana/flint/releases/assets/476892021" provenance = "github-attestations" [[tools."aqua:grafana/gcx"]] -version = "v0.6.0" +version = "v1.0.0" backend = "aqua:grafana/gcx" [tools."aqua:grafana/gcx"."platforms.linux-arm64"] -checksum = "sha256:4678cce06fc9d6cc364c460f67be0bb06861e00e3c058e48697ae7428938efcb" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386380" +checksum = "sha256:605f6bb7406d144bd11c72ff25649ab17229699be585a253460b77396dc57585" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677496" [tools."aqua:grafana/gcx"."platforms.linux-arm64-musl"] -checksum = "sha256:4678cce06fc9d6cc364c460f67be0bb06861e00e3c058e48697ae7428938efcb" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386380" +checksum = "sha256:605f6bb7406d144bd11c72ff25649ab17229699be585a253460b77396dc57585" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677496" [tools."aqua:grafana/gcx"."platforms.linux-x64"] -checksum = "sha256:5e76c064f14d9ec360cc48c46251b06a47762ab0dc755e4275e14ce2f67e8dbe" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386396" +checksum = "sha256:c88c65958d19d83dc3a192a2a5037e08307a9c776019f24249b89f369c9c4d41" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677459" [tools."aqua:grafana/gcx"."platforms.linux-x64-musl"] -checksum = "sha256:5e76c064f14d9ec360cc48c46251b06a47762ab0dc755e4275e14ce2f67e8dbe" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386396" +checksum = "sha256:c88c65958d19d83dc3a192a2a5037e08307a9c776019f24249b89f369c9c4d41" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677459" [tools."aqua:grafana/gcx"."platforms.macos-arm64"] -checksum = "sha256:7192ec16aef172d03031aa156c155eb351f230dae86e64e1ed337503fe45a1eb" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_darwin_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386379" +checksum = "sha256:5c27ac08d0d6d82a63468d75f41bfe83536e17efa89b6329076fcb2da046a672" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677461" [tools."aqua:grafana/gcx"."platforms.macos-x64"] -checksum = "sha256:b5174d5c47ffeaf21c1a65c83b908538cf664649199bd017d5f3addb537fc4aa" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_darwin_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386377" +checksum = "sha256:383feee2eade5d941412b49d3c508bad2cbc5088a016c7f77bfad0eb9afe1984" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677498" [tools."aqua:grafana/gcx"."platforms.windows-x64"] -checksum = "sha256:de456400960e2405de01dc493f7659e6a2a6168ea2c26b02e08ccbd06fa22385" -url = "https://github.com/grafana/gcx/releases/download/v0.6.0/gcx_0.6.0_windows_amd64.zip" -url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/488386381" +checksum = "sha256:9c8dcccbc1712463ebce92b8c9f07f05ca55d6d096b2219dcc7e0761f832fef9" +url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_windows_amd64.zip" +url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677462" [[tools."aqua:grafana/oats"]] version = "0.8.0" diff --git a/mise.toml b/mise.toml index 497c10f19..569a2f3bd 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -"aqua:grafana/gcx" = "v0.6.0" +"aqua:grafana/gcx" = "v1.0.0" "aqua:grafana/oats" = "0.8.0" hugo = "0.164.0" java = "temurin-25.0.3+9.0.LTS" From 62d2443f639e2f643f04c0073920cb2b2c416116 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 15:43:11 +0200 Subject: [PATCH 30/83] chore(deps): update dependency aqua:grafana/oats to v0.9.0 (#2352) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Update | Change | |---|---|---| | [aqua:grafana/oats](https://redirect.github.com/grafana/oats) | minor | `0.8.0` → `0.10.0` | --- ### Release Notes
grafana/oats (aqua:grafana/oats) ### [`v0.10.0`](https://redirect.github.com/grafana/oats/blob/HEAD/CHANGELOG.md#0100-2026-07-28) [Compare Source](https://redirect.github.com/grafana/oats/compare/v0.9.0...v0.10.0) ##### Features - add opt-in HTTP input retries ([#​453](https://redirect.github.com/grafana/oats/issues/453)) ([82a973d](https://redirect.github.com/grafana/oats/commit/82a973d528a9dab8b8ac69091db53e41b92cf8b6)) ##### Bug Fixes - **release:** ensure gcx updates trigger releases ([#​454](https://redirect.github.com/grafana/oats/issues/454)) ([8e52488](https://redirect.github.com/grafana/oats/commit/8e52488956da7273f36937a8cbdfe97918e67278)) ### [`v0.9.0`](https://redirect.github.com/grafana/oats/blob/HEAD/CHANGELOG.md#090-2026-07-28) [Compare Source](https://redirect.github.com/grafana/oats/compare/v0.8.0...v0.9.0) ##### Features - support one-shot Compose inputs ([#​451](https://redirect.github.com/grafana/oats/issues/451)) ([c43e6cb](https://redirect.github.com/grafana/oats/commit/c43e6cb6964d486c8a27df9f2d43b821f5a1ac62)) ##### Bug Fixes - **deps:** update module go.opentelemetry.io/collector/pdata to v1.63.0 ([#​438](https://redirect.github.com/grafana/oats/issues/438)) ([6f3524a](https://redirect.github.com/grafana/oats/commit/6f3524a215886baf03e78e2493d235d1fb8ac131))
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prometheus/client_java). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- mise.lock | 44 ++++++++++++++++++++++---------------------- mise.toml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/mise.lock b/mise.lock index f09cb34a5..ba618bcba 100644 --- a/mise.lock +++ b/mise.lock @@ -126,49 +126,49 @@ url = "https://github.com/grafana/gcx/releases/download/v1.0.0/gcx_1.0.0_windows url_api = "https://api.github.com/repos/grafana/gcx/releases/assets/492677462" [[tools."aqua:grafana/oats"]] -version = "0.8.0" +version = "0.10.0" backend = "aqua:grafana/oats" [tools."aqua:grafana/oats"."platforms.linux-arm64"] -checksum = "sha256:82eaf1e836cea916b96cef6745423efd8256ceab64bbabd1fa8f13b3883a1212" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171323" +checksum = "sha256:be195aeeafce644c8a59438bbc8c472f5ca51df6f9570c6b646373a703d686b0" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772122" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.linux-arm64-musl"] -checksum = "sha256:82eaf1e836cea916b96cef6745423efd8256ceab64bbabd1fa8f13b3883a1212" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171323" +checksum = "sha256:be195aeeafce644c8a59438bbc8c472f5ca51df6f9570c6b646373a703d686b0" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_linux_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772122" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.linux-x64"] -checksum = "sha256:ea4368c6d7f62244ce959ba60512f271d46d133b50350077257e2bb81c03a5ca" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171351" +checksum = "sha256:b72a7a587148d1eaa15ccea3ce1adfd67e040d1cd9f9e267c850154035ef9a18" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772131" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.linux-x64-musl"] -checksum = "sha256:ea4368c6d7f62244ce959ba60512f271d46d133b50350077257e2bb81c03a5ca" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_linux_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171351" +checksum = "sha256:b72a7a587148d1eaa15ccea3ce1adfd67e040d1cd9f9e267c850154035ef9a18" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_linux_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772131" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.macos-arm64"] -checksum = "sha256:156bb14787a09093de8ad0370c95e8104b771ca0b3ede382541f9837db797f27" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_darwin_arm64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171322" +checksum = "sha256:570d5c3b43c0cbe0d88c527d2fcecb9ee565e2f9d1a4d49fb4b6bbf5c3fa47e5" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_darwin_arm64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772124" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.macos-x64"] -checksum = "sha256:034bc120d0d8bbf8aff05f61a6b569efec821df19bd25bb602ee77d4a6368235" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_darwin_amd64.tar.gz" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171352" +checksum = "sha256:c3579f73928df56d1cf6d6bbb90d20424649ff08c228daa4810914017f8620d8" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_darwin_amd64.tar.gz" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772123" provenance = "github-attestations" [tools."aqua:grafana/oats"."platforms.windows-x64"] -checksum = "sha256:166a5577c66efa9e4d677856ae1780212ee27c081042c8d54db0c996019adbc0" -url = "https://github.com/grafana/oats/releases/download/v0.8.0/oats_0.8.0_windows_amd64.zip" -url_api = "https://api.github.com/repos/grafana/oats/releases/assets/487171324" +checksum = "sha256:b52112bf0932ea8dea1fb051bc04e29efa5ef138f67d09d775c4eb716d3d92f9" +url = "https://github.com/grafana/oats/releases/download/v0.10.0/oats_0.10.0_windows_amd64.zip" +url_api = "https://api.github.com/repos/grafana/oats/releases/assets/493772125" provenance = "github-attestations" [[tools."aqua:jonwiggins/xmloxide"]] diff --git a/mise.toml b/mise.toml index 569a2f3bd..eb899bbe5 100644 --- a/mise.toml +++ b/mise.toml @@ -1,6 +1,6 @@ [tools] "aqua:grafana/gcx" = "v1.0.0" -"aqua:grafana/oats" = "0.8.0" +"aqua:grafana/oats" = "0.10.0" hugo = "0.164.0" java = "temurin-25.0.3+9.0.LTS" node = "24.18.0" From 23ae29aa71825c2a83abf249fc45cca2a46e3c8b Mon Sep 17 00:00:00 2001 From: Subhramit Basu Date: Thu, 30 Jul 2026 05:13:15 +0530 Subject: [PATCH 31/83] docs: add API design guideline to contributing docs (#2350) --- AGENTS.md | 7 +++++++ CONTRIBUTING.md | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 24481b8e5..9c229117a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -125,6 +125,13 @@ commits. CI will fail if these checks fail. - Build succeeds (tests are skipped; run `mise run test` or `mise run test-all` for tests) +## API Design + +- For internal or SDK-facing classes, prefer static factories and builders + over adding new public constructors. +- Keep constructors non-public unless they are intentionally part of the + stable API. + ## Testing - JUnit 5 (Jupiter) with `@Test` annotations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 519b98fea..ece7e11e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,6 +73,13 @@ This requires native lint tools, which you can install with `mise run setup:native-lint-tools`. These are optional but catch formatting and lint issues before CI. +## API Design + +For internal or SDK-facing classes, prefer static factories and builders over +adding new public constructors. Constructors are difficult to evolve +compatibly, so keep them non-public unless they are intentionally part of the +stable API. + ## Running Tests If you're getting errors when running tests: From ee64917c53c0c8698a2b70ad48342f3bb2ca535d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 19:43:44 -0400 Subject: [PATCH 32/83] chore(deps): update dependency org.mock-server:mockserver-netty-no-dependencies to v7.5.0 (#2354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > ℹ️ **Note** > > This PR body was truncated due to platform limits. This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [org.mock-server:mockserver-netty-no-dependencies](https://www.mock-server.com) ([source](https://redirect.github.com/mock-server/mockserver-monorepo)) | `7.4.0` → `7.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.mock-server:mockserver-netty-no-dependencies/7.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.mock-server:mockserver-netty-no-dependencies/7.4.0/7.5.0?slim=true) | --- ### Release Notes
mock-server/mockserver-monorepo (org.mock-server:mockserver-netty-no-dependencies) ### [`v7.5.0`](https://redirect.github.com/mock-server/mockserver-monorepo/blob/HEAD/changelog.md#750---2026-07-29) ##### Security - **BREAKING: response templates can no longer reach arbitrary Java classes by default, closing the template remote-code-execution path reported as [GHSA-7pwj-xvc2-hfpc](https://redirect.github.com/mock-server/mockserver-monorepo/security/advisories/GHSA-7pwj-xvc2-hfpc).** A caller who can reach the management API can register an expectation, and a response template was able to load `java.lang.Runtime` and execute OS commands in the MockServer process. Both engines that could do this are now sandboxed out of the box: - `velocityDisallowClassLoading` now defaults to **`true`** (was `false`), installing Velocity's `SecureUberspector` so a template cannot reach classes through `$request.class.classLoader.loadClass(...)`. This is the more exposed half of the issue, and the half the report did not cover: Velocity ships in the DEFAULT distribution, whereas the JavaScript engine does not. - JavaScript templates now resolve **no** Java classes unless an operator grants them. Previously an empty `javascriptAllowedClasses` *and* empty `javascriptDisallowedClasses` meant unrestricted `Java.type(...)` access; that combination — the out-of-the-box state — now denies every class. - The GraalJS guest context no longer grants access to the members of `java.lang.Class` or `java.lang.ClassLoader`. Denying classes at `Java.type(...)` alone was **not** sufficient: real host objects are bound into the context (`faker` and the other built-in helpers), and under the previous `HostAccess.ALL` a template could walk from one of them to a classloader — `faker.getClass().getClassLoader().loadClass('java.lang.Runtime')` — reaching `Runtime` without the class filter ever being consulted. That walk is now closed, so host-class lookup is the single complete gate; a regression test drives four such walks (including through `request`) and fails if any resolves. Velocity's `SecureUberspector` already blocked the equivalent walk through its own bound helpers, which is now covered by a test too. Both flips are fully reversible with one property and remove no functionality: set `mockserver.velocityDisallowClassLoading=false`, or list the classes your templates need in `mockserver.javascriptAllowedClasses` (the single entry `*` lets any class resolve again). Templates that do not touch Java classes are unaffected, which is the overwhelming majority — JavaScript templates have the full ES2023 standard library available regardless of this setting. A refused class is logged once at WARN naming the class and the property to set, because GraalJS otherwise surfaces a refusal only as the class being undefined ("... is not a function"); the log is bounded and de-duplicated so a hostile template cannot flood it. `mockserver.javascriptAllowedClasses` is now also settable through the Spring test listener's `@MockServerTest` properties, which it was not before — it was a nice-to-have while the default was unrestricted, and is the only way to grant a class now that it is not. The insecure-mode WARN now fires when an operator has explicitly opened the sandbox rather than when it is closed. Proven end-to-end by a Netty integration test that registers the reported payload through the real management API and asserts the OS command creates no marker file, with a negative control on a deliberately unsandboxed server that DOES create it — so a regression cannot pass as an inert payload. This lands DEF-2 and DEF-3 of `docs/plans/later/security-defaults.md` ahead of the other default flips listed there; JavaScript went further than that plan proposed (deny everything, not a built-in "safe types" allow-list) because deny-by-default is the only form that stays safe as the JDK grows new reachable classes. ##### Fixed - **A property file that cannot be read is now reported instead of ignored in silence ([#​2358](https://redirect.github.com/mock-server/mockserver-monorepo/issues/2358)).** When a `mockserver.propertyFile` an operator had explicitly configured could not be read, MockServer applied none of its properties and said nothing about it — at any log level. The only symptom was that every property in the file appeared to be at its default, which surfaces far downstream as unexplained behaviour: in the reported case an unreadable (but present) mounted file meant `initializationJsonPath` was never set, so no expectations loaded, no `loading JSON initialization file:` line appeared, and no error was logged either. The message existed but was unreachable in practice — gated at DEBUG *and* emitted during static initialisation, before any log level has been applied, so neither `-Dmockserver.logLevel=DEBUG` nor a `-logLevel` argument could surface it. Such a file is now logged at WARN, naming the path and the underlying reason verbatim; because `FileNotFoundException` covers "not there" and "not allowed to read it" alike, that reason is usually the whole answer (`Permission denied` in the reported case, typically SELinux labelling or a rootless/user-namespace UID mismatch). A property file that is merely absent at its default location stays quiet, as does the Docker image's built-in `-Dmockserver.propertyFile=/config/mockserver.properties`, which the entrypoint always passes and which therefore expresses no intent — otherwise every container started without a mounted config would warn. Inside the image, only `MOCKSERVER_PROPERTY_FILE` can express that intent, and it does. - **The `mockserver-node` launcher suite no longer fails intermittently on a TLS handshake reset.** The two tests that exercise `jvmOptions` did so over HTTPS against a server started with `dynamicallyCreateCertificateAuthorityCertificate=true`, and issued that HTTPS request as soon as `start_mockserver` resolved. `start_mockserver` only proves the HTTP control plane is answering — it polls `PUT /mockserver/retrieve` over plain HTTP — but with a dynamically created certificate authority the server still has to generate a CA key pair and a leaf certificate before it can serve TLS on that same (port-unified) port. A handshake arriving in that window was closed mid-negotiation and surfaced as `ECONNRESET` "Client network socket disconnected before secure TLS connection was established", failing whichever of the two tests lost the race. This accounted for every `mockserver-node` failure on `master` over the preceding 40 builds (5 of 40, \~12%), so it was the sole cause of the pipeline's intermittent red. Both tests now wait for an actual TLS handshake to complete before asserting, which gates them on the condition they really depend on rather than retrying the assertions. The new `waitForTlsReady` helper is verified to reject — not resolve — both when nothing is listening and when a listener accepts the TCP connection then destroys it mid-handshake, which is exactly the failure signature it exists to absorb. The readiness budget is deliberately generous (120s): waiting costs nothing when the server is healthy, since a ready server completes the handshake on the first attempt in milliseconds, so the limit only decides how much CI contention is tolerated before a slow start is misreported as a fault. An earlier 30s budget went green five builds running and then expired on a loaded agent — the same flake wearing a clearer error message. A start that takes over 5s is now reported even when it passes, because readiness creeping towards the limit is the signal that the next run will not make it. - **`archiver.glob()` works again in `@mockserver/testcontainers` (Node), and CVE-2026-14257 stays closed.** The previous remedy for the `brace-expansion` denial of service (GHSA-mh99-v99m-4gvg, patched only in 5.0.8) was a blanket `"brace-expansion": "^5.0.8"` override. That resolved the whole tree to a single hoisted 5.0.8 and `npm audit` reported zero vulnerabilities — but 5.x changed the CommonJS export from a callable function to an object (`{ expand, EXPANSION_MAX, ... }`), while the minimatch copies actually installed (3.1.5, 5.1.9, 9.0.9) all call it as `expand(pattern)`. Every glob containing a brace therefore threw `TypeError: expand is not a function`, crashing `archiver.glob()`. The blast radius is narrower than it first looks — `testcontainers` copies files with `archiver.directory()`/`.append()`, which pass no brace pattern and still work — so what broke is brace globbing for anything in this module's runtime tree that does use it. The failure was invisible because minimatch short-circuits patterns with no `{`, so plain globs kept working and the unit suite stayed green. The override is now targeted: `readdir-glob` and `archiver-utils`' `glob` take `minimatch@^10.2.5`, which depends on `brace-expansion@^5.0.5` and is written against the new API, so both runtime copies land on the patched 5.0.8 with a matching minimatch. jest keeps its own `minimatch@3.1.5` + `brace-expansion@1.1.16` pairing and is untouched. `npm audit --omit=dev` still reports 0 vulnerabilities, and a new `dependency-integrity` unit test drives a brace pattern through both runtime minimatch copies and through a real `archiver.glob()` tar, plus asserts expansion stays bounded — it fails against the blanket override, so the silent half of this cannot return. - **A forward `responseOverride` that replaces the body no longer inherits the upstream response's `Content-Length`, which truncated the response on the wire.** The override swapped the body but left the upstream header in place, so the client read only as many bytes as the body it replaced — a 34-byte override behind an upstream `Content-Length: 13` arrived as 13 bytes — or hung waiting for bytes that never came. The stale header is now dropped so the encoder recomputes it from what is actually written; a `Content-Length` set by the override itself, and `connectionOptions.contentLengthHeaderOverride`, are still honoured, and a header-only override (one that sets no body) is untouched. This affects every body override, and it was the remaining reason a `FILE` response body returned from a `responseOverride` still reached the client wrong after [#​2450](https://redirect.github.com/mock-server/mockserver-monorepo/issues/2450): the file was materialised correctly and then cut short by the stale length. Covered by a Netty integration test that drives a real forward-with-override through a real upstream and asserts the bytes the client receives. - **The JetBrains plugin's LLM tool window now sends a valid expectation ([#​2455](https://redirect.github.com/mock-server/mockserver-monorepo/issues/2455)).** "Load into Server" was rejected with `400 incorrect expectation json format` because the builder emitted a shape that never existed on the server: a flat `completion` string, a top-level `finishReason`, `stream`, and `usage`, and a `provider` of `OPEN_AI`. The completion text, streaming flag, stop reason, and token usage belong INSIDE the `completion` object (`text`, `streaming`, `stopReason`, `usage.inputTokens` / `usage.outputTokens`), and providers are the `Provider` enum names (`OPENAI`, `AZURE_OPENAI`, …). The provider and field catalogues shared with the VS Code extension are corrected the same way — they offered `OPEN_AI`, `VERTEX_AI`, `messages`, `stream`, `finishReason` and a top-level `usage`, none of which the server accepts — and completion inside a `completion` object now offers the nested fields. The plugin has always bundled the correct schema; it simply never validated its own output against it, and the previous tests asserted the builder matched the same invented shape it produced. Both editors now validate against the bundled schema in their test suites. - **`httpLlmResponse.provider` now accepts every provider MockServer implements.** The JSON Schema enum listed 9 of the 14 `org.mockserver.model.Provider` constants, so `MISTRAL`, `XAI`, `DEEPSEEK`, `GROQ`, and `OPENROUTER` were rejected with `400 incorrect expectation json format` even though each has a fully registered response codec. The five missing values are added to the core schema, the generated VS Code and JetBrains schemas, and both copies of the OpenAPI specification, and a new parity test fails if the enum and `Provider` ever diverge again in either direction. The provider list on the LLM response mocking documentation and in the Rust client's field docs is updated to match. - **The cloud blob-store, async-broker and transparent-proxy CI steps no longer OOM-kill their own build before any test runs.** Each ran its Docker container with `--memory=4g`, but `mockserver/.mvn/jvm.config` pins the Maven JVM to `-Xmx6144m` and the wrapper prepends it to `MAVEN_OPTS`, so the `-am` dependency build was permitted a 6 GB heap inside a 4 GB cgroup and the kernel intermittently killed it with exit 137 — losing the very coverage those fail-closed steps exist to guarantee. Raised each to `--memory=7g`, the value every other `./mvnw` step already uses and which fits the single-agent `c5.2xlarge`/`m5.2xlarge` default-queue instances with margin. ##### Added - **A cassette is now auto-registered when a fixture is loaded or recorded via the MCP tools, so it appears under `GET /mockserver/cassettes` without a separate `PUT /mockserver/cassettes` call.** Previously the server-side cassette registry was populated only by an explicit `PUT /mockserver/cassettes`, so a fixture loaded with the `load_expectations_from_file` MCP tool, or written with `record_llm_fixtures`, never showed up in the dashboard's Cassettes tab unless the caller also registered it by hand. Both MCP tool handlers now register the fixture in `CassetteRegistry` at the point the file is loaded/written — the file path as the key, the loaded/ written expectation count, and an `origin` of `loaded` or `recorded` respectively — so `GET /mockserver/cassettes` (which serialises that registry) lists it automatically. Re-loading or re-recording the same path updates the existing entry in place rather than duplicating it. - **Clustered (Infinispan) expectation reload-on-startup is now proven end-to-end.** A new test (`ClusteredExpectationPersistenceReloadTest` in `mockserver-state-infinispan`) forms an in-JVM JGroups cluster consisting of a bare "fleet keeper" `InfinispanStateBackend` that stays up for the whole test plus a full MockServer node started with `stateBackend=infinispan`, `clusterEnabled=true` and `persistExpectations=true`. An expectation is created on that node over the wire, the persisted document is polled for through the *keeper's* backend (proving it really replicated across the REPL\_SYNC blob cache), the node is then stopped completely, and a fresh node is started against the same cluster and the same `persistedExpectationsPath` — which must restore the expectation and MATCH a real HTTP request with it. The local persisted file is asserted to be empty first, so the restore cannot be coming from the filesystem-initializer route. The reload path in `ExpectationFileSystemPersistence` was already covered at unit level in `mockserver-core` (`ExpectationBlobStoreRestoreTest`, against an `InMemoryBlobStore`, with no server and no cluster) and end-to-end only against S3/MinIO behind a Docker gate; what no test proved is that a clustered node's `InfinispanBlobStore` is the store `HttpState` wires into that restore, nor that a real restarted member of a live cluster recovers the fleet's shared expectations. A second test sets `blobStoreRestoreTimeoutSeconds=0` (the documented way to skip the restore) and asserts the fresh node does NOT serve the expectation, which permanently pins the fact that no other mechanism — JGroups state transfer of the expectations cache, a stray invalidation event, or the local file — restores expectations when a node starts. Verified by a positive control: disabling the reload path in production makes the restarted node answer with an empty body and turns the test red. - **The response-aware arm of the eviction false-green guard is now proven end-to-end over HTTP.** A new Netty integration test (`EvictedResponseVerificationIntegrationTest`) boots a real server with `maxLogEntries=2` and `failVerificationOnEvictedLog=true`, registers an expectation so a `GET /was-responded` exchange is recorded as a real `EXPECTATION_RESPONSE` request-response pair, then floods the bounded event log with further unmatched traffic so that pair is evicted. A subsequent `verify(request("/was-responded"), response().withStatusCode(418), never())` through the Java client must throw an `AssertionError` saying the **response** "could not be verified" because entries were discarded after reaching `maxLogEntries`. `MockServerEventLog` implements this guard twice — once in `verifyRequest` and once, through a completely separate counting path over recorded pairs, in `verifyResponse` — and only the request arm had an `*IntegrationTest`; the response arm was covered solely by an engine-level test against an in-process event log. The test uses `never()` because it is the simplest shape that reaches the guard: the guard sits on the PASS branch behind any asserted upper bound (`getAtMost() != -1` — so `atMost(n)`, `between(0,n)` and `exactly(0)` reach it too), whereas an `atLeast(1)`/`once()` verification of an evicted pair fails earlier with an ordinary "Response not found" message and proves nothing. `never()` is exactly the case a guard-less server would answer with a silent false green. The assertion pins the message to `Response could not be verified` so it cannot be satisfied by the request-side arm. Verified by a positive control (disabling only the response-side guard in production makes the verification pass silently and turns the test red). - **The eviction false-green guard is now proven end-to-end over HTTP.** A new Netty integration test (`EvictedLogVerificationIntegrationTest`) boots a real server with `maxLogEntries=2` and `failVerificationOnEvictedLog=true`, records a `GET /was-called` request, then floods the bounded request-log ring with further traffic so the `/was-called` entry is evicted. A subsequent `verify(request("/was-called"), never())` through the Java client must throw an `AssertionError` whose message says the log "could not be verified" because entries were discarded after reaching `maxLogEntries` — proving the guard refuses to certify absence it can no longer see, rather than silently passing. Previously the guard was only covered by an engine-level test against an in-process `MockServerEventLog` and no `*IntegrationTest` exercised it across the wire. Verified by a positive control (disabling the guard in production makes `verify(never())` pass silently and turns the test red). - **Custom gRPC response metadata and trailing metadata are now proven against a real `grpc-java` client.** Two new tests in `GrpcUnaryClientIntegrationTest` register an expectation whose gRPC response carries both custom response metadata authored with `withHeader(...)` and custom trailing metadata authored with `withTrailer(...)`, drive it with a live `grpc-java` client, and read the values back off the real `io.grpc.Metadata` objects the client receives (via a capturing `ClientInterceptor`, and via `StatusRuntimeException.getTrailers()` on the error path). The assertions are deliberately discriminating: the response metadata must arrive in the *initial headers* and not in the trailers, the trailing metadata must arrive in the *trailers* and not be folded into the initial headers, and both values must round-trip byte-for-byte including a value carrying `=`, `;`, `,` and spaces. Previously this behaviour was exercised only structurally (`EmbeddedChannel` / model-level assertions, which cannot tell a trailer emitted as a trailer from one folded into the headers) and by the existing `-bin` metadata tests, which deliberately accept the value from either side because a body-less unary response may legitimately collapse to Trailers-Only. Verified by positive controls: dropping the user-authored trailers turns both tests red, and dropping the user-authored response headers turns the header assertion red. - **The `maxResponseBodySize` limit is now proven behaviourally against a real upstream.** A new integration test (`MaxResponseBodySizeIntegrationTest`) boots a forwarding MockServer configured with a 4KB `maxResponseBodySize`, points it at a raw upstream socket that returns a 64KB body, and drives it over a plain client socket: the oversized body fails the forward and the client receives **502 Bad Gateway** with none of the payload relayed, while a control request whose body sits under the limit is forwarded intact. A third case repeats the oversized body with `Transfer-Encoding: chunked` and no `Content-Length`, proving the cap is enforced against the bytes actually accumulated by the forward client's aggregator rather than merely against a declared header. Previously this documented, memory-protecting bound — read whenever a forward-client pipeline is built — had no behavioural coverage at all, so a regression that dropped the wiring (or passed an unbounded value) would have removed the limit silently; only the inbound analogue `maxRequestBodySize` was verified. The new test covers the HTTP/1.1 forward aggregator; the HTTP/2 forward path reads the same property (for the per-stream aggregator and to derive the client's `maxFrameSize`) and remains uncovered. `maxResponseBodySize` accordingly moves from `ENFORCEMENT_EXEMPT` to `ENFORCEMENT_VERIFIED` in `ConfigurationEnforcementClassificationTest`. Verified by a positive control (restoring an unbounded aggregator lets the oversized body through with a 200 and turns both over-limit assertions red). - **The Ruby client now proves live SSE stream consumption over the wire.** New integration examples (`spec/integration_spec.rb` → `SSE streaming`) register an `httpSseResponse` expectation via the Ruby client against a running MockServer, then open a real streaming HTTP consumer and assert every `data:` frame arrives in order, that the reconstructed multi-delta message matches, and that a multi-line `data:` payload survives the framing intact (`Content-Type: text/event-stream`). Previously the Ruby suite only asserted the JSON keys of a built streaming expectation (`a2a_spec`) and never consumed a live SSE stream, so a silent server-emission or client-parsing drop would have gone uncaught. Verified by a positive control (dropping events from the emitted stream turns the received-frames assertion red). - **The `assumeAllRequestsAreHttp` protocol-detection fallback now has direct unit coverage.** Two paired `EmbeddedChannel` tests in `DirectProxyUnificationHandlerTest` drive `PortUnificationHandler.decode()` with an HTTP request using a non-standard method (`PURGE`, which is not one of GET/POST/PUT/HEAD/OPTIONS/PATCH/DELETE/TRACE/CONNECT): with `assumeAllRequestsAreHttp=true` the full HTTP pipeline is added (rather than falling to binary request proxying), and with the flag disabled the HTTP codec is not added — proving the flag is the only difference. Previously the fallback branch was exercised only by a live-socket integration test and the config getter's own unit test, so the `EmbeddedChannel` protocol-detection path for the flag was unexercised. - **HTTP/3 streaming response bodies are now proven end-to-end through the action pipeline with a real QUIC client.** A new integration test (`Http3StreamingForwardIntegrationTest`) registers a `forward` expectation on the HTTP/3 port (with `streamingResponsesEnabled`) pointing at an upstream Server-Sent Events stream that serves an early event immediately and withholds the late event for 1.5s, then drives it with a live Netty QUIC client and asserts both events arrive as SEPARATE DATA frames spread across that delay — proving the streaming relay funnels through `HttpActionHandler` -> `ResponseWriter.writeResponse` -> `Http3ResponseWriter.writeStreamingResponse` and emits chunks incrementally. Previously `Http3StreamingIntegrationTest` drove `Http3ResponseWriter` directly from a hand-built QUIC server (bypassing expectation matching), and `Http3MockingMatrixIntegrationTest` exercised the real pipeline over QUIC but only with non-streaming actions, so incremental delivery of a streamed body through the full pipeline was untested. QUIC-gated like the sibling HTTP/3 tests so it skips cleanly where the native transport is unavailable. - **The dashboard's Monaco code editor is now proven in a real browser end-to-end.** A new Playwright e2e test (`mockserver-ui/e2e/dashboard.spec.ts`) drives the actual bundled Monaco editor in the served dashboard's composer against a live MockServer: it asserts Monaco's own DOM (`.monaco-editor` / `.view-lines`) renders, authors a JSON response body via real editor input, raises and clears a live validation marker from Monaco's JSON language web worker, then registers the mock and confirms the Monaco-authored body round-trips to the server (present in `PUT /mockserver/retrieve` and served verbatim on the matching request). Previously the 178 jsdom/vitest specs globally replaced Monaco with a bare ` + ``` Biome now prints the content of these elements exactly as it appears in the source, matching the existing behavior for `
`.

- [#​11194](https://redirect.github.com/biomejs/biome/pull/11194)
[`abfbb11`](https://redirect.github.com/biomejs/biome/commit/abfbb11da260852f0b4aa15f36207314ccfae436)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed the
HTML formatter refusing to format a Svelte file containing an array
pattern that skips a position:

  ```svelte
  {#each animals as [, value]}
  	

{value}

{/each} ``` - [#​10094](https://redirect.github.com/biomejs/biome/pull/10094) [`e007143`](https://redirect.github.com/biomejs/biome/commit/e00714360807115210e549caca0f235431ca9a8a) Thanks [@​THEjacob1000](https://redirect.github.com/THEjacob1000)! - Fixed [`useSortedClasses`](https://biomejs.dev/linter/rules/use-sorted-classes/) to correctly detect unsorted classes in static member expression tagged templates (e.g. `tw.div\`...\`\`). Previously, these were silently skipped due to surrounding whitespace trivia not being stripped from the tag name. - [#​11078](https://redirect.github.com/biomejs/biome/pull/11078) [`10da30e`](https://redirect.github.com/biomejs/biome/commit/10da30e0013c35fe2f4d3e335b88a539ae6eb87a) Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed Vue single-file components failing to parse when they contain a custom block such as `` or ``, or a `