Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import datadog.trace.api.Config;
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
import datadog.trace.api.civisibility.telemetry.tag.Provider;
import datadog.trace.api.git.CommitInfo;
import datadog.trace.api.git.GitInfoProvider;
import datadog.trace.api.git.PersonInfo;
import datadog.trace.civisibility.ci.CIInfo;
import datadog.trace.civisibility.ci.CIProviderInfo;
import datadog.trace.civisibility.ci.CITagsProvider;
Expand Down Expand Up @@ -63,21 +65,22 @@ public class CiVisibilityRepoServices {
CiVisibilityRepoServices(CiVisibilityServices services, Path path) {
CIProviderInfo ciProviderInfo = services.ciProviderInfoFactory.createCIProviderInfo(path);
ciProvider = ciProviderInfo.getProvider();

CIInfo ciInfo = ciProviderInfo.buildCIInfo();
PullRequestInfo pullRequestInfo =
buildPullRequestInfo(services.config, services.environment, ciProviderInfo);

if (pullRequestInfo.isNotEmpty()) {
LOGGER.info("PR detected: {}", pullRequestInfo);
}

repoRoot = getRepoRoot(ciInfo, services.gitClientFactory);
moduleName = getModuleName(services.config, repoRoot, path);
ciTags = new CITagsProvider().getCiTags(ciInfo, pullRequestInfo);

GitClient gitClient = services.gitClientFactory.create(repoRoot);
GitRepoUnshallow gitRepoUnshallow = new GitRepoUnshallow(services.config, gitClient);
PullRequestInfo pullRequestInfo =
buildPullRequestInfo(
services.config, services.environment, ciProviderInfo, gitClient, gitRepoUnshallow);

if (!pullRequestInfo.isEmpty()) {
LOGGER.info("PR detected: {}", pullRequestInfo);
}

ciTags = new CITagsProvider().getCiTags(ciInfo, pullRequestInfo);

gitDataUploader =
buildGitDataUploader(
Expand Down Expand Up @@ -110,38 +113,71 @@ public class CiVisibilityRepoServices {
}

@Nonnull
private static PullRequestInfo buildPullRequestInfo(
Config config, CiEnvironment environment, CIProviderInfo ciProviderInfo) {
PullRequestInfo info = buildUserPullRequestInfo(config, environment);
static PullRequestInfo buildPullRequestInfo(
Config config,
CiEnvironment environment,
CIProviderInfo ciProviderInfo,
GitClient gitClient,
GitRepoUnshallow gitRepoUnshallow) {
PullRequestInfo userInfo = buildUserPullRequestInfo(config, environment, gitClient);

if (info.isComplete()) {
return info;
if (userInfo.isComplete()) {
return userInfo;
}

// complete with CI vars if user didn't provide all information
return PullRequestInfo.merge(info, ciProviderInfo.buildPullRequestInfo());
PullRequestInfo ciInfo = PullRequestInfo.merge(userInfo, ciProviderInfo.buildPullRequestInfo());
if (Strings.isNotBlank(ciInfo.getGitCommitHead().getSha())) {
// if head sha present try to populate author, committer and message info through git client
try {
gitRepoUnshallow.unshallow(true);
String headSha = ciInfo.getGitCommitHead().getSha();
PersonInfo authorInfo =
new PersonInfo(
gitClient.getAuthorName(headSha),
gitClient.getAuthorEmail(headSha),
gitClient.getAuthorDate(headSha));
PersonInfo committerInfo =
new PersonInfo(
gitClient.getCommitterName(headSha),
gitClient.getCommitterEmail(headSha),
gitClient.getCommitterDate(headSha));
CommitInfo commitInfo =
new CommitInfo(headSha, authorInfo, committerInfo, gitClient.getFullMessage(headSha));
return PullRequestInfo.merge(ciInfo, new PullRequestInfo(null, null, commitInfo, null));
} catch (Exception ignored) {
}
}
return ciInfo;
}

@Nonnull
private static PullRequestInfo buildUserPullRequestInfo(
Config config, CiEnvironment environment) {
Config config, CiEnvironment environment, GitClient gitClient) {
PullRequestInfo userInfo =
new PullRequestInfo(
config.getGitPullRequestBaseBranch(),
config.getGitPullRequestBaseBranchSha(),
config.getGitCommitHeadSha(),
new CommitInfo(config.getGitCommitHeadSha()),
null);

if (userInfo.isComplete()) {
return userInfo;
}

// logs-backend specific vars
// ddci specific vars
String targetSha = environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA);
String sourceSha = environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA);
String mergeBase = null;
try {
mergeBase = gitClient.getMergeBase(targetSha, sourceSha);
} catch (Exception ignored) {
}
PullRequestInfo ddCiInfo =
new PullRequestInfo(
null,
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA),
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA),
mergeBase,
new CommitInfo(environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)),
null);

return PullRequestInfo.merge(userInfo, ddCiInfo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)),
null,
environment.get(APPVEYOR_PR_HEAD_COMMIT),
new CommitInfo(environment.get(APPVEYOR_PR_HEAD_COMMIT)),
environment.get(APPVEYOR_PR_NUMBER));
} else {
return PullRequestInfo.EMPTY;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(AZURE_PR_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(AZURE_PR_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BITBUCKET_PR_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)),
null,
null,
CommitInfo.NOOP,
environment.get(BITRISE_PR_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BUDDY_RUN_PR_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BUILDKITE_PULL_REQUEST_NUMBER));
}
return PullRequestInfo.EMPTY;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ public Map<String, String> getCiTags(CIInfo ciInfo, PullRequestInfo pullRequestI
.withPullRequestBaseBranch(pullRequestInfo)
.withPullRequestBaseBranchSha(pullRequestInfo)
.withGitCommitHeadSha(pullRequestInfo)
.withGitCommitHeadAuthorName(pullRequestInfo)
.withGitCommitHeadAuthorEmail(pullRequestInfo)
.withGitCommitHeadAuthorDate(pullRequestInfo)
.withGitCommitHeadCommitterName(pullRequestInfo)
.withGitCommitHeadCommitterEmail(pullRequestInfo)
.withGitCommitHeadCommitterDate(pullRequestInfo)
.withGitCommitHeadMessage(pullRequestInfo)
.withPullRequestNumber(pullRequestInfo)
.withGitRepositoryUrl(gitInfo)
.withGitCommit(gitInfo)
Expand Down Expand Up @@ -133,7 +140,48 @@ public CITagsBuilder withPullRequestBaseBranchSha(final PullRequestInfo pullRequ
}

public CITagsBuilder withGitCommitHeadSha(final PullRequestInfo pullRequestInfo) {
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHeadSha());
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHead().getSha());
}

public CITagsBuilder withGitCommitHeadAuthorName(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_AUTHOR_NAME,
pullRequestInfo.getGitCommitHead().getAuthor().getName());
}

public CITagsBuilder withGitCommitHeadAuthorEmail(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_AUTHOR_EMAIL,
pullRequestInfo.getGitCommitHead().getAuthor().getEmail());
}

public CITagsBuilder withGitCommitHeadAuthorDate(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_AUTHOR_DATE,
pullRequestInfo.getGitCommitHead().getAuthor().getIso8601Date());
}

public CITagsBuilder withGitCommitHeadCommitterName(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_COMMITTER_NAME,
pullRequestInfo.getGitCommitHead().getCommitter().getName());
}

public CITagsBuilder withGitCommitHeadCommitterEmail(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_COMMITTER_EMAIL,
pullRequestInfo.getGitCommitHead().getCommitter().getEmail());
}

public CITagsBuilder withGitCommitHeadCommitterDate(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_COMMITTER_DATE,
pullRequestInfo.getGitCommitHead().getCommitter().getIso8601Date());
}

public CITagsBuilder withGitCommitHeadMessage(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_COMMIT_HEAD_MESSAGE, pullRequestInfo.getGitCommitHead().getFullMessage());
}

public CITagsBuilder withPullRequestNumber(final PullRequestInfo pullRequestInfo) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public CIInfo buildCIInfo() {
@Nonnull
@Override
public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(null, null, null, environment.get(CIRCLECI_PR_NUMBER));
return new PullRequestInfo(null, null, CommitInfo.NOOP, environment.get(CIRCLECI_PR_NUMBER));
}

private String buildPipelineUrl(final String pipelineId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(CF_PULL_REQUEST_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(CF_PULL_REQUEST_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(DRONE_PULL_REQUEST_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(DRONE_PULL_REQUEST_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)),
null,
environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA),
new CommitInfo(environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA)),
environment.get(GITLAB_PULL_REQUEST_NUMBER));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,11 @@ public PullRequestInfo buildPullRequestInfo() {
}
}

return new PullRequestInfo(baseRef, baseSha, headSha, null);
return new PullRequestInfo(baseRef, baseSha, new CommitInfo(headSha), null);

} catch (Exception e) {
LOGGER.warn("Error while parsing GitHub event", e);
return new PullRequestInfo(baseRef, null, null, null);
return new PullRequestInfo(baseRef, null, CommitInfo.NOOP, null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(JENKINS_PR_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(JENKINS_PR_NUMBER));
}

Expand Down
Loading