Skip to content

Commit 9abbd29

Browse files
Improve PR information building (#8908)
1 parent 4b9aadc commit 9abbd29

File tree

29 files changed

+610
-21
lines changed

29 files changed

+610
-21
lines changed

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ public class CiVisibilityRepoServices {
6565
ciProvider = ciProviderInfo.getProvider();
6666

6767
CIInfo ciInfo = ciProviderInfo.buildCIInfo();
68-
PullRequestInfo pullRequestInfo = buildPullRequestInfo(services.environment, ciProviderInfo);
68+
PullRequestInfo pullRequestInfo =
69+
buildPullRequestInfo(services.config, services.environment, ciProviderInfo);
6970

7071
if (pullRequestInfo.isNotEmpty()) {
7172
LOGGER.info("PR detected: {}", pullRequestInfo);
@@ -110,18 +111,38 @@ public class CiVisibilityRepoServices {
110111

111112
@Nonnull
112113
private static PullRequestInfo buildPullRequestInfo(
113-
CiEnvironment environment, CIProviderInfo ciProviderInfo) {
114-
PullRequestInfo ciProviderPrInfo = ciProviderInfo.buildPullRequestInfo();
115-
if (ciProviderPrInfo.isNotEmpty()) {
116-
return ciProviderPrInfo;
114+
Config config, CiEnvironment environment, CIProviderInfo ciProviderInfo) {
115+
PullRequestInfo info = buildUserPullRequestInfo(config, environment);
116+
117+
if (info.isComplete()) {
118+
return info;
119+
}
120+
121+
// complete with CI vars if user didn't provide all information
122+
return PullRequestInfo.merge(info, ciProviderInfo.buildPullRequestInfo());
123+
}
124+
125+
@Nonnull
126+
private static PullRequestInfo buildUserPullRequestInfo(
127+
Config config, CiEnvironment environment) {
128+
PullRequestInfo userInfo =
129+
new PullRequestInfo(
130+
config.getGitPullRequestBaseBranch(),
131+
config.getGitPullRequestBaseBranchSha(),
132+
config.getGitCommitHeadSha());
133+
134+
if (userInfo.isComplete()) {
135+
return userInfo;
117136
}
118137

119-
// could not get PR info from CI provider,
120-
// check if it was set manually
121-
return new PullRequestInfo(
122-
null,
123-
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA),
124-
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA));
138+
// logs-backend specific vars
139+
PullRequestInfo ddCiInfo =
140+
new PullRequestInfo(
141+
null,
142+
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA),
143+
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA));
144+
145+
return PullRequestInfo.merge(userInfo, ddCiInfo);
125146
}
126147

127148
private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datadog.trace.api.git.GitInfo;
1010
import datadog.trace.api.git.PersonInfo;
1111
import datadog.trace.civisibility.ci.env.CiEnvironment;
12+
import datadog.trace.util.Strings;
1213
import javax.annotation.Nonnull;
1314

1415
class AppVeyorInfo implements CIProviderInfo {
@@ -25,6 +26,8 @@ class AppVeyorInfo implements CIProviderInfo {
2526
public static final String APPVEYOR_REPO_BRANCH = "APPVEYOR_REPO_BRANCH";
2627
public static final String APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH =
2728
"APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH";
29+
public static final String APPVEYOR_PULL_REQUEST_HEAD_COMMIT =
30+
"APPVEYOR_PULL_REQUEST_HEAD_COMMIT";
2831
public static final String APPVEYOR_REPO_TAG_NAME = "APPVEYOR_REPO_TAG_NAME";
2932
public static final String APPVEYOR_REPO_COMMIT_MESSAGE_SUBJECT = "APPVEYOR_REPO_COMMIT_MESSAGE";
3033
public static final String APPVEYOR_REPO_COMMIT_MESSAGE_BODY =
@@ -83,7 +86,15 @@ public CIInfo buildCIInfo() {
8386
@Nonnull
8487
@Override
8588
public PullRequestInfo buildPullRequestInfo() {
86-
return PullRequestInfo.EMPTY;
89+
// check if PR is detected
90+
if (Strings.isNotBlank(environment.get(APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH))) {
91+
return new PullRequestInfo(
92+
normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)),
93+
null,
94+
environment.get(APPVEYOR_PULL_REQUEST_HEAD_COMMIT));
95+
} else {
96+
return PullRequestInfo.EMPTY;
97+
}
8798
}
8899

89100
private String buildGitBranch(final String repoProvider) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class BitBucketInfo implements CIProviderInfo {
2626
public static final String BITBUCKET_GIT_COMMIT = "BITBUCKET_COMMIT";
2727
public static final String BITBUCKET_GIT_BRANCH = "BITBUCKET_BRANCH";
2828
public static final String BITBUCKET_GIT_TAG = "BITBUCKET_TAG";
29+
public static final String BITBUCKET_PR_DESTINATION_BRANCH = "BITBUCKET_PR_DESTINATION_BRANCH";
2930

3031
private final CiEnvironment environment;
3132

@@ -74,7 +75,8 @@ public CIInfo buildCIInfo() {
7475
@Nonnull
7576
@Override
7677
public PullRequestInfo buildPullRequestInfo() {
77-
return PullRequestInfo.EMPTY;
78+
return new PullRequestInfo(
79+
normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)), null, null);
7880
}
7981

8082
private String buildPipelineUrl(final String repo, final String number) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
class BitriseInfo implements CIProviderInfo {
1616

17+
// https://devcenter.bitrise.io/en/references/available-environment-variables.html
1718
public static final String BITRISE = "BITRISE_BUILD_SLUG";
1819
public static final String BITRISE_PROVIDER_NAME = "bitrise";
1920
public static final String BITRISE_PIPELINE_ID = "BITRISE_BUILD_SLUG";
@@ -31,6 +32,7 @@ class BitriseInfo implements CIProviderInfo {
3132
public static final String BITRISE_GIT_AUTHOR_EMAIL = "GIT_CLONE_COMMIT_AUTHOR_EMAIL";
3233
public static final String BITRISE_GIT_COMMITER_NAME = "GIT_CLONE_COMMIT_COMMITER_NAME";
3334
public static final String BITRISE_GIT_COMMITER_EMAIL = "GIT_CLONE_COMMIT_COMMITER_EMAIL";
35+
public static final String BITRISE_GIT_BRANCH_DEST = "BITRISEIO_GIT_BRANCH_DEST";
3436

3537
private final CiEnvironment environment;
3638

@@ -70,7 +72,8 @@ public CIInfo buildCIInfo() {
7072
@Nonnull
7173
@Override
7274
public PullRequestInfo buildPullRequestInfo() {
73-
return PullRequestInfo.EMPTY;
75+
return new PullRequestInfo(
76+
normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)), null, null);
7477
}
7578

7679
private String buildGitCommit() {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class BuddyInfo implements CIProviderInfo {
2727
public static final String BUDDY_GIT_COMMIT_MESSAGE = "BUDDY_EXECUTION_REVISION_MESSAGE";
2828
public static final String BUDDY_GIT_COMMIT_AUTHOR = "BUDDY_EXECUTION_REVISION_COMMITTER_NAME";
2929
public static final String BUDDY_GIT_COMMIT_EMAIL = "BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL";
30+
public static final String BUDDY_RUN_PR_BASE_BRANCH = "BUDDY_RUN_PR_BASE_BRANCH";
3031

3132
private final CiEnvironment environment;
3233

@@ -62,7 +63,8 @@ public CIInfo buildCIInfo() {
6263
@Nonnull
6364
@Override
6465
public PullRequestInfo buildPullRequestInfo() {
65-
return PullRequestInfo.EMPTY;
66+
return new PullRequestInfo(
67+
normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)), null, null);
6668
}
6769

6870
private String getPipelineId(String pipelineNumber) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class BuildkiteInfo implements CIProviderInfo {
3737
public static final String BUILDKITE_GIT_AUTHOR_EMAIL = "BUILDKITE_BUILD_AUTHOR_EMAIL";
3838
public static final String BUILDKITE_AGENT_ID = "BUILDKITE_AGENT_ID";
3939
private static final String BUILDKITE_CI_NODE_LABEL_PREFIX = "BUILDKITE_AGENT_META_DATA_";
40+
private static final String BUILDKITE_PULL_REQUEST = "BUILDKITE_PULL_REQUEST";
41+
private static final String BUILDKITE_PULL_REQUEST_BASE_BRANCH =
42+
"BUILDKITE_PULL_REQUEST_BASE_BRANCH";
4043

4144
private final CiEnvironment environment;
4245

@@ -78,9 +81,18 @@ public CIInfo buildCIInfo() {
7881
@Nonnull
7982
@Override
8083
public PullRequestInfo buildPullRequestInfo() {
84+
if (isPullRequest()) {
85+
return new PullRequestInfo(
86+
normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)), null, null);
87+
}
8188
return PullRequestInfo.EMPTY;
8289
}
8390

91+
private boolean isPullRequest() {
92+
String pullRequest = environment.get(BUILDKITE_PULL_REQUEST);
93+
return pullRequest != null && !"false".equals(pullRequest);
94+
}
95+
8496
private String buildCiNodeLabels() {
8597
List<String> labels = new ArrayList<>();
8698
for (Map.Entry<String, String> e : environment.get().entrySet()) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIProviderInfoFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public CIProviderInfo createCIProviderInfo(Path currentPath) {
5757
} else if (environment.get(AwsCodePipelineInfo.AWS_CODEPIPELINE) != null
5858
&& environment.get(AwsCodePipelineInfo.AWS_CODEPIPELINE).startsWith("codepipeline")) {
5959
return new AwsCodePipelineInfo(environment);
60+
} else if (environment.get(DroneInfo.DRONE) != null) {
61+
return new DroneInfo(environment);
6062
} else {
6163
return new UnknownCIInfo(environment, targetFolder, currentPath);
6264
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CodefreshInfo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import javax.annotation.Nonnull;
1313

1414
public class CodefreshInfo implements CIProviderInfo {
15+
16+
// https://codefresh.io/docs/docs/pipelines/variables/#system-variables
1517
public static final String CODEFRESH = "CF_BUILD_ID";
1618
public static final String CODEFRESH_PROVIDER_NAME = "codefresh";
1719
public static final String CF_STEP_NAME = "CF_STEP_NAME";
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package datadog.trace.civisibility.ci;
2+
3+
import static datadog.trace.api.git.GitUtils.filterSensitiveInfo;
4+
import static datadog.trace.api.git.GitUtils.normalizeBranch;
5+
import static datadog.trace.api.git.GitUtils.normalizeTag;
6+
import static datadog.trace.civisibility.utils.FileUtils.expandTilde;
7+
8+
import datadog.trace.api.civisibility.telemetry.tag.Provider;
9+
import datadog.trace.api.git.CommitInfo;
10+
import datadog.trace.api.git.GitInfo;
11+
import datadog.trace.api.git.PersonInfo;
12+
import datadog.trace.civisibility.ci.env.CiEnvironment;
13+
import javax.annotation.Nonnull;
14+
15+
public class DroneInfo implements CIProviderInfo {
16+
17+
public static final String DRONE = "DRONE";
18+
public static final String DRONE_PROVIDER_NAME = "drone";
19+
public static final String DRONE_BUILD_NUMBER = "DRONE_BUILD_NUMBER";
20+
public static final String DRONE_BUILD_LINK = "DRONE_BUILD_LINK";
21+
public static final String DRONE_STEP_NAME = "DRONE_STEP_NAME";
22+
public static final String DRONE_STAGE_NAME = "DRONE_STAGE_NAME";
23+
public static final String DRONE_WORKSPACE = "DRONE_WORKSPACE";
24+
public static final String DRONE_GIT_HTTP_URL = "DRONE_GIT_HTTP_URL";
25+
public static final String DRONE_COMMIT_SHA = "DRONE_COMMIT_SHA";
26+
public static final String DRONE_BRANCH = "DRONE_BRANCH";
27+
public static final String DRONE_TAG = "DRONE_TAG";
28+
public static final String DRONE_COMMIT_AUTHOR_NAME = "DRONE_COMMIT_AUTHOR_NAME";
29+
public static final String DRONE_COMMIT_AUTHOR_EMAIL = "DRONE_COMMIT_AUTHOR_EMAIL";
30+
public static final String DRONE_COMMIT_MESSAGE = "DRONE_COMMIT_MESSAGE";
31+
32+
private final CiEnvironment environment;
33+
34+
DroneInfo(CiEnvironment environment) {
35+
this.environment = environment;
36+
}
37+
38+
@Override
39+
public GitInfo buildCIGitInfo() {
40+
return new GitInfo(
41+
filterSensitiveInfo(environment.get(DRONE_GIT_HTTP_URL)),
42+
normalizeBranch(environment.get(DRONE_BRANCH)),
43+
normalizeTag(environment.get(DRONE_TAG)),
44+
new CommitInfo(
45+
environment.get(DRONE_COMMIT_SHA),
46+
buildGitAuthor(),
47+
PersonInfo.NOOP,
48+
environment.get(DRONE_COMMIT_MESSAGE)));
49+
}
50+
51+
@Override
52+
public CIInfo buildCIInfo() {
53+
return CIInfo.builder(environment)
54+
.ciProviderName(DRONE_PROVIDER_NAME)
55+
.ciPipelineNumber(environment.get(DRONE_BUILD_NUMBER))
56+
.ciPipelineUrl(environment.get(DRONE_BUILD_LINK))
57+
.ciJobName(environment.get(DRONE_STEP_NAME))
58+
.ciStageName(environment.get(DRONE_STAGE_NAME))
59+
.ciWorkspace(expandTilde(environment.get(DRONE_WORKSPACE)))
60+
.build();
61+
}
62+
63+
@Nonnull
64+
@Override
65+
public PullRequestInfo buildPullRequestInfo() {
66+
return PullRequestInfo.EMPTY;
67+
}
68+
69+
private PersonInfo buildGitAuthor() {
70+
return new PersonInfo(
71+
environment.get(DRONE_COMMIT_AUTHOR_NAME), environment.get(DRONE_COMMIT_AUTHOR_EMAIL));
72+
}
73+
74+
@Override
75+
public Provider getProvider() {
76+
return Provider.DRONE;
77+
}
78+
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GitLabInfo.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ class GitLabInfo implements CIProviderInfo {
4141
public static final String GITLAB_CI_RUNNER_TAGS = "CI_RUNNER_TAGS";
4242
public static final String GITLAB_PULL_REQUEST_BASE_BRANCH =
4343
"CI_MERGE_REQUEST_TARGET_BRANCH_NAME";
44-
public static final String GITLAB_PULL_REQUEST_BASE_BRANCH_SHA =
45-
"CI_MERGE_REQUEST_TARGET_BRANCH_SHA";
4644
public static final String GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA =
4745
"CI_MERGE_REQUEST_SOURCE_BRANCH_SHA";
4846

@@ -87,8 +85,8 @@ public CIInfo buildCIInfo() {
8785
@Override
8886
public PullRequestInfo buildPullRequestInfo() {
8987
return new PullRequestInfo(
90-
environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH),
91-
environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH_SHA),
88+
normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)),
89+
null,
9290
environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA));
9391
}
9492

0 commit comments

Comments
 (0)