diff --git a/build.gradle b/build.gradle index 0beadef..ba7ccda 100644 --- a/build.gradle +++ b/build.gradle @@ -6,8 +6,11 @@ plugins { id("io.freefair.lombok") version "9.0.0-rc2" } +// use braintrust.properties as the single source of truth for sdk version +def braintrustProps = new Properties() +file('src/main/resources/braintrust.properties').withInputStream { braintrustProps.load(it) } +version = braintrustProps.getProperty('sdk.version') group = 'dev.braintrust' -version = '0.0.1-SNAPSHOT' java { sourceCompatibility = JavaVersion.VERSION_17 @@ -64,6 +67,7 @@ test { } environment 'TEST_VAR1', 'fromenv1' environment 'TEST_VAR2', 'fromenv2' + environment 'GRADLE_SDK_VERSION', version } // Enable preview features for pattern matching, etc. diff --git a/src/main/java/dev/braintrust/trace/BraintrustTracing.java b/src/main/java/dev/braintrust/trace/BraintrustTracing.java index 184cfc0..5e46c69 100644 --- a/src/main/java/dev/braintrust/trace/BraintrustTracing.java +++ b/src/main/java/dev/braintrust/trace/BraintrustTracing.java @@ -19,6 +19,7 @@ import java.time.Duration; import java.util.HashMap; import java.util.Map; +import java.util.Properties; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; import javax.annotation.Nonnull; @@ -30,8 +31,8 @@ */ @Slf4j public final class BraintrustTracing { - private static final String INSTRUMENTATION_NAME = "braintrust-java"; - private static final String INSTRUMENTATION_VERSION = "0.0.1"; + static final String INSTRUMENTATION_NAME = "braintrust-java"; + static final String INSTRUMENTATION_VERSION = loadVersionFromProperties(); /** * Quick start method that sets up global OpenTelemetry with Braintrust defaults.
@@ -160,5 +161,15 @@ public static Tracer getTracer(OpenTelemetry openTelemetry) { return openTelemetry.getTracer(INSTRUMENTATION_NAME, INSTRUMENTATION_VERSION); } + private static String loadVersionFromProperties() { + try (var is = BraintrustTracing.class.getResourceAsStream("/braintrust.properties")) { + var props = new Properties(); + props.load(is); + return props.getProperty("sdk.version"); + } catch (Exception e) { + throw new RuntimeException("unable to determine sdk version", e); + } + } + private BraintrustTracing() {} } diff --git a/src/main/resources/braintrust.properties b/src/main/resources/braintrust.properties new file mode 100644 index 0000000..703f6d7 --- /dev/null +++ b/src/main/resources/braintrust.properties @@ -0,0 +1 @@ +sdk.version=0.0.1-SNAPSHOT \ No newline at end of file diff --git a/src/test/java/dev/braintrust/trace/BraintrustTracingTest.java b/src/test/java/dev/braintrust/trace/BraintrustTracingTest.java index 4b8f76f..3f6eb75 100644 --- a/src/test/java/dev/braintrust/trace/BraintrustTracingTest.java +++ b/src/test/java/dev/braintrust/trace/BraintrustTracingTest.java @@ -33,6 +33,16 @@ void beforeEach() { getExportedBraintrustSpans().clear(); } + @Test + void instrumentationInfoIsPresent() { + assertNotNull(BraintrustTracing.INSTRUMENTATION_NAME); + assertFalse(BraintrustTracing.INSTRUMENTATION_NAME.isEmpty()); + var gradleSdkVersion = System.getenv("GRADLE_SDK_VERSION"); + assertNotNull(gradleSdkVersion); + assertFalse(gradleSdkVersion.isEmpty()); + assertEquals(gradleSdkVersion, BraintrustTracing.INSTRUMENTATION_VERSION); + } + @Test void globalBTTracing() { var sdk = (OpenTelemetrySdk) BraintrustTracing.of(config, true);