org.apache.maven.plugins
maven-gpg-plugin
diff --git a/src/main/java/io/weaviate/client6/v1/internal/BuildInfo.java b/src/main/java/io/weaviate/client6/v1/internal/BuildInfo.java
new file mode 100644
index 000000000..29fc339cc
--- /dev/null
+++ b/src/main/java/io/weaviate/client6/v1/internal/BuildInfo.java
@@ -0,0 +1,28 @@
+package io.weaviate.client6.v1.internal;
+
+import java.io.IOException;
+import java.util.Properties;
+
+public final class BuildInfo {
+ /** Prevent public initialization. */
+ private BuildInfo() {
+ }
+
+ public static final String BRANCH;
+ public static final String COMMIT_ID;
+ public static final String COMMIT_ID_ABBREV;
+
+ static {
+ var properties = new Properties();
+
+ try {
+ properties.load(BuildInfo.class.getClassLoader().getResourceAsStream("client6-git.properties"));
+ } catch (IOException | NullPointerException e) {
+ System.out.println("failed to load client6-git.properties, no build information will be available");
+ }
+
+ BRANCH = String.valueOf(properties.get("git.branch"));
+ COMMIT_ID = String.valueOf(properties.get("git.commit.id.full"));
+ COMMIT_ID_ABBREV = String.valueOf(properties.get("git.commit.id.abbrev"));
+ }
+}
diff --git a/src/main/java/io/weaviate/client6/v1/internal/Debug.java b/src/main/java/io/weaviate/client6/v1/internal/Debug.java
index 8d3702d61..87f560627 100644
--- a/src/main/java/io/weaviate/client6/v1/internal/Debug.java
+++ b/src/main/java/io/weaviate/client6/v1/internal/Debug.java
@@ -1,5 +1,7 @@
package io.weaviate.client6.v1.internal;
+import java.util.function.Consumer;
+
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.MessageOrBuilder;
import com.google.protobuf.util.JsonFormat;
@@ -24,4 +26,30 @@ private static final String proto2json(MessageOrBuilder proto) {
return out;
}
+
+ /**
+ * Write build info to an output. See {@link #printBuildInfo}.
+ *
+ *
+ * Usage:
+ *
+ *
{@code
+ * // Log to stdout
+ * Debug.writeBuildInfo(System.out::println);
+ *
+ * // Write to custom logger
+ * Debug.writeBuildInfo(mylog::info);
+ * }
+ *
+ * @param writer Output writer.
+ */
+ public static final void writeBuildInfo(Consumer writer) {
+ writer.accept("[io.weaviate.client6.v1.internal.BuildInfo] branch=%s commit_id=%s"
+ .formatted(BuildInfo.BRANCH, BuildInfo.COMMIT_ID_ABBREV));
+ }
+
+ /** Print build info to stdout. */
+ public static final void printBuildInfo() {
+ writeBuildInfo(System.out::println);
+ }
}
diff --git a/src/test/java/io/weaviate/client6/v1/internal/BuildInfoTest.java b/src/test/java/io/weaviate/client6/v1/internal/BuildInfoTest.java
new file mode 100644
index 000000000..271b14dfb
--- /dev/null
+++ b/src/test/java/io/weaviate/client6/v1/internal/BuildInfoTest.java
@@ -0,0 +1,46 @@
+package io.weaviate.client6.v1.internal;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.assertj.core.api.Assertions;
+import org.junit.Assume;
+import org.junit.Test;
+
+public class BuildInfoTest {
+ private static final String BRANCH = gitBranch();
+ private static final String COMMIT_ID = gitCommit();
+
+ @Test
+ public void testBuildInfo() throws IOException {
+ Assume.assumeNotNull(BRANCH, COMMIT_ID);
+ Assume.assumeTrue("found git branch", !BRANCH.isBlank());
+ Assume.assumeTrue("found git commit", !COMMIT_ID.isBlank());
+
+ Assertions.assertThat(BuildInfo.BRANCH).as("branch").isEqualTo(BRANCH);
+ Assertions.assertThat(BuildInfo.COMMIT_ID).as("commit.full").isEqualTo(COMMIT_ID);
+ Assertions.assertThat(COMMIT_ID).as("commit.abbrev").startsWith(BuildInfo.COMMIT_ID_ABBREV);
+ }
+
+ /** Get current non-abbreviated Git commit hash. */
+ private static String gitCommit() {
+ return runCommand("/usr/bin/git", "rev-parse", "HEAD");
+ }
+
+ /** Get current git branch. */
+ private static String gitBranch() {
+ return runCommand("/usr/bin/git", "branch", "--show-current");
+ }
+
+ /** Run shell command and return the output as multi-line string. */
+ private static String runCommand(String... cmdarray) {
+ try {
+ var process = Runtime.getRuntime().exec(cmdarray);
+ var r = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ return String.join("\n", (Iterable) () -> r.lines().iterator());
+ } catch (IOException e) {
+ return null;
+ }
+ }
+}