From a146a656523b6652a5267e7a28320f62918fe47d Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Wed, 9 Jul 2025 16:40:15 +0200 Subject: [PATCH 1/9] upgrade PR head sha to full commit info --- .../CiVisibilityRepoServices.java | 71 ++++++++++++++----- .../trace/civisibility/ci/AppVeyorInfo.java | 2 +- .../civisibility/ci/AzurePipelinesInfo.java | 2 +- .../trace/civisibility/ci/BitBucketInfo.java | 2 +- .../trace/civisibility/ci/BitriseInfo.java | 2 +- .../trace/civisibility/ci/BuddyInfo.java | 2 +- .../trace/civisibility/ci/BuildkiteInfo.java | 2 +- .../trace/civisibility/ci/CITagsProvider.java | 50 ++++++++++++- .../trace/civisibility/ci/CircleCIInfo.java | 2 +- .../trace/civisibility/ci/CodefreshInfo.java | 2 +- .../trace/civisibility/ci/DroneInfo.java | 2 +- .../trace/civisibility/ci/GitLabInfo.java | 2 +- .../civisibility/ci/GithubActionsInfo.java | 4 +- .../trace/civisibility/ci/JenkinsInfo.java | 2 +- .../civisibility/ci/PullRequestInfo.java | 38 +++++----- .../trace/civisibility/ci/TeamcityInfo.java | 2 +- .../trace/civisibility/ci/TravisInfo.java | 2 +- .../config/ExecutionSettingsFactoryImpl.java | 3 +- .../civisibility/git/tree/GitClient.java | 4 ++ .../civisibility/git/tree/NoOpGitClient.java | 6 ++ .../civisibility/git/tree/ShellGitClient.java | 17 +++-- .../CiVisibilityRepoServicesTest.groovy | 47 +++++++++++- .../ci/PullRequestInfoTest.groovy | 46 ++++++++++-- .../datadog/trace/api/git/CommitInfo.java | 27 ++++++- .../datadog/trace/api/git/PersonInfo.java | 23 +++++- .../bootstrap/instrumentation/api/Tags.java | 9 ++- .../civisibility/git/CommitInfoTest.groovy | 46 ++++++++++++ .../civisibility/git/PersonInfoTest.groovy | 41 +++++++++++ 28 files changed, 383 insertions(+), 75 deletions(-) create mode 100644 internal-api/src/test/groovy/datadog/trace/api/civisibility/git/CommitInfoTest.groovy create mode 100644 internal-api/src/test/groovy/datadog/trace/api/civisibility/git/PersonInfoTest.groovy diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java index 1aca9e30cd1..b3dd4adf61b 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java @@ -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; @@ -63,21 +65,21 @@ 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); + + if (!pullRequestInfo.isEmpty()) { + LOGGER.info("PR detected: {}", pullRequestInfo); + } + + ciTags = new CITagsProvider().getCiTags(ciInfo, pullRequestInfo); gitDataUploader = buildGitDataUploader( @@ -110,38 +112,69 @@ 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) { + 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 { + 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); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java index cdb061f2d3c..38dc610d261 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java @@ -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; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AzurePipelinesInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AzurePipelinesInfo.java index ef33df817b7..d85243ede8c 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AzurePipelinesInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AzurePipelinesInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java index 55738e3c2d8..38f94fffaf2 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java index c063e21d7e1..d4bb54e74e1 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java index f0481db461b..ee909a1cbb4 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java index 79c991e74c3..62143f9bb87 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java @@ -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; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CITagsProvider.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CITagsProvider.java index 74a62d333d9..a7d7bd0ccdc 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CITagsProvider.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CITagsProvider.java @@ -42,6 +42,13 @@ public Map 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) @@ -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) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CircleCIInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CircleCIInfo.java index 342e8e1a6ad..d1b6ae0cebb 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CircleCIInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CircleCIInfo.java @@ -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) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CodefreshInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CodefreshInfo.java index 031eebe8f91..e9abcca5962 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CodefreshInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CodefreshInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/DroneInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/DroneInfo.java index 97f16bdb875..9978bff6b14 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/DroneInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/DroneInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GitLabInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GitLabInfo.java index 8a94f166242..8abe20e694e 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GitLabInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GitLabInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GithubActionsInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GithubActionsInfo.java index c0b03070269..0be6c3e0b70 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GithubActionsInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/GithubActionsInfo.java @@ -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); } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java index 3593e54a273..57f6d3e39e1 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java @@ -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)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/PullRequestInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/PullRequestInfo.java index 39b42e3a8b6..f58151c08d9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/PullRequestInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/PullRequestInfo.java @@ -1,25 +1,28 @@ package datadog.trace.civisibility.ci; +import datadog.trace.api.git.CommitInfo; import datadog.trace.util.Strings; import java.util.Objects; +import javax.annotation.Nonnull; public class PullRequestInfo { - public static final PullRequestInfo EMPTY = new PullRequestInfo(null, null, null, null); + public static final PullRequestInfo EMPTY = + new PullRequestInfo(null, null, CommitInfo.NOOP, null); private final String pullRequestBaseBranch; private final String pullRequestBaseBranchSha; - private final String gitCommitHeadSha; + @Nonnull private final CommitInfo gitCommitHead; private final String pullRequestNumber; public PullRequestInfo( String pullRequestBaseBranch, String pullRequestBaseBranchSha, - String gitCommitHeadSha, + @Nonnull CommitInfo gitCommitHead, String pullRequestNumber) { this.pullRequestBaseBranch = pullRequestBaseBranch; this.pullRequestBaseBranchSha = pullRequestBaseBranchSha; - this.gitCommitHeadSha = gitCommitHeadSha; + this.gitCommitHead = gitCommitHead; this.pullRequestNumber = pullRequestNumber; } @@ -31,25 +34,26 @@ public String getPullRequestBaseBranchSha() { return pullRequestBaseBranchSha; } - public String getGitCommitHeadSha() { - return gitCommitHeadSha; + @Nonnull + public CommitInfo getGitCommitHead() { + return gitCommitHead; } public String getPullRequestNumber() { return pullRequestNumber; } - public boolean isNotEmpty() { - return Strings.isNotBlank(pullRequestBaseBranch) - || Strings.isNotBlank(pullRequestBaseBranchSha) - || Strings.isNotBlank(gitCommitHeadSha) - || Strings.isNotBlank(pullRequestNumber); + public boolean isEmpty() { + return Strings.isBlank(pullRequestBaseBranch) + && Strings.isBlank(pullRequestBaseBranchSha) + && gitCommitHead.isEmpty() + && Strings.isBlank(pullRequestNumber); } public boolean isComplete() { return Strings.isNotBlank(pullRequestBaseBranch) && Strings.isNotBlank(pullRequestBaseBranchSha) - && Strings.isNotBlank(gitCommitHeadSha) + && gitCommitHead.isComplete() && Strings.isNotBlank(pullRequestNumber); } @@ -68,9 +72,7 @@ public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallba Strings.isNotBlank(info.pullRequestBaseBranchSha) ? info.pullRequestBaseBranchSha : fallback.pullRequestBaseBranchSha, - Strings.isNotBlank(info.gitCommitHeadSha) - ? info.gitCommitHeadSha - : fallback.gitCommitHeadSha, + CommitInfo.merge(info.gitCommitHead, fallback.gitCommitHead), Strings.isNotBlank(info.pullRequestNumber) ? info.pullRequestNumber : fallback.pullRequestNumber); @@ -87,14 +89,14 @@ public boolean equals(Object o) { PullRequestInfo that = (PullRequestInfo) o; return Objects.equals(pullRequestBaseBranch, that.pullRequestBaseBranch) && Objects.equals(pullRequestBaseBranchSha, that.pullRequestBaseBranchSha) - && Objects.equals(gitCommitHeadSha, that.gitCommitHeadSha) + && Objects.equals(gitCommitHead, that.gitCommitHead) && Objects.equals(pullRequestNumber, that.pullRequestNumber); } @Override public int hashCode() { return Objects.hash( - pullRequestBaseBranch, pullRequestBaseBranchSha, gitCommitHeadSha, pullRequestNumber); + pullRequestBaseBranch, pullRequestBaseBranchSha, gitCommitHead, pullRequestNumber); } @Override @@ -107,7 +109,7 @@ public String toString() { + pullRequestBaseBranchSha + '\'' + ", commitSHA='" - + gitCommitHeadSha + + gitCommitHead + '\'' + ", prNumber='" + pullRequestNumber diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TeamcityInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TeamcityInfo.java index af5ede5e75a..124f51f2131 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TeamcityInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TeamcityInfo.java @@ -43,7 +43,7 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(TEAMCITY_PULL_REQUEST_TARGET_BRANCH)), null, - null, + CommitInfo.NOOP, environment.get(TEAMCITY_PULL_REQUEST_NUMBER)); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TravisInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TravisInfo.java index 0a473d49299..5a2e64589e5 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TravisInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/TravisInfo.java @@ -71,7 +71,7 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(TRAVIS_GIT_BRANCH)), null, - environment.get(TRAVIS_PR_HEAD_SHA), + new CommitInfo(environment.get(TRAVIS_PR_HEAD_SHA)), environment.get(TRAVIS_PR_NUMBER)); } return PullRequestInfo.EMPTY; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index 7d50d1a573b..fba4737b635 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -420,7 +420,8 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled, String de gitClient.getBaseCommitSha(pullRequestInfo.getPullRequestBaseBranch(), defaultBranch); } - Diff diff = gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getGitCommitHeadSha()); + Diff diff = + gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getGitCommitHead().getSha()); if (diff != null) { return diff; } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java index 2143fe35b4b..4e036ff62c8 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java @@ -76,6 +76,10 @@ Path createPackFiles(List objectHashes) String getBaseCommitSha(@Nullable String baseBranch, @Nullable String defaultBranch) throws IOException, TimeoutException, InterruptedException; + @Nullable + String getMergeBase(@Nullable String base, @Nullable String source) + throws IOException, TimeoutException, InterruptedException; + @Nullable LineDiff getGitDiff(String baseCommit, String targetCommit) throws IOException, TimeoutException, InterruptedException; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java index 1ec0f2ecf8a..8b2bf47f904 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java @@ -132,6 +132,12 @@ public String getBaseCommitSha(@Nullable String baseBranch, @Nullable String def return null; } + @Nullable + @Override + public String getMergeBase(@Nullable String base, @Nullable String source) { + return null; + } + @Nullable @Override public LineDiff getGitDiff(String baseCommit, String targetCommit) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java index afcc629afed..7a47dc9050d 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java @@ -958,20 +958,23 @@ List sortBaseBranchCandidates( } /** - * Returns the merge base between to branches + * Returns the merge base between two commits or references * - * @param baseBranch Base branch. Must be remote, i.e. "origin/master" - * @param sourceBranch Source branch - * @return Merge base between the two branches + * @param base Base commit SHA or reference (HEAD, branch name, etc) + * @param source Source commit SHA or reference (HEAD, branch name, etc) + * @return Merge base between the two references */ - String getMergeBase(String baseBranch, String sourceBranch) + public String getMergeBase(@Nullable String base, @Nullable String source) throws IOException, InterruptedException, TimeoutException { + if (GitUtils.isNotValidCommit(base) || GitUtils.isNotValidCommit(source)) { + return null; + } try { return commandExecutor - .executeCommand(IOUtils::readFully, "git", "merge-base", baseBranch, sourceBranch) + .executeCommand(IOUtils::readFully, "git", "merge-base", base, source) .trim(); } catch (ShellCommandExecutor.ShellCommandFailedException e) { - LOGGER.debug("Error calculating common ancestor for {} and {}", baseBranch, sourceBranch, e); + LOGGER.debug("Error calculating common ancestor for {} and {}", base, source, e); } return null; } diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy index 0250b4452f2..6ffccbf0a66 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy @@ -1,9 +1,14 @@ package datadog.trace.civisibility import datadog.trace.api.Config -import spock.lang.Specification - +import datadog.trace.api.git.CommitInfo +import datadog.trace.api.git.PersonInfo +import datadog.trace.civisibility.ci.CIProviderInfo +import datadog.trace.civisibility.ci.PullRequestInfo +import datadog.trace.civisibility.ci.env.CiEnvironment +import datadog.trace.civisibility.git.tree.GitClient import java.nio.file.Paths +import spock.lang.Specification class CiVisibilityRepoServicesTest extends Specification { @@ -25,4 +30,42 @@ class CiVisibilityRepoServicesTest extends Specification { null | "child-module" | "service-name" | "child-module" null | "" | "service-name" | "service-name" } + + def "test build PR info"() { + setup: + def expectedInfo = new PullRequestInfo( + "master", + "baseSha", + new CommitInfo( + "sourceSha", + new PersonInfo("john", "john@doe.com", "never"), + PersonInfo.NOOP, + "hello world!" + ), + "42" + ) + + def config = Stub(Config) + config.getGitPullRequestBaseBranch() >> expectedInfo.getPullRequestBaseBranch() + + def environment = Stub(CiEnvironment) + environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA) >> "targetSha" + environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA) >> expectedInfo.getGitCommitHead().getSha() + + def ciProviderInfo = Stub(CIProviderInfo) + ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber()) + + def gitClient = Stub(GitClient) + gitClient.getMergeBase("targetSha", "sourceSha") >> expectedInfo.getPullRequestBaseBranchSha() + gitClient.getAuthorName("sourceSha") >> expectedInfo.getGitCommitHead().getAuthor().getName() + gitClient.getAuthorEmail("sourceSha") >> expectedInfo.getGitCommitHead().getAuthor().getEmail() + gitClient.getAuthorDate("sourceSha") >> expectedInfo.getGitCommitHead().getAuthor().getIso8601Date() + gitClient.getCommitterName("sourceSha") >> expectedInfo.getGitCommitHead().getCommitter().getName() + gitClient.getCommitterEmail("sourceSha") >> expectedInfo.getGitCommitHead().getCommitter().getEmail() + gitClient.getCommitterDate("sourceSha") >> expectedInfo.getGitCommitHead().getCommitter().getIso8601Date() + gitClient.getFullMessage("sourceSha") >> expectedInfo.getGitCommitHead().getFullMessage() + + expect: + CiVisibilityRepoServices.buildPullRequestInfo(config, environment, ciProviderInfo, gitClient) == expectedInfo + } } diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/PullRequestInfoTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/PullRequestInfoTest.groovy index abe127b0819..f86a58834a7 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/PullRequestInfoTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/PullRequestInfoTest.groovy @@ -1,16 +1,50 @@ package datadog.trace.civisibility.ci +import datadog.trace.api.git.CommitInfo +import datadog.trace.api.git.PersonInfo import spock.lang.Specification class PullRequestInfoTest extends Specification { - def "test merging of informations"() { + private static final PersonInfo PERSON_A = new PersonInfo("nameA", "emailA", "dateA") + private static final PersonInfo PERSON_B = new PersonInfo("nameB", "emailB", "dateB") + private static final PersonInfo EMPTY_PERSON = new PersonInfo(null, null, null) + private static final CommitInfo COMMIT_A = new CommitInfo("shaA", PERSON_A, PERSON_A, "msgA") + private static final CommitInfo COMMIT_B = new CommitInfo("shaB", PERSON_B, PERSON_B, "msgB") + private static final CommitInfo EMPTY_COMMIT = new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) + + def "test isEmpty"() { + expect: + info.isEmpty() == empty + + where: + info | empty + new PullRequestInfo(null, null, EMPTY_COMMIT, null) | true + new PullRequestInfo("", "", EMPTY_COMMIT, "") | true + new PullRequestInfo(null, "", COMMIT_A, "42") | false + new PullRequestInfo("branch", "baseSha", COMMIT_A, "42") | false + } + + def "test isComplete"() { + expect: + info.isComplete() == empty + + where: + info | empty + new PullRequestInfo(null, null, EMPTY_COMMIT, null) | false + new PullRequestInfo("", "", EMPTY_COMMIT, "") | false + new PullRequestInfo(null, "", COMMIT_A, "42") | false + new PullRequestInfo("branch", "baseSha", COMMIT_A, "42") | true + } + + def "test info merge"() { + expect: PullRequestInfo.merge(infoA, infoB) == result where: - infoA | infoB | result - new PullRequestInfo("branchA", "a", "a", "42") | new PullRequestInfo("branchB", "b", "b", "28") | new PullRequestInfo("branchA", "a", "a", "42") - new PullRequestInfo(null, null, null, null) | new PullRequestInfo("branchB", "b", "b", "42") | new PullRequestInfo("branchB", "b", "b", "42") - new PullRequestInfo("branchA", null, null, "42") | new PullRequestInfo("branchB", "b", "b", null) | new PullRequestInfo("branchA", "b", "b", "42") - new PullRequestInfo("branchA", null, null, "42") | new PullRequestInfo(null, null, null, null) | new PullRequestInfo("branchA", null, null, null) + infoA | infoB | result + new PullRequestInfo("branchA", "baseShaA", COMMIT_A, "42") | new PullRequestInfo("branchB", "baseShaB", COMMIT_B, "28") | new PullRequestInfo("branchA", "baseShaA", COMMIT_A, "42") + new PullRequestInfo(null, null, EMPTY_COMMIT, null) | new PullRequestInfo("branchB", "baseShaB", COMMIT_B, "28") | new PullRequestInfo("branchB", "baseShaB", COMMIT_B, "28") + new PullRequestInfo("branchA", null, EMPTY_COMMIT, "42") | new PullRequestInfo("branchB", "baseShaB", COMMIT_B, null) | new PullRequestInfo("branchA", "baseShaB", COMMIT_B, "42") + new PullRequestInfo("branchA", null, EMPTY_COMMIT, "42") | new PullRequestInfo(null, null, EMPTY_COMMIT, null) | new PullRequestInfo("branchA", null, EMPTY_COMMIT, "42") } } diff --git a/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java b/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java index 3cd7182a2df..afca5d1b1fb 100644 --- a/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java +++ b/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java @@ -1,5 +1,6 @@ package datadog.trace.api.git; +import datadog.trace.util.Strings; import java.util.Objects; public class CommitInfo { @@ -44,10 +45,32 @@ public String getFullMessage() { } public boolean isEmpty() { - return (sha == null || sha.isEmpty()) + return Strings.isBlank(sha) && (author == null || author.isEmpty()) && (committer == null || committer.isEmpty()) - && (fullMessage == null || fullMessage.isEmpty()); + && Strings.isBlank(fullMessage); + } + + public boolean isComplete() { + return Strings.isNotBlank(sha) + && (author != null && author.isComplete()) + && (committer != null && committer.isComplete()) + && Strings.isNotBlank(fullMessage); + } + + /** + * Merges info by completing the empty information fields with the fallback's + * + * @param info Base commit info + * @param fallback Fallback commit info + * @return Completed commit info + */ + public static CommitInfo merge(CommitInfo info, CommitInfo fallback) { + return new CommitInfo( + Strings.isNotBlank(info.sha) ? info.sha : fallback.sha, + PersonInfo.merge(info.author, fallback.author), + PersonInfo.merge(info.committer, fallback.committer), + Strings.isNotBlank(info.fullMessage) ? info.fullMessage : fallback.fullMessage); } @Override diff --git a/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java b/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java index 3b1019f894e..553bf175d19 100644 --- a/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java +++ b/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java @@ -1,5 +1,6 @@ package datadog.trace.api.git; +import datadog.trace.util.Strings; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Objects; @@ -48,9 +49,25 @@ public String getIso8601Date() { } public boolean isEmpty() { - return (name == null || name.isEmpty()) - && (email == null || email.isEmpty()) - && (iso8601Date == null || iso8601Date.isEmpty()); + return Strings.isBlank(name) && Strings.isBlank(email) && Strings.isBlank(iso8601Date); + } + + public boolean isComplete() { + return Strings.isNotBlank(name) && Strings.isNotBlank(email) && Strings.isNotBlank(iso8601Date); + } + + /** + * Merges info by completing the empty information fields with the fallback's + * + * @param info Base person info + * @param fallback Fallback person info + * @return Completed person info + */ + public static PersonInfo merge(final PersonInfo info, final PersonInfo fallback) { + return new PersonInfo( + Strings.isNotBlank(info.name) ? info.name : fallback.name, + Strings.isNotBlank(info.email) ? info.email : fallback.email, + Strings.isNotBlank(info.iso8601Date) ? info.iso8601Date : fallback.iso8601Date); } @Override diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Tags.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Tags.java index 3c8b9d7b9d6..196f2557258 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Tags.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Tags.java @@ -132,7 +132,14 @@ public class Tags { public static final String GIT_TAG = "git.tag"; public static final String GIT_PULL_REQUEST_BASE_BRANCH = "git.pull_request.base_branch"; public static final String GIT_PULL_REQUEST_BASE_BRANCH_SHA = "git.pull_request.base_branch_sha"; - public static final String GIT_COMMIT_HEAD_SHA = "git.commit.head_sha"; + public static final String GIT_COMMIT_HEAD_SHA = "git.commit.head.sha"; + public static final String GIT_COMMIT_HEAD_AUTHOR_NAME = "git.commit.head.author.name"; + public static final String GIT_COMMIT_HEAD_AUTHOR_EMAIL = "git.commit.head.author.email"; + public static final String GIT_COMMIT_HEAD_AUTHOR_DATE = "git.commit.head.author.date"; + public static final String GIT_COMMIT_HEAD_COMMITTER_NAME = "git.commit.head.committer.name"; + public static final String GIT_COMMIT_HEAD_COMMITTER_EMAIL = "git.commit.head.committer.email"; + public static final String GIT_COMMIT_HEAD_COMMITTER_DATE = "git.commit.head.committer.date"; + public static final String GIT_COMMIT_HEAD_MESSAGE = "git.commit.head.message"; public static final String PULL_REQUEST_NUMBER = "pr.number"; public static final String RUNTIME_NAME = "runtime.name"; diff --git a/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/CommitInfoTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/CommitInfoTest.groovy new file mode 100644 index 00000000000..a03bdc2da0b --- /dev/null +++ b/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/CommitInfoTest.groovy @@ -0,0 +1,46 @@ +package datadog.trace.api.civisibility.git + +import datadog.trace.api.git.CommitInfo +import datadog.trace.api.git.PersonInfo +import spock.lang.Specification + +class CommitInfoTest extends Specification { + private static final PersonInfo PERSON_A = new PersonInfo("nameA", "emailA", "dateA") + private static final PersonInfo PERSON_B = new PersonInfo("nameB", "emailB", "dateB") + private static final PersonInfo EMPTY_PERSON = new PersonInfo(null, null, null) + + def "test isEmpty"() { + expect: + info.isEmpty() == empty + + where: + info | empty + new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) | true + new CommitInfo("", EMPTY_PERSON, EMPTY_PERSON, "") | true + new CommitInfo(null, EMPTY_PERSON, PERSON_A, "msg") | false + new CommitInfo("sha", PERSON_A, PERSON_A, "msg") | false + } + + def "test isComplete"() { + expect: + info.isComplete() == complete + + where: + info | complete + new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) | false + new CommitInfo("", EMPTY_PERSON, EMPTY_PERSON, "") | false + new CommitInfo(null, EMPTY_PERSON, PERSON_A, "msg") | false + new CommitInfo("sha", PERSON_A, PERSON_A, "msg") | true + } + + def "test info merge"() { + expect: + CommitInfo.merge(infoA, infoB) == result + where: + infoA | infoB | result + new CommitInfo("shaA", PERSON_A, PERSON_A, "msgA") | new CommitInfo("shaB", PERSON_B, PERSON_B, "msgB") | new CommitInfo("shaA", PERSON_A, PERSON_A, "msgA") + new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) | new CommitInfo("shaB", PERSON_B, PERSON_B, "msgB") | new CommitInfo("shaB", PERSON_B, PERSON_B, "msgB") + new CommitInfo("shaA", EMPTY_PERSON, EMPTY_PERSON, "msgA") | new CommitInfo("shaB", PERSON_B, PERSON_B, null) | new CommitInfo("shaA", PERSON_B, PERSON_B, "msgA") + new CommitInfo("shaA", EMPTY_PERSON, EMPTY_PERSON, "msgA") | new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) | new CommitInfo("shaA", EMPTY_PERSON, EMPTY_PERSON, "msgA") + } +} diff --git a/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/PersonInfoTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/PersonInfoTest.groovy new file mode 100644 index 00000000000..2afef0fdb48 --- /dev/null +++ b/internal-api/src/test/groovy/datadog/trace/api/civisibility/git/PersonInfoTest.groovy @@ -0,0 +1,41 @@ +package datadog.trace.api.civisibility.git + +import datadog.trace.api.git.PersonInfo +import spock.lang.Specification + +class PersonInfoTest extends Specification { + def "test isEmpty"() { + expect: + info.isEmpty() == empty + + where: + info | empty + new PersonInfo(null, null, null) | true + new PersonInfo("", null, null) | true + new PersonInfo(null, "email", "date") | false + new PersonInfo("name", "email", "date") | false + } + + def "test isComplete"() { + expect: + info.isComplete() == complete + + where: + info | complete + new PersonInfo(null, null, null) | false + new PersonInfo("name", null, null) | false + new PersonInfo("", "", "") | false + new PersonInfo("name", "email", "date") | true + } + + def "test info merge"() { + expect: + PersonInfo.merge(infoA, infoB) == result + where: + infoA | infoB | result + new PersonInfo("nameA", "emailA", "dateA") | new PersonInfo("nameB", "emailB", "dateB") | new PersonInfo("nameA", "emailA", "dateA") + new PersonInfo(null, null, null) | new PersonInfo("nameB", "emailB", "dateB") | new PersonInfo("nameB", "emailB", "dateB") + new PersonInfo("nameA", null, "dateA") | new PersonInfo("nameB", "emailB", null) | new PersonInfo("nameA", "emailB", "dateA") + new PersonInfo("nameA", null, "dateA") | new PersonInfo(null, null, null) | new PersonInfo("nameA", null, "dateA") + } +} From 8ae814f659cef0e8479c13ae4a8a1a32961fccc4 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Wed, 9 Jul 2025 17:04:06 +0200 Subject: [PATCH 2/9] update attempt to fix to v5 --- .../trace/civisibility/config/ConfigurationApi.java | 5 +++-- .../civisibility/config/ConfigurationApiImpl.java | 7 ++++--- .../config/ExecutionSettingsFactoryImpl.java | 12 ++++++++++-- .../api/civisibility/config/LibraryCapability.java | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApi.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApi.java index e190fedc53d..6648f90c5fd 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApi.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApi.java @@ -35,7 +35,7 @@ public Map> getKnownTestsByModule( @Override public Map>> getTestManagementTestsByModule( - TracerEnvironment tracerEnvironment) { + TracerEnvironment tracerEnvironment, String commitSha, String commitMessage) { return Collections.emptyMap(); } }; @@ -52,5 +52,6 @@ Map> getKnownTestsByModule(TracerEnvironment tracerE throws IOException; Map>> getTestManagementTestsByModule( - TracerEnvironment tracerEnvironment) throws IOException; + TracerEnvironment tracerEnvironment, String commitSha, String commitMessage) + throws IOException; } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApiImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApiImpl.java index 76dcc1ece2e..9d94ed10cc0 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApiImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApiImpl.java @@ -319,7 +319,8 @@ private Map> parseTestIdentifiers(KnownTestsDto know @Override public Map>> getTestManagementTestsByModule( - TracerEnvironment tracerEnvironment) throws IOException { + TracerEnvironment tracerEnvironment, String commitSha, String commitMessage) + throws IOException { OkHttpUtils.CustomListener telemetryListener = new TelemetryListener.Builder(metricCollector) .requestCount(CiVisibilityCountMetric.TEST_MANAGEMENT_TESTS_REQUEST) @@ -336,9 +337,9 @@ public Map>> getTestManagementTests "ci_app_libraries_tests_request", new TestManagementDto( tracerEnvironment.getRepositoryUrl(), - tracerEnvironment.getCommitMessage(), + commitMessage, tracerEnvironment.getConfigurations().getTestBundle(), - tracerEnvironment.getSha()))); + commitSha))); String json = testManagementRequestAdapter.toJson(request); RequestBody requestBody = RequestBody.create(JSON, json); TestManagementTestsDto testManagementTestsDto = diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index fba4737b635..62c495ee390 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -12,6 +12,7 @@ import datadog.trace.civisibility.git.tree.GitClient; import datadog.trace.civisibility.git.tree.GitDataUploader; import datadog.trace.civisibility.git.tree.GitRepoUnshallow; +import datadog.trace.util.Strings; import java.nio.file.Paths; import java.util.Collection; import java.util.Collections; @@ -395,8 +396,15 @@ private Map>> getTestManagementTest return Collections.emptyMap(); } try { - return configurationApi.getTestManagementTestsByModule(tracerEnvironment); - + if (Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getSha())) { + return configurationApi.getTestManagementTestsByModule( + tracerEnvironment, + pullRequestInfo.getGitCommitHead().getSha(), + pullRequestInfo.getGitCommitHead().getFullMessage()); + } else { + return configurationApi.getTestManagementTestsByModule( + tracerEnvironment, tracerEnvironment.getSha(), tracerEnvironment.getCommitMessage()); + } } catch (Exception e) { LOGGER.error("Could not obtain list of test management tests", e); return Collections.emptyMap(); diff --git a/internal-api/src/main/java/datadog/trace/api/civisibility/config/LibraryCapability.java b/internal-api/src/main/java/datadog/trace/api/civisibility/config/LibraryCapability.java index a4cae1cc209..f4ed209ae30 100644 --- a/internal-api/src/main/java/datadog/trace/api/civisibility/config/LibraryCapability.java +++ b/internal-api/src/main/java/datadog/trace/api/civisibility/config/LibraryCapability.java @@ -8,7 +8,7 @@ public enum LibraryCapability { FAIL_FAST("fail_fast_test_order", "1"), QUARANTINE("test_management.quarantine", "1"), DISABLED("test_management.disable", "1"), - ATTEMPT_TO_FIX("test_management.attempt_to_fix", "4"); + ATTEMPT_TO_FIX("test_management.attempt_to_fix", "5"); private final String tag; private final String version; From 73b005ad1a15be7212cdb5b8981af266c15e05e9 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Thu, 10 Jul 2025 10:13:50 +0200 Subject: [PATCH 3/9] update smoke tests fixtures --- .../resources/test-failed-flaky-retries/events.ftl | 10 +++++----- .../test-failed-legacy-instrumentation/events.ftl | 2 +- .../test-failed-new-instrumentation/events.ftl | 2 +- .../test-succeed-gradle-plugin-test/events.ftl | 2 +- .../test/resources/test-succeed-junit-5/events.ftl | 4 ++-- .../test-succeed-legacy-instrumentation/events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../test-succeed-new-instrumentation/events.ftl | 4 ++-- .../resources/test-succeed-old-gradle/events.ftl | 4 ++-- .../test_failed_maven_run_flaky_retries/events.ftl | 10 +++++----- .../resources/test_successful_maven_run/events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 2 +- .../events.ftl | 2 +- .../events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 4 ++-- .../events.ftl | 14 +++++++------- .../events.ftl | 2 +- .../events.ftl | 2 +- .../events.ftl | 4 ++-- 24 files changed, 52 insertions(+), 52 deletions(-) diff --git a/dd-smoke-tests/gradle/src/test/resources/test-failed-flaky-retries/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-failed-flaky-retries/events.ftl index 27f652b7771..8fb894266ae 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-failed-flaky-retries/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-failed-flaky-retries/events.ftl @@ -243,7 +243,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, @@ -305,7 +305,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, @@ -369,7 +369,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -433,7 +433,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, @@ -497,7 +497,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_11}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-failed-legacy-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-failed-legacy-instrumentation/events.ftl index 3e567d7fbd6..686f52c3af4 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-failed-legacy-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-failed-legacy-instrumentation/events.ftl @@ -191,7 +191,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-failed-new-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-failed-new-instrumentation/events.ftl index ec327629c9b..f60c9131589 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-failed-new-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-failed-new-instrumentation/events.ftl @@ -243,7 +243,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-gradle-plugin-test/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-gradle-plugin-test/events.ftl index 078bc5ea76a..527ee76d9dc 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-gradle-plugin-test/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-gradle-plugin-test/events.ftl @@ -238,7 +238,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-junit-5/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-junit-5/events.ftl index 1793057f7b3..d5db1127f85 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-junit-5/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-junit-5/events.ftl @@ -240,7 +240,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, @@ -301,7 +301,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-legacy-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-legacy-instrumentation/events.ftl index 37b46d15064..9c28dbea433 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-legacy-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-legacy-instrumentation/events.ftl @@ -189,7 +189,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, @@ -249,7 +249,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-legacy-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-legacy-instrumentation/events.ftl index b7c6996a965..3e09ab667c8 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-legacy-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-legacy-instrumentation/events.ftl @@ -189,7 +189,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, @@ -298,7 +298,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-new-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-new-instrumentation/events.ftl index 0c7feaeb029..a36672985a7 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-new-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-forks-new-instrumentation/events.ftl @@ -238,7 +238,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, @@ -347,7 +347,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-legacy-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-legacy-instrumentation/events.ftl index 567c3cef755..999f7f04106 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-legacy-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-legacy-instrumentation/events.ftl @@ -195,7 +195,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_5}, @@ -255,7 +255,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-new-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-new-instrumentation/events.ftl index 5876e9732ad..85a0f8abdad 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-new-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-multi-module-new-instrumentation/events.ftl @@ -244,7 +244,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, @@ -304,7 +304,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-new-instrumentation/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-new-instrumentation/events.ftl index 5c3bc657bd1..5cb427be12e 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-new-instrumentation/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-new-instrumentation/events.ftl @@ -239,7 +239,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, @@ -299,7 +299,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, diff --git a/dd-smoke-tests/gradle/src/test/resources/test-succeed-old-gradle/events.ftl b/dd-smoke-tests/gradle/src/test/resources/test-succeed-old-gradle/events.ftl index 06ad43757ae..5111b76f994 100644 --- a/dd-smoke-tests/gradle/src/test/resources/test-succeed-old-gradle/events.ftl +++ b/dd-smoke-tests/gradle/src/test/resources/test-succeed-old-gradle/events.ftl @@ -189,7 +189,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_6}, @@ -249,7 +249,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_7}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_failed_maven_run_flaky_retries/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_failed_maven_run_flaky_retries/events.ftl index a3dc22da696..3663a2bd36e 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_failed_maven_run_flaky_retries/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_failed_maven_run_flaky_retries/events.ftl @@ -310,7 +310,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -373,7 +373,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, @@ -438,7 +438,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_11}, @@ -503,7 +503,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_12}, @@ -568,7 +568,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_13}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run/events.ftl index 4e48ea85cff..4c68a894536 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run/events.ftl @@ -314,7 +314,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -375,7 +375,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_builtin_coverage/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_builtin_coverage/events.ftl index 4281231d76c..5f7cce4a596 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_builtin_coverage/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_builtin_coverage/events.ftl @@ -278,7 +278,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, @@ -339,7 +339,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_child_service_propagation/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_child_service_propagation/events.ftl index 5181b3975ea..3b8e1dbfb0f 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_child_service_propagation/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_child_service_propagation/events.ftl @@ -276,7 +276,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_junit_platform_runner/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_junit_platform_runner/events.ftl index 58b02eabed4..822de2307e4 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_junit_platform_runner/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_junit_platform_runner/events.ftl @@ -330,7 +330,7 @@ "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_multiple_forks/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_multiple_forks/events.ftl index 3d48b2479aa..5b1e5a20fa6 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_multiple_forks/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_multiple_forks/events.ftl @@ -314,7 +314,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -375,7 +375,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_0_0/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_0_0/events.ftl index 4e48ea85cff..4c68a894536 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_0_0/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_0_0/events.ftl @@ -314,7 +314,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -375,7 +375,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_5_0/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_5_0/events.ftl index 4e48ea85cff..4c68a894536 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_5_0/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_surefire_3_5_0/events.ftl @@ -314,7 +314,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -375,7 +375,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_test_management/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_test_management/events.ftl index afe27bb6a55..8add90e5a8d 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_test_management/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_test_management/events.ftl @@ -278,7 +278,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, @@ -343,7 +343,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -410,7 +410,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, @@ -477,7 +477,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_11}, @@ -544,7 +544,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_12}, @@ -613,7 +613,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_13}, @@ -725,7 +725,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_15}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_arg_line_property/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_arg_line_property/events.ftl index 2d326ef7fb8..efac85e2237 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_arg_line_property/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_arg_line_property/events.ftl @@ -270,7 +270,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_8}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_cucumber/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_cucumber/events.ftl index 2e80bb1eb96..fa8d74caf57 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_cucumber/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_cucumber/events.ftl @@ -366,7 +366,7 @@ "_dd.library_capabilities.auto_test_retries" : "1", "_dd.library_capabilities.early_flake_detection" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_11}, diff --git a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_jacoco_and_argline/events.ftl b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_jacoco_and_argline/events.ftl index d6a511b4287..5d23ecff637 100644 --- a/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_jacoco_and_argline/events.ftl +++ b/dd-smoke-tests/maven/src/test/resources/test_successful_maven_run_with_jacoco_and_argline/events.ftl @@ -314,7 +314,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_9}, @@ -375,7 +375,7 @@ "_dd.library_capabilities.fail_fast_test_order" : "1", "_dd.library_capabilities.impacted_tests" : "1", "_dd.library_capabilities.test_impact_analysis" : "1", - "_dd.library_capabilities.test_management.attempt_to_fix" : "4", + "_dd.library_capabilities.test_management.attempt_to_fix" : "5", "_dd.library_capabilities.test_management.disable" : "1", "_dd.library_capabilities.test_management.quarantine" : "1", "_dd.p.tid" : ${content_meta__dd_p_tid_10}, From 48f1a0904c3e174e0ae4e9d20ce7bc2aeb1c953b Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Thu, 10 Jul 2025 16:04:05 +0200 Subject: [PATCH 4/9] implement unshallowing of parent commit --- .../CiVisibilityRepoServices.java | 8 +++++--- .../config/ExecutionSettingsFactoryImpl.java | 2 +- .../civisibility/git/tree/GitClient.java | 2 +- .../git/tree/GitDataUploaderImpl.java | 4 ++-- .../git/tree/GitRepoUnshallow.java | 8 ++++---- .../civisibility/git/tree/NoOpGitClient.java | 2 +- .../civisibility/git/tree/ShellGitClient.java | 8 +++++--- .../git/tree/GitClientTest.groovy | 20 +++++++++++-------- 8 files changed, 31 insertions(+), 23 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java index b3dd4adf61b..882b59ce02d 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java @@ -73,7 +73,7 @@ public class CiVisibilityRepoServices { GitClient gitClient = services.gitClientFactory.create(repoRoot); GitRepoUnshallow gitRepoUnshallow = new GitRepoUnshallow(services.config, gitClient); PullRequestInfo pullRequestInfo = - buildPullRequestInfo(services.config, services.environment, ciProviderInfo, gitClient); + buildPullRequestInfo(services.config, services.environment, ciProviderInfo, gitClient, gitRepoUnshallow); if (!pullRequestInfo.isEmpty()) { LOGGER.info("PR detected: {}", pullRequestInfo); @@ -116,7 +116,8 @@ static PullRequestInfo buildPullRequestInfo( Config config, CiEnvironment environment, CIProviderInfo ciProviderInfo, - GitClient gitClient) { + GitClient gitClient, + GitRepoUnshallow gitRepoUnshallow) { PullRequestInfo userInfo = buildUserPullRequestInfo(config, environment, gitClient); if (userInfo.isComplete()) { @@ -126,8 +127,9 @@ static PullRequestInfo buildPullRequestInfo( // complete with CI vars if user didn't provide all information 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 + // 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( diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index 62c495ee390..cf7bd139f05 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -420,7 +420,7 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled, String de try { if (repositoryRoot != null) { // ensure repo is not shallow before attempting to get git diff - gitRepoUnshallow.unshallow(); + gitRepoUnshallow.unshallow(false); String baseCommitSha = pullRequestInfo.getPullRequestBaseBranchSha(); if (baseCommitSha == null) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java index 4e036ff62c8..b427a26288a 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java @@ -16,7 +16,7 @@ public interface GitClient { boolean isShallow() throws IOException, TimeoutException, InterruptedException; - void unshallow(@Nullable String remoteCommitReference) + void unshallow(@Nullable String remoteCommitReference, boolean parentOnly) throws IOException, TimeoutException, InterruptedException; @Nullable diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDataUploaderImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDataUploaderImpl.java index 5cbc46a51c9..4878f7cf8af 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDataUploaderImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDataUploaderImpl.java @@ -91,7 +91,7 @@ private void uploadGitData() { LOGGER.debug("Starting git data upload, {}", gitClient); if (!config.isCiVisibilityGitUnshallowDefer()) { - gitRepoUnshallow.unshallow(); + gitRepoUnshallow.unshallow(false); } GitInfo gitInfo = gitInfoProvider.getGitInfo(repoRoot); @@ -112,7 +112,7 @@ private void uploadGitData() { return; } - if (config.isCiVisibilityGitUnshallowDefer() && gitRepoUnshallow.unshallow()) { + if (config.isCiVisibilityGitUnshallowDefer() && gitRepoUnshallow.unshallow(false)) { latestCommits = gitClient.getLatestCommits(); commitsToSkip = gitDataApi.searchCommits(remoteUrl, latestCommits); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitRepoUnshallow.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitRepoUnshallow.java index 489e2a4d377..f9dc3f28750 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitRepoUnshallow.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitRepoUnshallow.java @@ -19,7 +19,7 @@ public GitRepoUnshallow(Config config, GitClient gitClient) { this.gitClient = gitClient; } - public synchronized boolean unshallow() + public synchronized boolean unshallow(boolean parentOnly) throws IOException, InterruptedException, TimeoutException { if (!config.isCiVisibilityGitUnshallowEnabled() || !gitClient.isShallow()) { return false; @@ -27,7 +27,7 @@ public synchronized boolean unshallow() long unshallowStart = System.currentTimeMillis(); try { - gitClient.unshallow(GitClient.HEAD); + gitClient.unshallow(GitClient.HEAD, parentOnly); } catch (ShellCommandExecutor.ShellCommandFailedException e) { LOGGER.debug( "Could not unshallow using HEAD - assuming HEAD points to a local commit that does not exist in the remote repo", @@ -36,12 +36,12 @@ public synchronized boolean unshallow() try { String upstreamBranch = gitClient.getUpstreamBranchSha(); - gitClient.unshallow(upstreamBranch); + gitClient.unshallow(upstreamBranch, parentOnly); } catch (ShellCommandExecutor.ShellCommandFailedException e) { LOGGER.debug( "Could not unshallow using upstream branch - assuming currently checked out local branch does not track any remote branch", e); - gitClient.unshallow(null); + gitClient.unshallow(null, parentOnly); } LOGGER.debug("Repository unshallowing took {} ms", System.currentTimeMillis() - unshallowStart); return true; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java index 8b2bf47f904..52f959ae9a5 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/NoOpGitClient.java @@ -20,7 +20,7 @@ public boolean isShallow() { } @Override - public void unshallow(@Nullable String remoteCommitReference) { + public void unshallow(@Nullable String remoteCommitReference, boolean parentOnly) { // no op } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java index 7a47dc9050d..ac3794305bd 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java @@ -126,13 +126,14 @@ public String getUpstreamBranchSha() throws IOException, TimeoutException, Inter * * @param remoteCommitReference The commit to fetch from the remote repository, so local repo will * be updated with this commit and its ancestors. If {@code null}, everything will be fetched. + * @param parentOnly If only the parent commit should be unshallowed or the full {@code latestCommitsSince} * @throws IOException If an error was encountered while writing command input or reading output * @throws TimeoutException If timeout was reached while waiting for Git command to finish * @throws InterruptedException If current thread was interrupted while waiting for Git command to * finish */ @Override - public void unshallow(@Nullable String remoteCommitReference) + public void unshallow(@Nullable String remoteCommitReference, boolean parentOnly) throws IOException, TimeoutException, InterruptedException { executeCommand( Command.UNSHALLOW, @@ -150,13 +151,14 @@ public void unshallow(@Nullable String remoteCommitReference) .trim(); // refetch data from the server for the given period of time + String depth = parentOnly ? "--deepen=1" : String.format("--shallow-since='%s'", latestCommitsSince); if (remoteCommitReference != null && GitUtils.isValidRef(remoteCommitReference)) { String headSha = getSha(remoteCommitReference); commandExecutor.executeCommand( ShellCommandExecutor.OutputParser.IGNORE, "git", "fetch", - String.format("--shallow-since='%s'", latestCommitsSince), + depth, "--update-shallow", "--filter=blob:none", "--recurse-submodules=no", @@ -167,7 +169,7 @@ public void unshallow(@Nullable String remoteCommitReference) ShellCommandExecutor.OutputParser.IGNORE, "git", "fetch", - String.format("--shallow-since='%s'", latestCommitsSince), + depth, "--update-shallow", "--filter=blob:none", "--recurse-submodules=no", diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy index 7e59c128afa..35edee588b7 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy @@ -70,7 +70,7 @@ class GitClientTest extends Specification { upstreamBranch == "98b944cc44f18bfb78e3021de2999cdcda8efdf6" } - def "test unshallow: #remoteSha"() { + def "test unshallow: sha-#remoteSha parentOnly-#parentOnly"() { given: givenGitRepo("ci/git/shallow/git") @@ -84,16 +84,20 @@ class GitClientTest extends Specification { commits.size() == 1 when: - gitClient.unshallow(remoteSha) + gitClient.unshallow(remoteSha, parentOnly) shallow = gitClient.isShallow() commits = gitClient.getLatestCommits() then: - !shallow - commits.size() == 10 + shallow == isShallow + commits.size() == numCommits where: - remoteSha << [GitClient.HEAD, null] + remoteSha | parentOnly | isShallow | numCommits + GitClient.HEAD | false | false | 10 + null | false | false | 10 + GitClient.HEAD | true | true | 2 + null | true | true | 2 } def "test get git folder"() { @@ -166,9 +170,9 @@ class GitClientTest extends Specification { then: message == "Adding Git information to test spans (#1242)\n\n" + - "* Initial basic GitInfo implementation.\r\n\r\n" + - "* Adds Author, Committer and Message git parser.\r\n\r\n" + - "* Changes based on the review." + "* Initial basic GitInfo implementation.\r\n\r\n" + + "* Adds Author, Committer and Message git parser.\r\n\r\n" + + "* Changes based on the review." } def "test get author name"() { From 5c0ba3509cb9d0a833d2bb401294559b5d4d8083 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Thu, 10 Jul 2025 16:04:20 +0200 Subject: [PATCH 5/9] update ci spec tests --- .../trace/civisibility/ci/GithubActionsInfoTest.groovy | 6 +++--- .../agent-ci-visibility/src/test/resources/ci/appveyor.json | 4 ++-- .../agent-ci-visibility/src/test/resources/ci/travisci.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy index ca5e905e0a7..6ffdf46166e 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy @@ -40,8 +40,8 @@ class GithubActionsInfoTest extends CITagsProviderTest { def pullRequestInfo = new GithubActionsInfo(new CiEnvironmentImpl(System.getenv())).buildPullRequestInfo() then: - pullRequestInfo.pullRequestBaseBranch == "base-ref" - pullRequestInfo.pullRequestBaseBranchSha == "52e0974c74d41160a03d59ddc73bb9f5adab054b" - pullRequestInfo.gitCommitHeadSha == "df289512a51123083a8e6931dd6f57bb3883d4c4" + pullRequestInfo.getPullRequestBaseBranch() == "base-ref" + pullRequestInfo.getPullRequestBaseBranchSha() == "52e0974c74d41160a03d59ddc73bb9f5adab054b" + pullRequestInfo.getGitCommitHead().getSha() == "df289512a51123083a8e6931dd6f57bb3883d4c4" } } diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/appveyor.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/appveyor.json index 62b98a03e08..a74c9abd4bb 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/appveyor.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/appveyor.json @@ -369,7 +369,7 @@ "git.branch": "pr", "git.commit.author.email": "appveyor-commit-author-email@datadoghq.com", "git.commit.author.name": "appveyor-commit-author-name", - "git.commit.head_sha": "724faca55efebf66fc15bfccc34577c64c5480bd", + "git.commit.head.sha": "724faca55efebf66fc15bfccc34577c64c5480bd", "git.commit.message": "appveyor-commit-message\nappveyor-commit-message-extended", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "master", @@ -405,7 +405,7 @@ "git.branch": "pr", "git.commit.author.email": "appveyor-commit-author-email@datadoghq.com", "git.commit.author.name": "appveyor-commit-author-name", - "git.commit.head_sha": "724faca55efebf66fc15bfccc34577c64c5480bd", + "git.commit.head.sha": "724faca55efebf66fc15bfccc34577c64c5480bd", "git.commit.message": "appveyor-commit-message\nappveyor-commit-message-extended", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "master", diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/travisci.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/travisci.json index 72075da9bd8..1632ae54eaa 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/travisci.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/travisci.json @@ -564,7 +564,7 @@ "ci.pipeline.url": "https://travisci.com/pipeline", "ci.provider.name": "travisci", "git.branch": "pr", - "git.commit.head_sha": "724faca55efebf66fc15bfccc34577c64c5480bd", + "git.commit.head.sha": "724faca55efebf66fc15bfccc34577c64c5480bd", "git.commit.message": "travis-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "master", From 1bfd5c856c2b9423bd66dfbdc6c502b7a05488a3 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Thu, 10 Jul 2025 16:14:31 +0200 Subject: [PATCH 6/9] linting --- .../trace/civisibility/CiVisibilityRepoServices.java | 3 ++- .../datadog/trace/civisibility/git/tree/ShellGitClient.java | 6 ++++-- .../trace/civisibility/git/tree/GitClientTest.groovy | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java index 882b59ce02d..3fc0eb482cc 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java @@ -73,7 +73,8 @@ public class CiVisibilityRepoServices { GitClient gitClient = services.gitClientFactory.create(repoRoot); GitRepoUnshallow gitRepoUnshallow = new GitRepoUnshallow(services.config, gitClient); PullRequestInfo pullRequestInfo = - buildPullRequestInfo(services.config, services.environment, ciProviderInfo, gitClient, gitRepoUnshallow); + buildPullRequestInfo( + services.config, services.environment, ciProviderInfo, gitClient, gitRepoUnshallow); if (!pullRequestInfo.isEmpty()) { LOGGER.info("PR detected: {}", pullRequestInfo); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java index ac3794305bd..45a73449268 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java @@ -126,7 +126,8 @@ public String getUpstreamBranchSha() throws IOException, TimeoutException, Inter * * @param remoteCommitReference The commit to fetch from the remote repository, so local repo will * be updated with this commit and its ancestors. If {@code null}, everything will be fetched. - * @param parentOnly If only the parent commit should be unshallowed or the full {@code latestCommitsSince} + * @param parentOnly If only the parent commit should be unshallowed or the full {@code + * latestCommitsSince} * @throws IOException If an error was encountered while writing command input or reading output * @throws TimeoutException If timeout was reached while waiting for Git command to finish * @throws InterruptedException If current thread was interrupted while waiting for Git command to @@ -151,7 +152,8 @@ public void unshallow(@Nullable String remoteCommitReference, boolean parentOnly .trim(); // refetch data from the server for the given period of time - String depth = parentOnly ? "--deepen=1" : String.format("--shallow-since='%s'", latestCommitsSince); + String depth = + parentOnly ? "--deepen=1" : String.format("--shallow-since='%s'", latestCommitsSince); if (remoteCommitReference != null && GitUtils.isValidRef(remoteCommitReference)) { String headSha = getSha(remoteCommitReference); commandExecutor.executeCommand( diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy index 35edee588b7..ee3fed3b9d4 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/tree/GitClientTest.groovy @@ -170,9 +170,9 @@ class GitClientTest extends Specification { then: message == "Adding Git information to test spans (#1242)\n\n" + - "* Initial basic GitInfo implementation.\r\n\r\n" + - "* Adds Author, Committer and Message git parser.\r\n\r\n" + - "* Changes based on the review." + "* Initial basic GitInfo implementation.\r\n\r\n" + + "* Adds Author, Committer and Message git parser.\r\n\r\n" + + "* Changes based on the review." } def "test get author name"() { From 57c835b2c28ebd1c5d10518b494a455cf6650fed Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Fri, 11 Jul 2025 10:28:10 +0200 Subject: [PATCH 7/9] fix missing argument --- .../trace/civisibility/CiVisibilityRepoServicesTest.groovy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy index 6ffccbf0a66..a683da60369 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/CiVisibilityRepoServicesTest.groovy @@ -7,6 +7,7 @@ import datadog.trace.civisibility.ci.CIProviderInfo import datadog.trace.civisibility.ci.PullRequestInfo import datadog.trace.civisibility.ci.env.CiEnvironment import datadog.trace.civisibility.git.tree.GitClient +import datadog.trace.civisibility.git.tree.GitRepoUnshallow import java.nio.file.Paths import spock.lang.Specification @@ -52,6 +53,7 @@ class CiVisibilityRepoServicesTest extends Specification { environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA) >> "targetSha" environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA) >> expectedInfo.getGitCommitHead().getSha() + def repoUnshallow = Stub(GitRepoUnshallow) def ciProviderInfo = Stub(CIProviderInfo) ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber()) @@ -66,6 +68,6 @@ class CiVisibilityRepoServicesTest extends Specification { gitClient.getFullMessage("sourceSha") >> expectedInfo.getGitCommitHead().getFullMessage() expect: - CiVisibilityRepoServices.buildPullRequestInfo(config, environment, ciProviderInfo, gitClient) == expectedInfo + CiVisibilityRepoServices.buildPullRequestInfo(config, environment, ciProviderInfo, gitClient, repoUnshallow) == expectedInfo } } From 6b905ade72f25fdd1897f682b17476e7bda33314 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Fri, 11 Jul 2025 10:50:49 +0200 Subject: [PATCH 8/9] also check head commit message before using it --- .../civisibility/config/ExecutionSettingsFactoryImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index cf7bd139f05..3a2855ada83 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -396,7 +396,8 @@ private Map>> getTestManagementTest return Collections.emptyMap(); } try { - if (Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getSha())) { + if (Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getSha()) + && Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getFullMessage())) { return configurationApi.getTestManagementTestsByModule( tracerEnvironment, pullRequestInfo.getGitCommitHead().getSha(), From 15729531194cac3deba05dae4b4ff2e1a1be3f5f Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Fri, 11 Jul 2025 11:09:42 +0200 Subject: [PATCH 9/9] fix other missing arguments --- .../trace/civisibility/config/ConfigurationApiImplTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy index 4cb3ee89c5a..c284fce0199 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy @@ -195,7 +195,7 @@ class ConfigurationApiImplTest extends Specification { def configurationApi = givenConfigurationApi(intakeServer) when: - def testManagementTests = configurationApi.getTestManagementTestsByModule(tracerEnvironment) + def testManagementTests = configurationApi.getTestManagementTestsByModule(tracerEnvironment, tracerEnvironment.getSha(), tracerEnvironment.getCommitMessage()) def quarantinedTests = testManagementTests.get(TestSetting.QUARANTINED) def disabledTests = testManagementTests.get(TestSetting.DISABLED) def attemptToFixTests = testManagementTests.get(TestSetting.ATTEMPT_TO_FIX)