diff --git a/pom.xml b/pom.xml index 08525d7..a54125c 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,12 @@ + + + src/main/resources + true + + diff --git a/src/main/java/ai/pluggy/client/PluggyClient.java b/src/main/java/ai/pluggy/client/PluggyClient.java index eda479c..0479513 100644 --- a/src/main/java/ai/pluggy/client/PluggyClient.java +++ b/src/main/java/ai/pluggy/client/PluggyClient.java @@ -9,6 +9,7 @@ import ai.pluggy.client.response.ErrorResponse; import ai.pluggy.exception.PluggyException; import ai.pluggy.utils.Utils; +import ai.pluggy.utils.Version; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -292,7 +293,7 @@ public String authenticate() throws IOException, PluggyException { .post(body) .addHeader("content-type", "application/json") .addHeader("cache-control", "no-cache") - .addHeader("User-Agent", "PluggyJava/0.16.2") + .addHeader("User-Agent", Version.USER_AGENT) .build(); String apiKey; diff --git a/src/main/java/ai/pluggy/client/auth/ApiKeyAuthInterceptor.java b/src/main/java/ai/pluggy/client/auth/ApiKeyAuthInterceptor.java index fff3926..3e323c2 100644 --- a/src/main/java/ai/pluggy/client/auth/ApiKeyAuthInterceptor.java +++ b/src/main/java/ai/pluggy/client/auth/ApiKeyAuthInterceptor.java @@ -2,6 +2,7 @@ import static ai.pluggy.utils.Asserts.assertNotNull; +import ai.pluggy.utils.Version; import com.google.gson.Gson; import java.io.IOException; @@ -114,8 +115,7 @@ private Request requestWithAuth(Request originalRequest, String apiKey) { // override the apiKey of the original request with the new one return originalRequest.newBuilder() .header(X_API_KEY_HEADER, apiKey) - // TOOD: add dynamic version - .header("User-Agent", "PluggyJava/0.16.2") + .header("User-Agent", Version.USER_AGENT) .build(); } diff --git a/src/main/java/ai/pluggy/utils/Version.java b/src/main/java/ai/pluggy/utils/Version.java new file mode 100644 index 0000000..6765d8d --- /dev/null +++ b/src/main/java/ai/pluggy/utils/Version.java @@ -0,0 +1,24 @@ +package ai.pluggy.utils; + +import java.io.InputStream; +import java.util.Properties; +import lombok.SneakyThrows; + +public final class Version { + + public static final String SDK_VERSION = loadSdkVersion(); + public static final String USER_AGENT = + "PluggyJava/" + SDK_VERSION + " (Java " + System.getProperty("java.version") + ")"; + + private Version() { + } + + @SneakyThrows + private static String loadSdkVersion() { + Properties props = new Properties(); + try (InputStream in = Version.class.getResourceAsStream("/pluggy-version.properties")) { + props.load(in); + } + return props.getProperty("version"); + } +} diff --git a/src/main/resources/pluggy-version.properties b/src/main/resources/pluggy-version.properties new file mode 100644 index 0000000..defbd48 --- /dev/null +++ b/src/main/resources/pluggy-version.properties @@ -0,0 +1 @@ +version=${project.version} diff --git a/src/test/java/ai/pluggy/client/unit/VersionTest.java b/src/test/java/ai/pluggy/client/unit/VersionTest.java new file mode 100644 index 0000000..a3602d1 --- /dev/null +++ b/src/test/java/ai/pluggy/client/unit/VersionTest.java @@ -0,0 +1,27 @@ +package ai.pluggy.client.unit; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import ai.pluggy.utils.Version; +import org.junit.jupiter.api.Test; + +public class VersionTest { + + @Test + void sdkVersion_isResolvedFromPom_notTheLiteralPlaceholder() { + assertNotNull(Version.SDK_VERSION); + assertTrue(Version.SDK_VERSION.matches("\\d+\\.\\d+\\.\\d+(-\\w+)?"), + "SDK_VERSION should look like a semver, got: '" + Version.SDK_VERSION + + "'. If it's '${project.version}', Maven resource filtering is broken."); + } + + @Test + void userAgent_followsExpectedFormat() { + assertTrue(Version.USER_AGENT.startsWith("PluggyJava/" + Version.SDK_VERSION + " (Java "), + "USER_AGENT should start with 'PluggyJava/ (Java ', got: '" + + Version.USER_AGENT + "'"); + assertTrue(Version.USER_AGENT.endsWith(")"), + "USER_AGENT should end with ')', got: '" + Version.USER_AGENT + "'"); + } +}