diff --git a/.github/scripts/sync-api-diffs.sh b/.github/scripts/sync-api-diffs.sh index 34fe18ff55..08a294da03 100755 --- a/.github/scripts/sync-api-diffs.sh +++ b/.github/scripts/sync-api-diffs.sh @@ -31,8 +31,15 @@ mkdir -p "$out_dir" for report in "${reports[@]}"; do # report path: //target/japicmp/api-diff.diff module="$(basename "$(dirname "$(dirname "$(dirname "$report")")")")" + # Japicmp emits a trailing blank line, which flint rejects in committed reports. grep -vE '^(WARNING: You are using the option|Semantic versioning suggestion)' \ - "$report" >"$out_dir/$module.txt" + "$report" | awk ' + NF { last = NR } + { lines[NR] = $0 } + END { + for (i = 1; i <= last; i++) print lines[i] + } + ' >"$out_dir/$module.txt" done echo "Wrote ${#reports[@]} API diff report(s) to docs/apidiffs/current_vs_latest/." diff --git a/docs/apidiffs/current_vs_latest/prometheus-metrics-core.txt b/docs/apidiffs/current_vs_latest/prometheus-metrics-core.txt index f417d99060..c6a2dca67f 100644 --- a/docs/apidiffs/current_vs_latest/prometheus-metrics-core.txt +++ b/docs/apidiffs/current_vs_latest/prometheus-metrics-core.txt @@ -1,2 +1,5 @@ Comparing source compatibility of prometheus-metrics-core-1.10.1-SNAPSHOT.jar against prometheus-metrics-core-1.10.0.jar -No changes. ++++ NEW CLASS: PUBLIC(+) FINAL(+) io.prometheus.metrics.core.PrometheusMetricsVersion (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW METHOD: PUBLIC(+) STATIC(+) java.lang.String getVersion() diff --git a/docs/content/getting-started/quickstart.md b/docs/content/getting-started/quickstart.md index 635c63be06..18de2de208 100644 --- a/docs/content/getting-started/quickstart.md +++ b/docs/content/getting-started/quickstart.md @@ -211,3 +211,15 @@ scrape_configs: static_configs: - targets: ["localhost:9400"] ``` + +## Library version + +Get the Maven version of the Prometheus Java Metrics Library's core artifact with +`PrometheusMetricsVersion.getVersion()`: + +```java +String version = io.prometheus.metrics.core.PrometheusMetricsVersion.getVersion(); +``` + +The result matches the `prometheus-metrics-core` artifact version, including a `-SNAPSHOT` suffix +when present. It is not the Prometheus server version. diff --git a/prometheus-metrics-core/pom.xml b/prometheus-metrics-core/pom.xml index 4cfdfcce49..8833613c7b 100644 --- a/prometheus-metrics-core/pom.xml +++ b/prometheus-metrics-core/pom.xml @@ -72,6 +72,53 @@ + + maven-resources-plugin + + + generate-version-class + generate-sources + + copy-resources + + + ${project.build.directory}/generated-sources/version + + + src/main/version-template + true + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-version-source + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/version + + + + + + + maven-surefire-plugin + + + ${project.version} + + + org.apache.felix maven-bundle-plugin diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/PrometheusMetricsVersion.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/PrometheusMetricsVersion.java new file mode 100644 index 0000000000..28072f9b69 --- /dev/null +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/PrometheusMetricsVersion.java @@ -0,0 +1,20 @@ +package io.prometheus.metrics.core; + +import io.prometheus.metrics.annotations.StableApi; + +/** Provides the version of the Prometheus Java Metrics Library. */ +@StableApi +public final class PrometheusMetricsVersion { + + private PrometheusMetricsVersion() {} + + /** + * Returns the Maven version of the {@code prometheus-metrics-core} artifact containing this + * class. + * + * @return the artifact version, including any suffix such as {@code -SNAPSHOT} + */ + public static String getVersion() { + return VersionInfo.VERSION; + } +} diff --git a/prometheus-metrics-core/src/main/version-template/io/prometheus/metrics/core/VersionInfo.java b/prometheus-metrics-core/src/main/version-template/io/prometheus/metrics/core/VersionInfo.java new file mode 100644 index 0000000000..ec4f5dbfd3 --- /dev/null +++ b/prometheus-metrics-core/src/main/version-template/io/prometheus/metrics/core/VersionInfo.java @@ -0,0 +1,9 @@ +package io.prometheus.metrics.core; + +/** Generated version metadata. */ +final class VersionInfo { + + static final String VERSION = "${project.version}"; + + private VersionInfo() {} +} diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/PrometheusMetricsVersionTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/PrometheusMetricsVersionTest.java new file mode 100644 index 0000000000..861a6302a1 --- /dev/null +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/PrometheusMetricsVersionTest.java @@ -0,0 +1,16 @@ +package io.prometheus.metrics.core; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class PrometheusMetricsVersionTest { + + @Test + void versionMatchesMavenProjectVersion() { + String version = PrometheusMetricsVersion.getVersion(); + + assertThat(version).isEqualTo(System.getProperty("prometheus.metrics.core.version")); + assertThat(version).isNotBlank().doesNotContain("${", "}"); + } +}