8000 Support common config sources for user-provided git info (#8547) · DataDog/dd-trace-java@a39a27f · GitHub
[go: up one dir, main page]

Skip to content

Commit a39a27f

Browse files
Support common config sources for user-provided git info (#8547)
1 parent 0d9c7d2 commit a39a27f

File tree

4 files changed

+80
-68
lines changed

4 files changed

+80
-68
lines changed

dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package datadog.trace.civisibility.ci
22

33
import datadog.trace.api.Config
4-
import datadog.trace.api.git.GitInfo
54
import datadog.trace.api.git.GitInfoProvider
65
import datadog.trace.api.git.UserSuppliedGitInfoBuilder
76
import datadog.trace.bootstrap.instrumentation.api.Tags
87
import datadog.trace.civisibility.ci.env.CiEnvironmentImpl
98
import datadog.trace.civisibility.git.CILocalGitInfoBuilder
109
import datadog.trace.civisibility.git.CIProviderGitInfoBuilder
1110
import datadog.trace.civisibility.git.tree.GitClient
11+
import datadog.trace.util.Strings
1212
import org.junit.Rule
1313
import org.junit.contrib.java.lang.system.EnvironmentVariables
1414
import org.junit.contrib.java.lang.system.RestoreSystemProperties
@@ -69,7 +69,7 @@ abstract class CITagsProviderTest extends Specification {
6969
environmentVariables.set(it.key, it.value)
7070
}
7171

72-
environmentVariables.set(GitInfo.DD_GIT_COMMIT_SHA, "1234567890123456789012345678901234567890")
72+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA), "1234567890123456789012345678901234567890")
7373

7474
when:
7575
CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv()))
@@ -88,7 +88,7 @@ abstract class CITagsProviderTest extends Specification {
8888
environmentVariables.set(it.key, it.value)
8989
}
9090

91-
environmentVariables.set(GitInfo.DD_GIT_REPOSITORY_URL, "local supplied repo url")
91+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL), "local supplied repo url")
9292

9393
when:
9494
CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv()))

internal-api/src/main/java/datadog/trace/api/git/GitInfo.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,6 @@ public class GitInfo {
66

77
public static final GitInfo NOOP = new GitInfo(null, null, null, CommitInfo.NOOP);
88

9-
public static final String DD_GIT_REPOSITORY_URL = "DD_GIT_REPOSITORY_URL";
10-
public static final String DD_GIT_BRANCH = "DD_GIT_BRANCH";
11-
public static final String DD_GIT_TAG = "DD_GIT_TAG";
12-
public static final String DD_GIT_COMMIT_SHA = "DD_GIT_COMMIT_SHA";
13-
public static final String DD_GIT_COMMIT_MESSAGE = "DD_GIT_COMMIT_MESSAGE";
14-
public static final String DD_GIT_COMMIT_AUTHOR_NAME = "DD_GIT_COMMIT_AUTHOR_NAME";
15-
public static final String DD_GIT_COMMIT_AUTHOR_EMAIL = "DD_GIT_COMMIT_AUTHOR_EMAIL";
16-
public static final String DD_GIT_COMMIT_AUTHOR_DATE = "DD_GIT_COMMIT_AUTHOR_DATE";
17-
public static final String DD_GIT_COMMIT_COMMITTER_NAME = "DD_GIT_COMMIT_COMMITTER_NAME";
18-
public static final String DD_GIT_COMMIT_COMMITTER_EMAIL = "DD_GIT_COMMIT_COMMITTER_EMAIL";
19-
public static final String DD_GIT_COMMIT_COMMITTER_DATE = "DD_GIT_COMMIT_COMMITTER_DATE";
20-
219
private final String repositoryURL;
2210
private final String branch;
2311
private final String tag;

internal-api/src/main/java/datadog/trace/api/git/UserSuppliedGitInfoBuilder.java

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
11
package datadog.trace.api.git;
22

3-
import static datadog.trace.api.git.GitInfo.DD_GIT_BRANCH;
4-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_AUTHOR_DATE;
5-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_AUTHOR_EMAIL;
6-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_AUTHOR_NAME;
7-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_COMMITTER_DATE;
8-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_COMMITTER_EMAIL;
9-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_COMMITTER_NAME;
10-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_MESSAGE;
11-
import static datadog.trace.api.git.GitInfo.DD_GIT_COMMIT_SHA;
12-
import static datadog.trace.api.git.GitInfo.DD_GIT_REPOSITORY_URL;
13-
import static datadog.trace.api.git.GitInfo.DD_GIT_TAG;
14-
153
import datadog.trace.api.Config;
16-
import datadog.trace.api.ConfigCollector;
17-
import datadog.trace.api.ConfigOrigin;
184
import datadog.trace.api.config.GeneralConfig;
5+
import datadog.trace.bootstrap.config.provider.ConfigProvider;
196
import datadog.trace.bootstrap.instrumentation.api.Tags;
7+
import datadog.trace.util.Strings;
208
import javax.annotation.Nullable;
219
import org.slf4j.Logger;
2210
import org.slf4j.LoggerFactory;
2311

2412
public class UserSuppliedGitInfoBuilder implements GitInfoBuilder {
2513

14+
public static final String DD_GIT_REPOSITORY_URL = "git.repository.url";
15+
public static final String DD_GIT_BRANCH = "git.branch";
16+
public static final String DD_GIT_TAG = "git.tag";
17+
public static final String DD_GIT_COMMIT_SHA = "git.commit.sha";
18+
public static final String DD_GIT_COMMIT_MESSAGE = "git.commit.message";
19+
public static final String DD_GIT_COMMIT_AUTHOR_NAME = "git.commit.author.name";
20+
public static final String DD_GIT_COMMIT_AUTHOR_EMAIL = "git.commit.author.email";
21+
public static final String DD_GIT_COMMIT_AUTHOR_DATE = "git.commit.author.date";
22+
public static final String DD_GIT_COMMIT_COMMITTER_NAME = "git.commit.committer.name";
23+
public static final String DD_GIT_COMMIT_COMMITTER_EMAIL = "git.commit.committer.email";
24+
public static final String DD_GIT_COMMIT_COMMITTER_DATE = "git.commit.committer.date";
2625
private static final Logger log = LoggerFactory.getLogger(UserSuppliedGitInfoBuilder.class);
2726

2827
@Override
2928
public GitInfo build(@Nullable String repositoryPath) {
30-
String gitRepositoryUrl = System.getenv(DD_GIT_REPOSITORY_URL);
29+
ConfigProvider configProvider = ConfigProvider.getInstance();
30+
31+
String gitRepositoryUrl = configProvider.getString(DD_GIT_REPOSITORY_URL);
3132
if (gitRepositoryUrl == null) {
3233
gitRepositoryUrl = Config.get().getGlobalTags().get(Tags.GIT_REPOSITORY_URL);
3334
}
@@ -36,9 +37,9 @@ public GitInfo build(@Nullable String repositoryPath) {
3637
// using the value returned by the CI Provider, so
3738
// we need to normalize the value. Also, it can contain
3839
// the tag (e.g. origin/tags/0.1.0)
39-
String gitTag = System.getenv(DD_GIT_TAG);
40+
String gitTag = configProvider.getString(DD_GIT_TAG);
4041
String gitBranch = null;
41-
final String gitBranchOrTag = System.getenv(DD_GIT_BRANCH);
42+
final String gitBranchOrTag = configProvider.getString(DD_GIT_BRANCH);
4243
if (gitBranchOrTag != null) {
4344
if (!GitUtils.isTagReference(gitBranchOrTag)) {
4445
gitBranch = GitUtils.normalizeBranch(gitBranchOrTag);
@@ -47,21 +48,18 @@ public GitInfo build(@Nullable String repositoryPath) {
4748
}
4849
}
4950

50-
String gitCommitSha = System.getenv(DD_GIT_COMMIT_SHA);
51+
String gitCommitSha = configProvider.getString(DD_GIT_COMMIT_SHA);
5152
if (gitCommitSha == null) {
5253
gitCommitSha = Config.get().getGlobalTags().get(Tags.GIT_COMMIT_SHA);
5354
}
5455

55-
ConfigCollector.get().put(DD_GIT_REPOSITORY_URL, gitRepositoryUrl, ConfigOrigin.ENV);
56-
ConfigCollector.get().put(DD_GIT_COMMIT_SHA, gitCommitSha, ConfigOrigin.ENV);
57-
58-
final String gitCommitMessage = System.getenv(DD_GIT_COMMIT_MESSAGE);
59-
final String gitCommitAuthorName = System.getenv(DD_GIT_COMMIT_AUTHOR_NAME);
60-
final String gitCommitAuthorEmail = System.getenv(DD_GIT_COMMIT_AUTHOR_EMAIL);
61-
final String gitCommitAuthorDate = System.getenv(DD_GIT_COMMIT_AUTHOR_DATE);
62-
final String gitCommitCommitterName = System.getenv(DD_GIT_COMMIT_COMMITTER_NAME);
63-
final String gitCommitCommitterEmail = System.getenv(DD_GIT_COMMIT_COMMITTER_EMAIL);
64-
final String gitCommitCommitterDate = System.getenv(DD_GIT_COMMIT_COMMITTER_DATE);
56+
final String gitCommitMessage = configProvider.getString(DD_GIT_COMMIT_MESSAGE);
57+
final String gitCommitAuthorName = configProvider.getString(DD_GIT_COMMIT_AUTHOR_NAME);
58+
final String gitCommitAuthorEmail = configProvider.getString(DD_GIT_COMMIT_AUTHOR_EMAIL);
59+
final String gitCommitAuthorDate = configProvider.getString(DD_GIT_COMMIT_AUTHOR_DATE);
60+
final String gitCommitCommitterName = configProvider.getString(DD_GIT_COMMIT_COMMITTER_NAME);
61+
final String gitCommitCommitterEmail = configProvider.getString(DD_GIT_COMMIT_COMMITTER_EMAIL);
62+
final String gitCommitCommitterDate = configProvider.getString(DD_GIT_COMMIT_COMMITTER_DATE);
6563

6664
GitInfo gitInfo =
6765
new GitInfo(
@@ -82,8 +80,8 @@ public GitInfo build(@Nullable String repositoryPath) {
8280
if (repoUrl == null || repoUrl.isEmpty()) {
8381
log.error(
8482
"Could not resolve git repository URL (can be provided via "
85-
+ GitInfo.DD_GIT_REPOSITORY_URL
86-
+ " env var, "
83+
+ Strings.propertyNameToEnvironmentVariableName(DD_GIT_REPOSITORY_URL)
84+
+ " env var or corresponding system property, "
8785
+ GeneralConfig.TAGS
8886
+ " config property or by embedding git metadata at build time)");
8987
}
@@ -94,10 +92,10 @@ public GitInfo build(@Nullable String repositoryPath) {
9492
"Git commit SHA could not be resolved or is invalid: "
9593
+ commitSha
9694
+ " (can be provided via "
97-
+ GitInfo.DD_GIT_COMMIT_SHA
98-
+ " env var, "
95+
+ Strings.propertyNameToEnvironmentVariableName(DD_GIT_COMMIT_SHA)
96+
+ " env var or corresponding system property, "
9997
+ GeneralConfig.TAGS
100-
+ " config property or by embedding git metadata at build time; must be a full-length SHA_");
98+
+ " config property or by embedding git metadata at build time; must be a full-length SHA");
10199
}
102100
}
103101

internal-api/src/test/groovy/datadog/trace/api/git/UserSuppliedGitInfoBuilderTest.groovy

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ class UserSuppliedGitInfoBuilderTest extends DDSpecification {
2020
gitInfo.isEmpty()
2121
}
2222

23-
def "user supplied git info: #envVariable"() {
23+
def "user supplied git info: env var #envVariable"() {
2424
setup:
25-
environmentVariables.set(envVariable, value)
25+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(envVariable), value)
2626

2727
when:
2828
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)
@@ -32,23 +32,49 @@ class UserSuppliedGitInfoBuilderTest extends DDSpecification {
3232
gitInfoValueProvider.call(gitInfo) == value
3333

3434
where:
35-
envVariable | value | gitInfoValueProvider
36-
GitInfo.DD_GIT_REPOSITORY_URL | "git repo URL" | { it.repositoryURL }
37-
GitInfo.DD_GIT_BRANCH | "git branch" | { it.branch }
38-
GitInfo.DD_GIT_TAG | "git tag" | { it.tag }
39-
GitInfo.DD_GIT_COMMIT_SHA | "commit SHA" | { it.commit.sha }
40-
GitInfo.DD_GIT_COMMIT_MESSAGE | "commit message" | { it.commit.fullMessage }
41-
GitInfo.DD_GIT_COMMIT_AUTHOR_NAME | "commit author" | { it.commit.author.name }
42-
GitInfo.DD_GIT_COMMIT_AUTHOR_EMAIL | "commit author mail" | { it.commit.author.email }
43-
GitInfo.DD_GIT_COMMIT_AUTHOR_DATE | "2022-12-29T11:38:44.254Z" | { it.commit.author.iso8601Date }
44-
GitInfo.DD_GIT_COMMIT_COMMITTER_NAME | "committer" | { it.commit.committer.name }
45-
GitInfo.DD_GIT_COMMIT_COMMITTER_EMAIL | "committer mail" | { it.commit.committer.email }
46-
GitInfo.DD_GIT_COMMIT_COMMITTER_DATE | "2022-12-29T10:38:44.254Z" | { it.commit.committer.iso8601Date }
35+
envVariable | value | gitInfoValueProvider
36+
UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL | "git repo URL" | { it.repositoryURL }
37+
UserSuppliedGitInfoBuilder.DD_GIT_BRANCH | "git branch" | { it.branch }
38+
UserSuppliedGitInfoBuilder.DD_GIT_TAG | "git tag" | { it.tag }
39+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA | "commit SHA" | { it.commit.sha }
40+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_MESSAGE | "commit message" | { it.commit.fullMessage }
41+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_NAME | "commit author" | { it.commit.author.name }
42+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_EMAIL | "commit author mail" | { it.commit.author.email }
43+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_DATE | "2022-12-29T11:38:44.254Z" | { it.commit.author.iso8601Date }
44+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_NAME | "committer" | { it.commit.committer.name }
45+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_EMAIL | "committer mail" | { it.commit.committer.email }
46+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_DATE | "2022-12-29T10:38:44.254Z" | { it.commit.committer.iso8601Date }
47+
}
48+
49+
def "user supplied git info: system property #systemProperty"() {
50+
setup:
51+
System.setProperty(Strings.propertyNameToSystemPropertyName(systemProperty), value)
52+
53+
when:
54+
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)
55+
56+
then:
57+
!gitInfo.isEmpty()
58+
gitInfoValueProvider.call(gitInfo) == value
59+
60+
where:
61+
systemProperty | value | gitInfoValueProvider
62+
UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL | "git repo URL" | { it.repositoryURL }
63+
UserSuppliedGitInfoBuilder.DD_GIT_BRANCH | "git branch" | { it.branch }
64+
UserSuppliedGitInfoBuilder.DD_GIT_TAG | "git tag" | { it.tag }
65+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA | "commit SHA" | { it.commit.sha }
66+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_MESSAGE | "commit message" | { it.commit.fullMessage }
67+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_NAME | "commit author" | { it.commit.author.name }
68+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_EMAIL | "commit author mail" | { it.commit.author.email }
69+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_AUTHOR_DATE | "2022-12-29T11:38:44.254Z" | { it.commit.author.iso8601Date }
70+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_NAME | "committer" | { it.commit.committer.name }
71+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_EMAIL | "committer mail" | { it.commit.committer.email }
72+
UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_COMMITTER_DATE | "2022-12-29T10:38:44.254Z" | { it.commit.committer.iso8601Date }
4773
}
4874

4975
def "branch name is normalized"() {
5076
setup:
51-
environmentVariables.set(GitInfo.DD_GIT_BRANCH, "origin/myBranch")
77+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_BRANCH), "origin/myBranch")
5278

5379
when:
5480
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)
@@ -60,7 +86,7 @@ class UserSuppliedGitInfoBuilderTest extends DDSpecification {
6086

6187
def "tag can be supplied in branch var"() {
6288
setup:
63-
environmentVariables.set(GitInfo.DD_GIT_BRANCH, "refs/tags/myTag")
89+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_BRANCH), "refs/tags/myTag")
6490

6591
when:
6692
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)
@@ -73,8 +99,8 @@ class UserSuppliedGitInfoBuilderTest extends DDSpecification {
7399

74100
def "dedicated tag var has preference over tag supplied inside branch var"() {
75101
setup:
76-
environmentVariables.set(GitInfo.DD_GIT_TAG, "myProvidedTag")
77-
environmentVariables.set(GitInfo.DD_GIT_BRANCH, "refs/tags/myTag")
102+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_TAG), "myProvidedTag")
103+
environmentVariables.set(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_BRANCH), "refs/tags/myTag")
78104

79105
when:
80106
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)
@@ -101,8 +127,8 @@ class UserSuppliedGitInfoBuilderTest extends DDSpecification {
101127
def "global tags have lower priority than dedicated environment variables"() {
102128
setup:
103129
injectEnvConfig(Strings.toEnvVar(GeneralConfig.TAGS), Tags.GIT_REPOSITORY_URL + ":repo_url," + Tags.GIT_COMMIT_SHA + ":commit_sha")
104-
injectEnvConfig(GitInfo.DD_GIT_REPOSITORY_URL, "overridden_repo_url")
105-
injectEnvConfig(GitInfo.DD_GIT_COMMIT_SHA, "overridden_commit_sha")
130+
injectEnvConfig(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL), "overridden_repo_url")
131+
injectEnvConfig(Strings.propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA), "overridden_commit_sha")
106132

107133
when:
108134
def gitInfo = new UserSuppliedGitInfoBuilder().build(null)

0 commit comments

Comments
 (0)
0