From 8495b93880fbf350ccaf9a9bc1226597f9889ffa Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 24 Jan 2025 13:24:02 +0100 Subject: [PATCH 1/8] [Internal] CICD provider --- .../com/databricks/sdk/core/UserAgent.java | 67 +++++++++++++++++++ .../databricks/sdk/core/UserAgentTest.java | 43 +++++++++++- 2 files changed, 108 insertions(+), 2 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 4d9698f8f..32ea94897 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -1,11 +1,18 @@ package com.databricks.sdk.core; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class UserAgent { + private static final Logger log = LoggerFactory.getLogger(UserAgent.class); private static String product = "unknown"; private static String productVersion = "0.0.0"; @@ -121,6 +128,10 @@ public static String asString() { segments.add(String.format("databricks-sdk-java/%s", version)); segments.add(String.format("jvm/%s", jvmVersion())); segments.add(String.format("os/%s", osName())); + String ciProvider = cicdProvider(); + if (!ciProvider.isEmpty()) { + segments.add(String.format("ci/%s", ciProvider)); + } // Concurrent iteration over ArrayList must be guarded with synchronized. synchronized (otherInfo) { segments.addAll( @@ -130,4 +141,60 @@ public static String asString() { } return segments.stream().collect(Collectors.joining(" ")); } + + // Map of CI/CD providers that are used to detect them. + private static final Map> PROVIDERS = new HashMap<>(); + + static { + PROVIDERS.put("github", Collections.singletonList(new EnvVar("GITHUB_ACTIONS", "true"))); + PROVIDERS.put("gitlab", Collections.singletonList(new EnvVar("GITLAB_CI", "true"))); + PROVIDERS.put("jenkins", Collections.singletonList(new EnvVar("JENKINS_URL", ""))); + PROVIDERS.put("azure-devops", Collections.singletonList(new EnvVar("TF_BUILD", "True"))); + PROVIDERS.put("circle", Collections.singletonList(new EnvVar("CIRCLECI", "true"))); + PROVIDERS.put("travis", Collections.singletonList(new EnvVar("TRAVIS", "true"))); + PROVIDERS.put("bitbucket", Collections.singletonList(new EnvVar("BITBUCKET_BUILD_NUMBER", ""))); + PROVIDERS.put( + "google-cloud-build", + Arrays.asList( + new EnvVar("PROJECT_ID", ""), + new EnvVar("BUILD_ID", ""), + new EnvVar("PROJECT_NUMBER", ""), + new EnvVar("LOCATION", ""))); + PROVIDERS.put( + "aws-code-build", Collections.singletonList(new EnvVar("CODEBUILD_BUILD_ARN", ""))); + PROVIDERS.put("tf-cloud", Collections.singletonList(new EnvVar("TFC_RUN_ID", ""))); + } + + // This is a static private variable to store the CI/CD provider. + // This is thread-safe because static initializers are executed + // in a thread-safe manner by the Java ClassLoader. + private static final String cicdProvider = lookupCiCdProvider(); + + private static class EnvVar { + private final String name; + private final String expectedValue; + + public EnvVar(String name, String expectedValue) { + this.name = name; + this.expectedValue = expectedValue; + } + + public boolean detect() { + String value = System.getProperty(name); + return value != null && (expectedValue.isEmpty() || value.equals(expectedValue)); + } + } + + private static String lookupCiCdProvider() { + for (Map.Entry> entry : PROVIDERS.entrySet()) { + if (entry.getValue().stream().allMatch(EnvVar::detect)) { + return entry.getKey(); + } + } + return ""; + } + + public static String cicdProvider() { + return cicdProvider; + } } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index b44c07e7c..8508aef12 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -1,9 +1,13 @@ package com.databricks.sdk.core; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; +import java.util.Properties; +import org.junit.jupiter.api.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class UserAgentTest { + private static final Logger log = LoggerFactory.getLogger(UserAgentTest.class); + @Test public void testUserAgent() { UserAgent.withProduct("product", "productVersion"); @@ -56,4 +60,39 @@ public void testUserAgentWithSemverValue() { String userAgent = UserAgent.asString(); Assertions.assertTrue(userAgent.contains("key1/1.0.0-dev+metadata")); } + + private Properties originalProperties; + + @BeforeEach + public void clearCICD() { + // Save original system properties + originalProperties = (Properties) System.getProperties().clone(); + + // Clear all system properties + System.getProperties().clear(); + } + + @AfterEach + public void restoreProperties() { + // Restore original system properties + System.setProperties(originalProperties); + } + + @Test + public void testUserAgentCicdNoProvider() { + Assertions.assertEquals("", UserAgent.cicdProvider()); + } + + @Test + public void testUserAgentCicdOneProvider() { + System.setProperty("GITHUB_ACTIONS", "true"); + Assertions.assertEquals("github", UserAgent.cicdProvider()); + } + + @Test + public void testUserAgentCicdMultipleProviders() { + System.setProperty("GITHUB_ACTIONS", "true"); + System.setProperty("GITLAB_CI", "true"); + Assertions.assertEquals("github", UserAgent.cicdProvider()); + } } From 54ac27eaef6e6f0575748186b3030f9b2db48d1d Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 24 Jan 2025 13:30:05 +0100 Subject: [PATCH 2/8] update --- .../src/test/java/com/databricks/sdk/core/UserAgentTest.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index 8508aef12..679abbb42 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -64,12 +64,9 @@ public void testUserAgentWithSemverValue() { private Properties originalProperties; @BeforeEach - public void clearCICD() { + public void saveProperties() { // Save original system properties originalProperties = (Properties) System.getProperties().clone(); - - // Clear all system properties - System.getProperties().clear(); } @AfterEach From 8e44e6bcd8a77c11c3686a37ba650ebc14b009b4 Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 24 Jan 2025 16:33:16 +0100 Subject: [PATCH 3/8] update --- .../src/main/java/com/databricks/sdk/core/UserAgent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 32ea94897..2414a4841 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -180,7 +180,7 @@ public EnvVar(String name, String expectedValue) { } public boolean detect() { - String value = System.getProperty(name); + String value = System.getenv(name); return value != null && (expectedValue.isEmpty() || value.equals(expectedValue)); } } From d74f9a295e6518bea26ec038be02f44573ed86fd Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 31 Jan 2025 15:23:16 +0100 Subject: [PATCH 4/8] update --- .../com/databricks/sdk/core/UserAgent.java | 123 ++++++++++++------ .../databricks/sdk/core/UserAgentTest.java | 40 +++--- 2 files changed, 98 insertions(+), 65 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 2414a4841..7e4a15987 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -1,18 +1,15 @@ package com.databricks.sdk.core; +import com.databricks.sdk.core.utils.Environment; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class UserAgent { - private static final Logger log = LoggerFactory.getLogger(UserAgent.class); private static String product = "unknown"; private static String productVersion = "0.0.0"; @@ -128,9 +125,9 @@ public static String asString() { segments.add(String.format("databricks-sdk-java/%s", version)); segments.add(String.format("jvm/%s", jvmVersion())); segments.add(String.format("os/%s", osName())); - String ciProvider = cicdProvider(); - if (!ciProvider.isEmpty()) { - segments.add(String.format("ci/%s", ciProvider)); + String cicdProvider = cicdProvider(); + if (!cicdProvider.isEmpty()) { + segments.add(String.format("cicd/%s", cicdProvider)); } // Concurrent iteration over ArrayList must be guarded with synchronized. synchronized (otherInfo) { @@ -142,34 +139,35 @@ public static String asString() { return segments.stream().collect(Collectors.joining(" ")); } - // Map of CI/CD providers that are used to detect them. - private static final Map> PROVIDERS = new HashMap<>(); - - static { - PROVIDERS.put("github", Collections.singletonList(new EnvVar("GITHUB_ACTIONS", "true"))); - PROVIDERS.put("gitlab", Collections.singletonList(new EnvVar("GITLAB_CI", "true"))); - PROVIDERS.put("jenkins", Collections.singletonList(new EnvVar("JENKINS_URL", ""))); - PROVIDERS.put("azure-devops", Collections.singletonList(new EnvVar("TF_BUILD", "True"))); - PROVIDERS.put("circle", Collections.singletonList(new EnvVar("CIRCLECI", "true"))); - PROVIDERS.put("travis", Collections.singletonList(new EnvVar("TRAVIS", "true"))); - PROVIDERS.put("bitbucket", Collections.singletonList(new EnvVar("BITBUCKET_BUILD_NUMBER", ""))); - PROVIDERS.put( - "google-cloud-build", - Arrays.asList( - new EnvVar("PROJECT_ID", ""), - new EnvVar("BUILD_ID", ""), - new EnvVar("PROJECT_NUMBER", ""), - new EnvVar("LOCATION", ""))); - PROVIDERS.put( - "aws-code-build", Collections.singletonList(new EnvVar("CODEBUILD_BUILD_ARN", ""))); - PROVIDERS.put("tf-cloud", Collections.singletonList(new EnvVar("TFC_RUN_ID", ""))); - } - - // This is a static private variable to store the CI/CD provider. - // This is thread-safe because static initializers are executed - // in a thread-safe manner by the Java ClassLoader. - private static final String cicdProvider = lookupCiCdProvider(); + // List of CI/CD providers and their environment variables for detection + private static List listCiCdProviders() { + return Arrays.asList( + new CicdProvider("github", Collections.singletonList(new EnvVar("GITHUB_ACTIONS", "true"))), + new CicdProvider("gitlab", Collections.singletonList(new EnvVar("GITLAB_CI", "true"))), + new CicdProvider("jenkins", Collections.singletonList(new EnvVar("JENKINS_URL", ""))), + new CicdProvider("azure-devops", Collections.singletonList(new EnvVar("TF_BUILD", "True"))), + new CicdProvider("circle", Collections.singletonList(new EnvVar("CIRCLECI", "true"))), + new CicdProvider("travis", Collections.singletonList(new EnvVar("TRAVIS", "true"))), + new CicdProvider("bitbucket", Collections.singletonList(new EnvVar("BITBUCKET_BUILD_NUMBER", ""))), + new CicdProvider("google-cloud-build", Arrays.asList( + new EnvVar("PROJECT_ID", ""), + new EnvVar("BUILD_ID", ""), + new EnvVar("PROJECT_NUMBER", ""), + new EnvVar("LOCATION", "") + )), + new CicdProvider("aws-code-build", Collections.singletonList(new EnvVar("CODEBUILD_BUILD_ARN", ""))), + new CicdProvider("tf-cloud", Collections.singletonList(new EnvVar("TFC_RUN_ID", ""))) + ); + } + + // Volatile fields to ensure thread-safe lazy initialization + // The 'volatile' keyword ensures that changes to these variables + // are immediately visible to all threads. It prevents instruction + // reordering by the compiler. + protected static volatile String cicdProvider = null; + protected static volatile Environment env = null; + // Represents an environment variable with its name and expected value private static class EnvVar { private final String name; private final String expectedValue; @@ -178,23 +176,62 @@ public EnvVar(String name, String expectedValue) { this.name = name; this.expectedValue = expectedValue; } + } + + // Represents a CI/CD provider with its name and associated environment variables + private static class CicdProvider { + private final String name; + private final List envVars; - public boolean detect() { - String value = System.getenv(name); - return value != null && (expectedValue.isEmpty() || value.equals(expectedValue)); + public CicdProvider(String name, List envVars) { + this.name = name; + this.envVars = envVars; + } + + public boolean detect(Environment env) { + for (EnvVar envVar : envVars) { + String value = env.get(envVar.name); + if (value == null) { + return false; + } + if (!envVar.expectedValue.isEmpty() && !value.equals(envVar.expectedValue)) { + return false; + } + } + return true; } } - private static String lookupCiCdProvider() { - for (Map.Entry> entry : PROVIDERS.entrySet()) { - if (entry.getValue().stream().allMatch(EnvVar::detect)) { - return entry.getKey(); + // Looks up the active CI/CD provider based on environment variables + private static String lookupCiCdProvider(Environment env) { + for (CicdProvider provider : listCiCdProviders()) { + if (provider.detect(env)) { + return provider.name; } } return ""; } - public static String cicdProvider() { + // Thread-safe lazy initialization of CI/CD provider detection + private static String cicdProvider() { + // First check (not synchronized) to avoid unnecessary synchronization + if (cicdProvider == null) { + // Synchronize only if cicdProvider is null + synchronized (UserAgent.class) { + // Second check (synchronized) to ensure only one thread initializes + // This is necessary because multiple threads might have passed the first check + if (cicdProvider == null) { + cicdProvider = lookupCiCdProvider(env()); + } + } + } return cicdProvider; } + + protected static Environment env() { + if (env == null) { + env = new Environment(System.getenv(), System.getenv("PATH").split(File.pathSeparator), System.getProperty("os.name")); + } + return env; + } } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index 679abbb42..a91c41fbf 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -1,6 +1,8 @@ package com.databricks.sdk.core; -import java.util.Properties; +import java.util.ArrayList; +import java.util.HashMap; +import com.databricks.sdk.core.utils.Environment; import org.junit.jupiter.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,35 +63,29 @@ public void testUserAgentWithSemverValue() { Assertions.assertTrue(userAgent.contains("key1/1.0.0-dev+metadata")); } - private Properties originalProperties; - - @BeforeEach - public void saveProperties() { - // Save original system properties - originalProperties = (Properties) System.getProperties().clone(); - } - - @AfterEach - public void restoreProperties() { - // Restore original system properties - System.setProperties(originalProperties); - } - @Test public void testUserAgentCicdNoProvider() { - Assertions.assertEquals("", UserAgent.cicdProvider()); + UserAgent.env = new Environment(new HashMap<>(), new ArrayList<>(), System.getProperty("os.name")); + Assertions.assertFalse(UserAgent.asString().contains("cicd")); + UserAgent.env = null; } @Test public void testUserAgentCicdOneProvider() { - System.setProperty("GITHUB_ACTIONS", "true"); - Assertions.assertEquals("github", UserAgent.cicdProvider()); + UserAgent.env = new Environment(new HashMap() {{ + put("GITHUB_ACTIONS", "true"); + }}, new ArrayList<>(), System.getProperty("os.name")); + Assertions.assertTrue(UserAgent.asString().contains("cicd/github")); + UserAgent.env = null; } @Test - public void testUserAgentCicdMultipleProviders() { - System.setProperty("GITHUB_ACTIONS", "true"); - System.setProperty("GITLAB_CI", "true"); - Assertions.assertEquals("github", UserAgent.cicdProvider()); + public void testUserAgentCicdTwoProvider() { + UserAgent.env = new Environment(new HashMap() {{ + put("GITLAB_CI", "true"); + put("JENKINS_URL", ""); + }}, new ArrayList<>(), System.getProperty("os.name")); + Assertions.assertTrue(UserAgent.asString().contains("cicd/gitlab")); + UserAgent.env = null; } } From 4e58dd2b2fc2a503c558678024550d621d023191 Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 31 Jan 2025 15:25:21 +0100 Subject: [PATCH 5/8] update --- .../src/main/java/com/databricks/sdk/core/UserAgent.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 7e4a15987..c86e3b916 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -160,12 +160,13 @@ private static List listCiCdProviders() { ); } - // Volatile fields to ensure thread-safe lazy initialization + // Volatile field to ensure thread-safe lazy initialization // The 'volatile' keyword ensures that changes to these variables // are immediately visible to all threads. It prevents instruction // reordering by the compiler. - protected static volatile String cicdProvider = null; - protected static volatile Environment env = null; + private static volatile String cicdProvider = null; + + protected static Environment env = null; // Represents an environment variable with its name and expected value private static class EnvVar { @@ -228,7 +229,7 @@ private static String cicdProvider() { return cicdProvider; } - protected static Environment env() { + private static Environment env() { if (env == null) { env = new Environment(System.getenv(), System.getenv("PATH").split(File.pathSeparator), System.getProperty("os.name")); } From 714d8afccfc2cdcc35dcbbbc90350438b82af43d Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 31 Jan 2025 15:27:47 +0100 Subject: [PATCH 6/8] update --- .../com/databricks/sdk/core/UserAgent.java | 40 +++++++++++-------- .../databricks/sdk/core/UserAgentTest.java | 31 +++++++++----- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index c86e3b916..326fcbc84 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -142,22 +142,24 @@ public static String asString() { // List of CI/CD providers and their environment variables for detection private static List listCiCdProviders() { return Arrays.asList( - new CicdProvider("github", Collections.singletonList(new EnvVar("GITHUB_ACTIONS", "true"))), - new CicdProvider("gitlab", Collections.singletonList(new EnvVar("GITLAB_CI", "true"))), - new CicdProvider("jenkins", Collections.singletonList(new EnvVar("JENKINS_URL", ""))), - new CicdProvider("azure-devops", Collections.singletonList(new EnvVar("TF_BUILD", "True"))), - new CicdProvider("circle", Collections.singletonList(new EnvVar("CIRCLECI", "true"))), - new CicdProvider("travis", Collections.singletonList(new EnvVar("TRAVIS", "true"))), - new CicdProvider("bitbucket", Collections.singletonList(new EnvVar("BITBUCKET_BUILD_NUMBER", ""))), - new CicdProvider("google-cloud-build", Arrays.asList( - new EnvVar("PROJECT_ID", ""), - new EnvVar("BUILD_ID", ""), - new EnvVar("PROJECT_NUMBER", ""), - new EnvVar("LOCATION", "") - )), - new CicdProvider("aws-code-build", Collections.singletonList(new EnvVar("CODEBUILD_BUILD_ARN", ""))), - new CicdProvider("tf-cloud", Collections.singletonList(new EnvVar("TFC_RUN_ID", ""))) - ); + new CicdProvider("github", Collections.singletonList(new EnvVar("GITHUB_ACTIONS", "true"))), + new CicdProvider("gitlab", Collections.singletonList(new EnvVar("GITLAB_CI", "true"))), + new CicdProvider("jenkins", Collections.singletonList(new EnvVar("JENKINS_URL", ""))), + new CicdProvider("azure-devops", Collections.singletonList(new EnvVar("TF_BUILD", "True"))), + new CicdProvider("circle", Collections.singletonList(new EnvVar("CIRCLECI", "true"))), + new CicdProvider("travis", Collections.singletonList(new EnvVar("TRAVIS", "true"))), + new CicdProvider( + "bitbucket", Collections.singletonList(new EnvVar("BITBUCKET_BUILD_NUMBER", ""))), + new CicdProvider( + "google-cloud-build", + Arrays.asList( + new EnvVar("PROJECT_ID", ""), + new EnvVar("BUILD_ID", ""), + new EnvVar("PROJECT_NUMBER", ""), + new EnvVar("LOCATION", ""))), + new CicdProvider( + "aws-code-build", Collections.singletonList(new EnvVar("CODEBUILD_BUILD_ARN", ""))), + new CicdProvider("tf-cloud", Collections.singletonList(new EnvVar("TFC_RUN_ID", "")))); } // Volatile field to ensure thread-safe lazy initialization @@ -231,7 +233,11 @@ private static String cicdProvider() { private static Environment env() { if (env == null) { - env = new Environment(System.getenv(), System.getenv("PATH").split(File.pathSeparator), System.getProperty("os.name")); + env = + new Environment( + System.getenv(), + System.getenv("PATH").split(File.pathSeparator), + System.getProperty("os.name")); } return env; } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index a91c41fbf..ab4eed7d3 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -1,8 +1,8 @@ package com.databricks.sdk.core; +import com.databricks.sdk.core.utils.Environment; import java.util.ArrayList; import java.util.HashMap; -import com.databricks.sdk.core.utils.Environment; import org.junit.jupiter.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,26 +65,39 @@ public void testUserAgentWithSemverValue() { @Test public void testUserAgentCicdNoProvider() { - UserAgent.env = new Environment(new HashMap<>(), new ArrayList<>(), System.getProperty("os.name")); + UserAgent.env = + new Environment(new HashMap<>(), new ArrayList<>(), System.getProperty("os.name")); Assertions.assertFalse(UserAgent.asString().contains("cicd")); UserAgent.env = null; } @Test public void testUserAgentCicdOneProvider() { - UserAgent.env = new Environment(new HashMap() {{ - put("GITHUB_ACTIONS", "true"); - }}, new ArrayList<>(), System.getProperty("os.name")); + UserAgent.env = + new Environment( + new HashMap() { + { + put("GITHUB_ACTIONS", "true"); + } + }, + new ArrayList<>(), + System.getProperty("os.name")); Assertions.assertTrue(UserAgent.asString().contains("cicd/github")); UserAgent.env = null; } @Test public void testUserAgentCicdTwoProvider() { - UserAgent.env = new Environment(new HashMap() {{ - put("GITLAB_CI", "true"); - put("JENKINS_URL", ""); - }}, new ArrayList<>(), System.getProperty("os.name")); + UserAgent.env = + new Environment( + new HashMap() { + { + put("GITLAB_CI", "true"); + put("JENKINS_URL", ""); + } + }, + new ArrayList<>(), + System.getProperty("os.name")); Assertions.assertTrue(UserAgent.asString().contains("cicd/gitlab")); UserAgent.env = null; } From 4cd3dad84c6a5c5aef34a9d0424e14d2ac5852a0 Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 31 Jan 2025 15:40:59 +0100 Subject: [PATCH 7/8] update --- .../src/main/java/com/databricks/sdk/core/UserAgent.java | 2 +- .../src/test/java/com/databricks/sdk/core/UserAgentTest.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 326fcbc84..6900a4003 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -166,7 +166,7 @@ private static List listCiCdProviders() { // The 'volatile' keyword ensures that changes to these variables // are immediately visible to all threads. It prevents instruction // reordering by the compiler. - private static volatile String cicdProvider = null; + protected static volatile String cicdProvider = null; protected static Environment env = null; diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index ab4eed7d3..e3e114be8 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -65,6 +65,7 @@ public void testUserAgentWithSemverValue() { @Test public void testUserAgentCicdNoProvider() { + UserAgent.cicdProvider = null; UserAgent.env = new Environment(new HashMap<>(), new ArrayList<>(), System.getProperty("os.name")); Assertions.assertFalse(UserAgent.asString().contains("cicd")); @@ -73,6 +74,7 @@ public void testUserAgentCicdNoProvider() { @Test public void testUserAgentCicdOneProvider() { + UserAgent.cicdProvider = null; UserAgent.env = new Environment( new HashMap() { @@ -88,6 +90,7 @@ public void testUserAgentCicdOneProvider() { @Test public void testUserAgentCicdTwoProvider() { + UserAgent.cicdProvider = null; UserAgent.env = new Environment( new HashMap() { From 5694c26bda90535d1473f8a53c296afc5160589c Mon Sep 17 00:00:00 2001 From: Parth Bansal Date: Fri, 31 Jan 2025 15:45:25 +0100 Subject: [PATCH 8/8] update --- .../test/java/com/databricks/sdk/core/UserAgentTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index e3e114be8..9d0b7f6c2 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -3,13 +3,10 @@ import com.databricks.sdk.core.utils.Environment; import java.util.ArrayList; import java.util.HashMap; -import org.junit.jupiter.api.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UserAgentTest { - private static final Logger log = LoggerFactory.getLogger(UserAgentTest.class); - @Test public void testUserAgent() { UserAgent.withProduct("product", "productVersion");