From 7a0431fe430b05e6818badf28759c75fabee1513 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 1 Jun 2026 14:25:18 +0000 Subject: [PATCH 1/6] test: validate JMX Exporter compatibility Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 5 + .../workflows/jmx-exporter-compatibility.yml | 39 ++++++ .mise/lib/jmx_exporter_compat.py | 121 ++++++++++++++++++ .mise/tasks/jmx-exporter/prepare.py | 21 +++ .mise/tasks/jmx-exporter/test.py | 26 ++++ .mise/tasks/micrometer/test-class.py | 28 ---- 6 files changed, 212 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/jmx-exporter-compatibility.yml create mode 100755 .mise/lib/jmx_exporter_compat.py create mode 100755 .mise/tasks/jmx-exporter/prepare.py create mode 100755 .mise/tasks/jmx-exporter/test.py delete mode 100755 .mise/tasks/micrometer/test-class.py diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index 412a82a33..d5dd92dc6 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -36,6 +36,11 @@ "mise" ] }, + ".github/workflows/jmx-exporter-compatibility.yml": { + "regex": [ + "mise" + ] + }, ".github/workflows/lint.yml": { "regex": [ "mise" diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml new file mode 100644 index 000000000..da4ef39d9 --- /dev/null +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -0,0 +1,39 @@ +--- +name: JMX Exporter Compatibility + +on: + pull_request: + workflow_dispatch: + inputs: + repository: + description: JMX Exporter repository to test, in owner/name form + required: false + default: prometheus/jmx_exporter + ref: + description: JMX Exporter branch, tag, or commit to test + required: false + default: main + +permissions: {} + +jobs: + jmx-exporter-compatibility: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + persist-credentials: false + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1 + with: + version: v2026.5.18 + sha256: cfac593469d028d7ae5fe36e37bd7c59118b5238e92d8a876209578464f24a84 + - name: Cache local Maven repository + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Run JMX Exporter compatibility tests + env: + JMX_EXPORTER_REPOSITORY: ${{ inputs.repository || 'prometheus/jmx_exporter' }} + JMX_EXPORTER_REF: ${{ inputs.ref || 'main' }} + run: mise run jmx-exporter:test diff --git a/.mise/lib/jmx_exporter_compat.py b/.mise/lib/jmx_exporter_compat.py new file mode 100755 index 000000000..df772227d --- /dev/null +++ b/.mise/lib/jmx_exporter_compat.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import os +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") +) +DEFAULT_JMX_EXPORTER_REPOSITORY = os.environ.get( + "JMX_EXPORTER_REPOSITORY", "prometheus/jmx_exporter" +) +DEFAULT_JMX_EXPORTER_REMOTE = os.environ.get("JMX_EXPORTER_REMOTE", "origin") +DEFAULT_JMX_EXPORTER_REF = os.environ.get("JMX_EXPORTER_REF", "main") +DEFAULT_MAVEN_MODULES = os.environ.get( + "JMX_EXPORTER_MAVEN_MODULES", + "jmx_prometheus_common,jmx_prometheus_javaagent,jmx_prometheus_standalone", +) +DEFAULT_PROM_VERSION = os.environ.get("PROM_VERSION") + + +def run_cmd(cmd: list[str], cwd: Optional[Path] = None) -> None: + subprocess.run(cmd, cwd=cwd, check=True) + + +def jmx_exporter_repository_url(repository: str) -> str: + return f"https://github.com/{repository}.git" + + +def check_clean_worktree(jmx_exporter_dir: Path) -> None: + result = subprocess.run( + ["git", "status", "--short"], + cwd=jmx_exporter_dir, + check=True, + capture_output=True, + text=True, + ) + if result.stdout.strip(): + raise RuntimeError( + f"{jmx_exporter_dir} has uncommitted changes; use a clean clone or set " + "JMX_EXPORTER_DIR" + ) + + +def get_prom_version(root_dir: Path = Path.cwd()) -> str: + configured_version = DEFAULT_PROM_VERSION + if configured_version: + return configured_version + pom = ET.parse(root_dir / "pom.xml") + root = pom.getroot() + version = root.findtext("./{*}version") + if not version: + version = root.findtext("./{*}parent/{*}version") + if not version: + raise RuntimeError("could not determine Prometheus version from pom.xml") + return version + + +def prepare_repo( + jmx_exporter_dir: Path = DEFAULT_JMX_EXPORTER_DIR, + repository: str = DEFAULT_JMX_EXPORTER_REPOSITORY, + remote: str = DEFAULT_JMX_EXPORTER_REMOTE, + ref: str = DEFAULT_JMX_EXPORTER_REF, +) -> None: + repository_url = jmx_exporter_repository_url(repository) + if (jmx_exporter_dir / ".git").is_dir(): + check_clean_worktree(jmx_exporter_dir) + run_cmd( + ["git", "remote", "set-url", remote, repository_url], + cwd=jmx_exporter_dir, + ) + run_cmd(["git", "fetch", remote, ref], cwd=jmx_exporter_dir) + else: + run_cmd(["git", "clone", repository_url, str(jmx_exporter_dir)]) + run_cmd(["git", "fetch", remote, ref], cwd=jmx_exporter_dir) + run_cmd( + ["git", "checkout", "-B", "jmx-exporter-compat", "FETCH_HEAD"], + cwd=jmx_exporter_dir, + ) + + +def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: + run_cmd( + [ + "./mvnw", + "install", + "-DskipTests", + "-Dcoverage.skip=true", + "-Dcheckstyle.skip=true", + "-Dwarnings=-nowarn", + ], + cwd=root_dir, + ) + + +def run_maven_test( + test_selector: Optional[str] = None, + jmx_exporter_dir: Path = DEFAULT_JMX_EXPORTER_DIR, + maven_modules: str = DEFAULT_MAVEN_MODULES, + prom_version: Optional[str] = None, +) -> None: + if prom_version is None: + prom_version = get_prom_version() + cmd = [ + "./mvnw", + "-B", + "-pl", + maven_modules, + "-am", + f"-Dprometheus.metrics.version={prom_version}", + "-Djacoco.skip=true", + ] + if test_selector: + cmd.append(f"-Dtest={test_selector}") + cmd.append("test") + run_cmd(cmd, cwd=jmx_exporter_dir) diff --git a/.mise/tasks/jmx-exporter/prepare.py b/.mise/tasks/jmx-exporter/prepare.py new file mode 100755 index 000000000..348415f7f --- /dev/null +++ b/.mise/tasks/jmx-exporter/prepare.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +# [MISE] description="Install local artifacts and check out a target JMX Exporter ref" +# [MISE] alias="jmx-exporter:prepare" + +import sys + + +sys.path.insert(0, ".mise/lib") + + +def main() -> int: + from jmx_exporter_compat import install_local_artifacts, prepare_repo + + install_local_artifacts() + prepare_repo() + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.mise/tasks/jmx-exporter/test.py b/.mise/tasks/jmx-exporter/test.py new file mode 100755 index 000000000..3e3989300 --- /dev/null +++ b/.mise/tasks/jmx-exporter/test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +# [MISE] description="Run JMX Exporter tests against a target ref" +# [MISE] alias="jmx-exporter:test" + +import sys + + +sys.path.insert(0, ".mise/lib") + + +def main() -> int: + from jmx_exporter_compat import ( + install_local_artifacts, + prepare_repo, + run_maven_test, + ) + + install_local_artifacts() + prepare_repo() + run_maven_test() + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.mise/tasks/micrometer/test-class.py b/.mise/tasks/micrometer/test-class.py deleted file mode 100755 index 89ae436de..000000000 --- a/.mise/tasks/micrometer/test-class.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 - -# [MISE] description="Run Micrometer PrometheusMeterRegistryTest against a target Micrometer ref" -# [MISE] alias="micrometer:test-class" - -import sys - - -sys.path.insert(0, ".mise/lib") - - -def main() -> int: - from micrometer_compat import ( - install_local_artifacts, - prepare_repo, - run_gradle_test, - write_init_script, - ) - - install_local_artifacts() - prepare_repo() - write_init_script() - run_gradle_test("io.micrometer.prometheusmetrics.PrometheusMeterRegistryTest") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) From 1388ac0d4e93ce858914fb60a311d32e37d11715 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 2 Jun 2026 08:36:15 +0000 Subject: [PATCH 2/6] test: pin jmx exporter compatibility ref Signed-off-by: Gregor Zeitlinger --- .github/renovate.json5 | 22 +++++++++++++++++-- .../workflows/jmx-exporter-compatibility.yml | 8 +++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 4284ec290..2588488f3 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -38,6 +38,24 @@ groupName: "protobuf", separateMajorMinor: false, }, + { + "description": "Flint autofix: align extractVersion for protoc", + "extractVersion": "^(?.+)\\.0\\.0$", + "matchDepNames": [ + "protoc" + ] + } + ], + customManagers: [ + { + customType: "regex", + managerFilePatterns: ["/^\\.github\\/workflows\\/jmx-exporter-compatibility\\.yml$/"], + matchStrings: [ + "DEFAULT_JMX_EXPORTER_REF:\\s*(?\\S+)", + ], + datasourceTemplate: "github-tags", + depNameTemplate: "prometheus/jmx_exporter", + versioningTemplate: "semver-coerced", + }, ], - customManagers: [], -} +} \ No newline at end of file diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index da4ef39d9..dc330d55d 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -12,10 +12,14 @@ on: ref: description: JMX Exporter branch, tag, or commit to test required: false - default: main + default: 1.5.0 permissions: {} +env: + # renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced + DEFAULT_JMX_EXPORTER_REF: 1.5.0 + jobs: jmx-exporter-compatibility: runs-on: ubuntu-24.04 @@ -35,5 +39,5 @@ jobs: - name: Run JMX Exporter compatibility tests env: JMX_EXPORTER_REPOSITORY: ${{ inputs.repository || 'prometheus/jmx_exporter' }} - JMX_EXPORTER_REF: ${{ inputs.ref || 'main' }} + JMX_EXPORTER_REF: ${{ inputs.ref || env.DEFAULT_JMX_EXPORTER_REF }} run: mise run jmx-exporter:test From 3f96463f24a4a34a35902659474d081ebf96dd41 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 2 Jun 2026 10:56:34 +0200 Subject: [PATCH 3/6] add micrometer pinning too Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 4 ++++ .github/renovate.json5 | 16 +++++++++++++--- .github/workflows/jmx-exporter-compatibility.yml | 9 ++------- .github/workflows/micrometer-compatibility.yml | 7 +++---- .mise/lib/jmx_exporter_compat.py | 6 +++++- .mise/lib/micrometer_compat.py | 6 +++++- mise.toml | 4 ++++ 7 files changed, 36 insertions(+), 16 deletions(-) diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index d5dd92dc6..78b2a9654 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -145,6 +145,10 @@ "taplo", "typos", "zizmor" + ], + "regex": [ + "micrometer-metrics/micrometer", + "prometheus/jmx_exporter" ] }, "mvnw": { diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 2588488f3..28d39ba87 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -49,13 +49,23 @@ customManagers: [ { customType: "regex", - managerFilePatterns: ["/^\\.github\\/workflows\\/jmx-exporter-compatibility\\.yml$/"], + managerFilePatterns: ["/^mise\\.toml$/"], matchStrings: [ - "DEFAULT_JMX_EXPORTER_REF:\\s*(?\\S+)", + "DEFAULT_JMX_EXPORTER_REF\\s*=\\s*\"(?\\S+)\"", ], datasourceTemplate: "github-tags", depNameTemplate: "prometheus/jmx_exporter", versioningTemplate: "semver-coerced", }, + { + customType: "regex", + managerFilePatterns: ["/^mise\\.toml$/"], + matchStrings: [ + "DEFAULT_MICROMETER_REF\\s*=\\s*\"(?\\S+)\"", + ], + datasourceTemplate: "github-tags", + depNameTemplate: "micrometer-metrics/micrometer", + versioningTemplate: "semver-coerced", + }, ], -} \ No newline at end of file +} diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index dc330d55d..854848c48 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -11,15 +11,10 @@ on: default: prometheus/jmx_exporter ref: description: JMX Exporter branch, tag, or commit to test - required: false - default: 1.5.0 + required: true permissions: {} -env: - # renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced - DEFAULT_JMX_EXPORTER_REF: 1.5.0 - jobs: jmx-exporter-compatibility: runs-on: ubuntu-24.04 @@ -39,5 +34,5 @@ jobs: - name: Run JMX Exporter compatibility tests env: JMX_EXPORTER_REPOSITORY: ${{ inputs.repository || 'prometheus/jmx_exporter' }} - JMX_EXPORTER_REF: ${{ inputs.ref || env.DEFAULT_JMX_EXPORTER_REF }} + JMX_EXPORTER_REF: ${{ inputs.ref }} run: mise run jmx-exporter:test diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index ebbf1f10c..17f13a437 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -11,8 +11,7 @@ on: default: micrometer-metrics/micrometer micrometer-ref: description: Micrometer branch, tag, or commit to test - required: false - default: main + required: true permissions: {} @@ -34,6 +33,6 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - name: Run Micrometer compatibility tests env: - MICROMETER_REPOSITORY: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.micrometer-repository || 'micrometer-metrics/micrometer' }} - MICROMETER_REF: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.micrometer-ref || 'main' }} + MICROMETER_REPOSITORY: ${{ inputs.micrometer-repository || 'micrometer-metrics/micrometer' }} + MICROMETER_REF: ${{ inputs.micrometer-ref }} run: mise run micrometer:test diff --git a/.mise/lib/jmx_exporter_compat.py b/.mise/lib/jmx_exporter_compat.py index df772227d..9f92dcf8c 100755 --- a/.mise/lib/jmx_exporter_compat.py +++ b/.mise/lib/jmx_exporter_compat.py @@ -16,7 +16,11 @@ "JMX_EXPORTER_REPOSITORY", "prometheus/jmx_exporter" ) DEFAULT_JMX_EXPORTER_REMOTE = os.environ.get("JMX_EXPORTER_REMOTE", "origin") -DEFAULT_JMX_EXPORTER_REF = os.environ.get("JMX_EXPORTER_REF", "main") +DEFAULT_JMX_EXPORTER_REF = ( + os.environ.get("JMX_EXPORTER_REF") + or os.environ.get("DEFAULT_JMX_EXPORTER_REF") + or "main" +) DEFAULT_MAVEN_MODULES = os.environ.get( "JMX_EXPORTER_MAVEN_MODULES", "jmx_prometheus_common,jmx_prometheus_javaagent,jmx_prometheus_standalone", diff --git a/.mise/lib/micrometer_compat.py b/.mise/lib/micrometer_compat.py index 808a6f91f..2e8e5cd39 100755 --- a/.mise/lib/micrometer_compat.py +++ b/.mise/lib/micrometer_compat.py @@ -16,7 +16,11 @@ "MICROMETER_REPOSITORY", "micrometer-metrics/micrometer" ) DEFAULT_MICROMETER_REMOTE = os.environ.get("MICROMETER_REMOTE", "origin") -DEFAULT_MICROMETER_REF = os.environ.get("MICROMETER_REF", "main") +DEFAULT_MICROMETER_REF = ( + os.environ.get("MICROMETER_REF") + or os.environ.get("DEFAULT_MICROMETER_REF") + or "main" +) DEFAULT_INIT_SCRIPT = Path( os.environ.get("MICROMETER_INIT_SCRIPT", "/tmp/micrometer-prom-local.init.gradle") ) diff --git a/mise.toml b/mise.toml index 973ef10a8..7da3815aa 100644 --- a/mise.toml +++ b/mise.toml @@ -27,6 +27,10 @@ zizmor = "1.25.2" FLINT_CONFIG_DIR = ".github/config" # renovate: datasource=github-releases depName=grafana/docker-otel-lgtm LGTM_VERSION = "0.25.0" +# renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced +DEFAULT_JMX_EXPORTER_REF = "1.5.0" +# renovate: datasource=github-tags depName=micrometer-metrics/micrometer versioning=semver-coerced +DEFAULT_MICROMETER_REF = "v1.16.5" [tasks.ci] description = "CI Build" From 5cfadd328096a8b23ed11ff4727f36d1b2f00644 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 2 Jun 2026 11:11:05 +0200 Subject: [PATCH 4/6] add micrometer pinning too Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 1 + .github/renovate.json5 | 35 +++++++----------------------- .mise/lib/jmx_exporter_compat.py | 2 +- .mise/lib/micrometer_compat.py | 2 +- mise.toml | 4 ++-- 5 files changed, 13 insertions(+), 31 deletions(-) diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index 78b2a9654..92ee780db 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -147,6 +147,7 @@ "zizmor" ], "regex": [ + "grafana/docker-otel-lgtm", "micrometer-metrics/micrometer", "prometheus/jmx_exporter" ] diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 28d39ba87..e7de6a019 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -37,35 +37,16 @@ matchDepNames: ["com.google.protobuf:protobuf-java", "protoc"], groupName: "protobuf", separateMajorMinor: false, - }, - { - "description": "Flint autofix: align extractVersion for protoc", - "extractVersion": "^(?.+)\\.0\\.0$", - "matchDepNames": [ - "protoc" - ] } ], customManagers: [ - { - customType: "regex", - managerFilePatterns: ["/^mise\\.toml$/"], - matchStrings: [ - "DEFAULT_JMX_EXPORTER_REF\\s*=\\s*\"(?\\S+)\"", - ], - datasourceTemplate: "github-tags", - depNameTemplate: "prometheus/jmx_exporter", - versioningTemplate: "semver-coerced", - }, - { - customType: "regex", - managerFilePatterns: ["/^mise\\.toml$/"], - matchStrings: [ - "DEFAULT_MICROMETER_REF\\s*=\\s*\"(?\\S+)\"", - ], - datasourceTemplate: "github-tags", - depNameTemplate: "micrometer-metrics/micrometer", - versioningTemplate: "semver-coerced", - }, + { + "customType": "regex", + "description": "update _VERSION variables in mise.toml", + "managerFilePatterns": ["/^mise\\.toml$/"], + "matchStrings": [ + "# renovate: datasource=(?[a-z-]+?)(?: depName=(?.+?))?(?: packageName=(?.+?))?(?: versioning=(?[a-z-]+?))?\\s.+?_VERSION\\s*=\\s*\"?(?[^@\"]+?)(?:@(?sha256:[a-f0-9]+))?\"?\\s" + ] + }, ], } diff --git a/.mise/lib/jmx_exporter_compat.py b/.mise/lib/jmx_exporter_compat.py index 9f92dcf8c..0c24d810e 100755 --- a/.mise/lib/jmx_exporter_compat.py +++ b/.mise/lib/jmx_exporter_compat.py @@ -18,7 +18,7 @@ DEFAULT_JMX_EXPORTER_REMOTE = os.environ.get("JMX_EXPORTER_REMOTE", "origin") DEFAULT_JMX_EXPORTER_REF = ( os.environ.get("JMX_EXPORTER_REF") - or os.environ.get("DEFAULT_JMX_EXPORTER_REF") + or os.environ.get("DEFAULT_JMX_EXPORTER_VERSION") or "main" ) DEFAULT_MAVEN_MODULES = os.environ.get( diff --git a/.mise/lib/micrometer_compat.py b/.mise/lib/micrometer_compat.py index 2e8e5cd39..df545bf20 100755 --- a/.mise/lib/micrometer_compat.py +++ b/.mise/lib/micrometer_compat.py @@ -18,7 +18,7 @@ DEFAULT_MICROMETER_REMOTE = os.environ.get("MICROMETER_REMOTE", "origin") DEFAULT_MICROMETER_REF = ( os.environ.get("MICROMETER_REF") - or os.environ.get("DEFAULT_MICROMETER_REF") + or os.environ.get("DEFAULT_MICROMETER_VERSION") or "main" ) DEFAULT_INIT_SCRIPT = Path( diff --git a/mise.toml b/mise.toml index 7da3815aa..b33477fb1 100644 --- a/mise.toml +++ b/mise.toml @@ -28,9 +28,9 @@ FLINT_CONFIG_DIR = ".github/config" # renovate: datasource=github-releases depName=grafana/docker-otel-lgtm LGTM_VERSION = "0.25.0" # renovate: datasource=github-tags depName=prometheus/jmx_exporter versioning=semver-coerced -DEFAULT_JMX_EXPORTER_REF = "1.5.0" +DEFAULT_JMX_EXPORTER_VERSION = "1.5.0" # renovate: datasource=github-tags depName=micrometer-metrics/micrometer versioning=semver-coerced -DEFAULT_MICROMETER_REF = "v1.16.5" +DEFAULT_MICROMETER_VERSION = "v1.16.5" [tasks.ci] description = "CI Build" From fdefa699fa73f52483b996ff04a87745988dc520 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 2 Jun 2026 12:16:44 +0200 Subject: [PATCH 5/6] ci: build compatibility projects under a supported JDK The pinned JMX Exporter and Micrometer releases do not build on the primary JDK (Java 25): JMX Exporter's spotless google-java-format and Micrometer's bundled Kotlin compiler both predate JDK 25 support. Add per-environment mise configs (mirroring .mise/envs/native) that override the java tool to Temurin 21 LTS and run the existing compatibility drivers, and point the workflows at those envs. Signed-off-by: Gregor Zeitlinger --- .github/renovate-tracked-deps.json | 10 ++++++++++ .github/workflows/jmx-exporter-compatibility.yml | 4 +++- .github/workflows/micrometer-compatibility.yml | 4 +++- .mise/envs/jmx-exporter/mise.toml | 10 ++++++++++ .mise/envs/micrometer/mise.toml | 10 ++++++++++ 5 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 .mise/envs/jmx-exporter/mise.toml create mode 100644 .mise/envs/micrometer/mise.toml diff --git a/.github/renovate-tracked-deps.json b/.github/renovate-tracked-deps.json index 92ee780db..df48df60c 100644 --- a/.github/renovate-tracked-deps.json +++ b/.github/renovate-tracked-deps.json @@ -71,6 +71,16 @@ "mise" ] }, + ".mise/envs/jmx-exporter/mise.toml": { + "mise": [ + "java" + ] + }, + ".mise/envs/micrometer/mise.toml": { + "mise": [ + "java" + ] + }, ".mise/envs/native/mise.toml": { "mise": [ "java" diff --git a/.github/workflows/jmx-exporter-compatibility.yml b/.github/workflows/jmx-exporter-compatibility.yml index 854848c48..afdaed42d 100644 --- a/.github/workflows/jmx-exporter-compatibility.yml +++ b/.github/workflows/jmx-exporter-compatibility.yml @@ -26,13 +26,15 @@ jobs: with: version: v2026.5.18 sha256: cfac593469d028d7ae5fe36e37bd7c59118b5238e92d8a876209578464f24a84 + working_directory: .mise/envs/jmx-exporter - name: Cache local Maven repository uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - name: Run JMX Exporter compatibility tests + working-directory: .mise/envs/jmx-exporter env: JMX_EXPORTER_REPOSITORY: ${{ inputs.repository || 'prometheus/jmx_exporter' }} JMX_EXPORTER_REF: ${{ inputs.ref }} - run: mise run jmx-exporter:test + run: mise compat-test diff --git a/.github/workflows/micrometer-compatibility.yml b/.github/workflows/micrometer-compatibility.yml index 17f13a437..9ad95d807 100644 --- a/.github/workflows/micrometer-compatibility.yml +++ b/.github/workflows/micrometer-compatibility.yml @@ -26,13 +26,15 @@ jobs: with: version: v2026.5.18 sha256: cfac593469d028d7ae5fe36e37bd7c59118b5238e92d8a876209578464f24a84 + working_directory: .mise/envs/micrometer - name: Cache local Maven repository uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - name: Run Micrometer compatibility tests + working-directory: .mise/envs/micrometer env: MICROMETER_REPOSITORY: ${{ inputs.micrometer-repository || 'micrometer-metrics/micrometer' }} MICROMETER_REF: ${{ inputs.micrometer-ref }} - run: mise run micrometer:test + run: mise compat-test diff --git a/.mise/envs/jmx-exporter/mise.toml b/.mise/envs/jmx-exporter/mise.toml new file mode 100644 index 000000000..a04b4948c --- /dev/null +++ b/.mise/envs/jmx-exporter/mise.toml @@ -0,0 +1,10 @@ +# The pinned JMX Exporter release does not build on the primary JDK (Java 25): +# its spotless google-java-format predates JDK 25 support. Build it under an LTS +# JDK the release supports instead. +[tools] +java = "temurin-21.0.11+10.0.LTS" + +[tasks.compat-test] +description = "Run JMX Exporter compatibility tests under a supported JDK" +dir = "../../.." +run = "python3 .mise/tasks/jmx-exporter/test.py" diff --git a/.mise/envs/micrometer/mise.toml b/.mise/envs/micrometer/mise.toml new file mode 100644 index 000000000..e5318c1d6 --- /dev/null +++ b/.mise/envs/micrometer/mise.toml @@ -0,0 +1,10 @@ +# The pinned Micrometer release does not build on the primary JDK (Java 25): +# its bundled Kotlin compiler predates JDK 25 support. Build it under an LTS JDK +# the release supports instead. +[tools] +java = "temurin-21.0.11+10.0.LTS" + +[tasks.compat-test] +description = "Run Micrometer compatibility tests under a supported JDK" +dir = "../../.." +run = "python3 .mise/tasks/micrometer/test.py" From 019679b593b66dc61ebe7b18a44096523e8ed9a1 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 2 Jun 2026 12:32:02 +0200 Subject: [PATCH 6/6] ci: skip test compilation when installing local artifacts The compatibility builds run under an LTS JDK (Java 21), but our test sources target release 25 (test.java.version). -DskipTests still compiles test sources, so installing the local artifacts failed with 'release version 25 not supported'. Use -Dmaven.test.skip=true: downstream compatibility tests need only our main artifacts. Signed-off-by: Gregor Zeitlinger --- .mise/lib/jmx_exporter_compat.py | 5 ++++- .mise/lib/micrometer_compat.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.mise/lib/jmx_exporter_compat.py b/.mise/lib/jmx_exporter_compat.py index 0c24d810e..607f65aae 100755 --- a/.mise/lib/jmx_exporter_compat.py +++ b/.mise/lib/jmx_exporter_compat.py @@ -93,7 +93,10 @@ def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: [ "./mvnw", "install", - "-DskipTests", + # Skip test compilation too (not just execution): downstream needs only + # our main artifacts, and our test sources target a newer release than + # the compatibility JDK supports. + "-Dmaven.test.skip=true", "-Dcoverage.skip=true", "-Dcheckstyle.skip=true", "-Dwarnings=-nowarn", diff --git a/.mise/lib/micrometer_compat.py b/.mise/lib/micrometer_compat.py index df545bf20..93613c336 100755 --- a/.mise/lib/micrometer_compat.py +++ b/.mise/lib/micrometer_compat.py @@ -125,7 +125,10 @@ def install_local_artifacts(root_dir: Path = Path.cwd()) -> None: [ "./mvnw", "install", - "-DskipTests", + # Skip test compilation too (not just execution): downstream needs only + # our main artifacts, and our test sources target a newer release than + # the compatibility JDK supports. + "-Dmaven.test.skip=true", "-Dcoverage.skip=true", "-Dcheckstyle.skip=true", "-Dwarnings=-nowarn",