From cff717097780b70047421e64f9406c1c1c5d7e84 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Mon, 28 Jul 2025 16:02:48 +0200 Subject: [PATCH 1/3] fix: use base SHA value in GHA as base branch head sha --- .../CiVisibilityRepoServices.java | 5 +- .../trace/civisibility/ci/AppVeyorInfo.java | 1 + .../civisibility/ci/AzurePipelinesInfo.java | 1 + .../trace/civisibility/ci/BitBucketInfo.java | 1 + .../trace/civisibility/ci/BitriseInfo.java | 1 + .../trace/civisibility/ci/BuddyInfo.java | 1 + .../trace/civisibility/ci/BuildkiteInfo.java | 1 + .../trace/civisibility/ci/CITagsProvider.java | 10 ++- .../trace/civisibility/ci/CircleCIInfo.java | 3 +- .../trace/civisibility/ci/CodefreshInfo.java | 1 + .../trace/civisibility/ci/DroneInfo.java | 1 + .../trace/civisibility/ci/GitLabInfo.java | 1 + .../civisibility/ci/GithubActionsInfo.java | 9 +-- .../trace/civisibility/ci/JenkinsInfo.java | 1 + .../civisibility/ci/PullRequestInfo.java | 65 +++++++++++-------- .../trace/civisibility/ci/TeamcityInfo.java | 1 + .../trace/civisibility/ci/TravisInfo.java | 1 + .../config/ExecutionSettingsFactoryImpl.java | 10 ++- .../CiVisibilityRepoServicesTest.groovy | 8 +-- .../ci/GithubActionsInfoTest.groovy | 5 +- .../ci/PullRequestInfoTest.groovy | 36 +++++----- .../bootstrap/instrumentation/api/Tags.java | 2 + 22 files changed, 104 insertions(+), 61 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 ec6ffb74885..b16e619417a 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 @@ -131,7 +131,8 @@ static PullRequestInfo buildPullRequestInfo( // if head sha present try to populate author, committer and message info through git client try { CommitInfo commitInfo = gitClient.getCommitInfo(headSha, true); - return PullRequestInfo.merge(ciInfo, new PullRequestInfo(null, null, commitInfo, null)); + return PullRequestInfo.merge( + ciInfo, new PullRequestInfo(null, null, null, commitInfo, null)); } catch (Exception ignored) { } } @@ -145,6 +146,7 @@ private static PullRequestInfo buildUserPullRequestInfo( new PullRequestInfo( config.getGitPullRequestBaseBranch(), config.getGitPullRequestBaseBranchSha(), + null, new CommitInfo(config.getGitCommitHeadSha()), null); @@ -164,6 +166,7 @@ private static PullRequestInfo buildUserPullRequestInfo( new PullRequestInfo( null, mergeBase, + null, new CommitInfo(environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)), null); 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 38dc610d261..f8bc31dd090 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,6 +91,7 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)), null, + null, new CommitInfo(environment.get(APPVEYOR_PR_HEAD_COMMIT)), environment.get(APPVEYOR_PR_NUMBER)); } else { 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 d85243ede8c..94b8c1e4b94 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,6 +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 38f94fffaf2..1c95c0d4bff 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,6 +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 d4bb54e74e1..204e547ee4a 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,6 +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 ee909a1cbb4..69554f4a300 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,6 +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 62143f9bb87..64926dad445 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,6 +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)); } 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 c3d2aae75f5..590ac81616c 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 @@ -41,6 +41,7 @@ public Map getCiTags(CIInfo ciInfo, PullRequestInfo pullRequestI .withAdditionalTags(ciInfo.getAdditionalTags()) .withPullRequestBaseBranch(pullRequestInfo) .withPullRequestBaseBranchSha(pullRequestInfo) + .withPullRequestBaseBranchHeadSha(pullRequestInfo) .withGitCommitHeadSha(pullRequestInfo) .withGitCommitHeadAuthorName(pullRequestInfo) .withGitCommitHeadAuthorEmail(pullRequestInfo) @@ -130,13 +131,16 @@ public CITagsBuilder withAdditionalTags(final Map additionalTags } public CITagsBuilder withPullRequestBaseBranch(final PullRequestInfo pullRequestInfo) { - return putTagValue( - Tags.GIT_PULL_REQUEST_BASE_BRANCH, pullRequestInfo.getPullRequestBaseBranch()); + return putTagValue(Tags.GIT_PULL_REQUEST_BASE_BRANCH, pullRequestInfo.getBaseBranch()); } public CITagsBuilder withPullRequestBaseBranchSha(final PullRequestInfo pullRequestInfo) { + return putTagValue(Tags.GIT_PULL_REQUEST_BASE_BRANCH_SHA, pullRequestInfo.getBaseBranchSha()); + } + + public CITagsBuilder withPullRequestBaseBranchHeadSha(final PullRequestInfo pullRequestInfo) { return putTagValue( - Tags.GIT_PULL_REQUEST_BASE_BRANCH_SHA, pullRequestInfo.getPullRequestBaseBranchSha()); + Tags.GIT_PULL_REQUEST_BASE_BRANCH_HEAD_SHA, pullRequestInfo.getBaseBranchHeadSha()); } public CITagsBuilder withGitCommitHeadSha(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 d1b6ae0cebb..ac26bcfcad1 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,8 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return new PullRequestInfo(null, null, CommitInfo.NOOP, environment.get(CIRCLECI_PR_NUMBER)); + return new PullRequestInfo( + null, 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 e9abcca5962..4522f70c190 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,6 +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 9978bff6b14..8979849fc0f 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,6 +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 8abe20e694e..395f2649d81 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,6 +88,7 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)), null, + null, 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 7077ad17bbf..bf579e006f1 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 @@ -107,7 +107,7 @@ public PullRequestInfo buildPullRequestInfo() { moshi.adapter(Types.newParameterizedType(Map.class, String.class, Object.class)); Map eventJson = mapJsonAdapter.fromJson(event); - String baseSha = null; + String baseBranchHeadSha = null; String headSha = null; String prNumber = null; @@ -120,7 +120,7 @@ public PullRequestInfo buildPullRequestInfo() { Map base = (Map) pullRequest.get("base"); if (base != null) { - baseSha = (String) base.get("sha"); + baseBranchHeadSha = (String) base.get("sha"); } Double number = (Double) pullRequest.get("number"); @@ -129,11 +129,12 @@ public PullRequestInfo buildPullRequestInfo() { } } - return new PullRequestInfo(baseRef, baseSha, new CommitInfo(headSha), prNumber); + return new PullRequestInfo( + baseRef, null, baseBranchHeadSha, new CommitInfo(headSha), prNumber); } catch (Exception e) { LOGGER.warn("Error while parsing GitHub event", e); - return new PullRequestInfo(baseRef, null, CommitInfo.NOOP, null); + return new PullRequestInfo(baseRef, null, 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 57f6d3e39e1..b187170c7ef 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,6 +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 75a18d3ebb2..6ccf1e64199 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 @@ -8,30 +8,37 @@ public class PullRequestInfo { public static final PullRequestInfo EMPTY = - new PullRequestInfo(null, null, CommitInfo.NOOP, null); + new PullRequestInfo(null, null, null, CommitInfo.NOOP, null); - private final String pullRequestBaseBranch; - private final String pullRequestBaseBranchSha; + private final String baseBranch; + private final String baseBranchSha; + private final String baseBranchHeadSha; @Nonnull private final CommitInfo headCommit; private final String pullRequestNumber; public PullRequestInfo( - String pullRequestBaseBranch, - String pullRequestBaseBranchSha, + String baseBranch, + String baseBranchSha, + String baseBranchHeadSha, @Nonnull CommitInfo headCommit, String pullRequestNumber) { - this.pullRequestBaseBranch = pullRequestBaseBranch; - this.pullRequestBaseBranchSha = pullRequestBaseBranchSha; + this.baseBranch = baseBranch; + this.baseBranchSha = baseBranchSha; + this.baseBranchHeadSha = baseBranchHeadSha; this.headCommit = headCommit; this.pullRequestNumber = pullRequestNumber; } - public String getPullRequestBaseBranch() { - return pullRequestBaseBranch; + public String getBaseBranch() { + return baseBranch; } - public String getPullRequestBaseBranchSha() { - return pullRequestBaseBranchSha; + public String getBaseBranchSha() { + return baseBranchSha; + } + + public String getBaseBranchHeadSha() { + return baseBranchHeadSha; } @Nonnull @@ -44,15 +51,17 @@ public String getPullRequestNumber() { } public boolean isEmpty() { - return Strings.isBlank(pullRequestBaseBranch) - && Strings.isBlank(pullRequestBaseBranchSha) + return Strings.isBlank(baseBranch) + && Strings.isBlank(baseBranchSha) + && Strings.isBlank(baseBranchHeadSha) && headCommit.isEmpty() && Strings.isBlank(pullRequestNumber); } public boolean isComplete() { - return Strings.isNotBlank(pullRequestBaseBranch) - && Strings.isNotBlank(pullRequestBaseBranchSha) + return Strings.isNotBlank(baseBranch) + && Strings.isNotBlank(baseBranchSha) + && Strings.isNotBlank(baseBranchHeadSha) && headCommit.isComplete() && Strings.isNotBlank(pullRequestNumber); } @@ -66,12 +75,11 @@ public boolean isComplete() { */ public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallback) { return new PullRequestInfo( - Strings.isNotBlank(info.pullRequestBaseBranch) - ? info.pullRequestBaseBranch - : fallback.pullRequestBaseBranch, - Strings.isNotBlank(info.pullRequestBaseBranchSha) - ? info.pullRequestBaseBranchSha - : fallback.pullRequestBaseBranchSha, + Strings.isNotBlank(info.baseBranch) ? info.baseBranch : fallback.baseBranch, + Strings.isNotBlank(info.baseBranchSha) ? info.baseBranchSha : fallback.baseBranchSha, + Strings.isNotBlank(info.baseBranchHeadSha) + ? info.baseBranchHeadSha + : fallback.baseBranchHeadSha, CommitInfo.merge(info.headCommit, fallback.headCommit), Strings.isNotBlank(info.pullRequestNumber) ? info.pullRequestNumber @@ -87,26 +95,29 @@ public boolean equals(Object o) { return false; } PullRequestInfo that = (PullRequestInfo) o; - return Objects.equals(pullRequestBaseBranch, that.pullRequestBaseBranch) - && Objects.equals(pullRequestBaseBranchSha, that.pullRequestBaseBranchSha) + return Objects.equals(baseBranch, that.baseBranch) + && Objects.equals(baseBranchSha, that.baseBranchSha) + && Objects.equals(baseBranchHeadSha, that.baseBranchHeadSha) && Objects.equals(headCommit, that.headCommit) && Objects.equals(pullRequestNumber, that.pullRequestNumber); } @Override public int hashCode() { - return Objects.hash( - pullRequestBaseBranch, pullRequestBaseBranchSha, headCommit, pullRequestNumber); + return Objects.hash(baseBranch, baseBranchSha, headCommit, pullRequestNumber); } @Override public String toString() { return "PR{" + "baseBranch='" - + pullRequestBaseBranch + + baseBranch + '\'' + ", baseSHA='" - + pullRequestBaseBranchSha + + baseBranchSha + + '\'' + + ", baseHeadSHA='" + + baseBranchHeadSha + '\'' + ", headCommit='" + headCommit 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 124f51f2131..969e6323bc6 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,6 +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 5a2e64589e5..c5e56f5538d 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,6 +71,7 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(TRAVIS_GIT_BRANCH)), null, + null, new CommitInfo(environment.get(TRAVIS_PR_HEAD_SHA)), environment.get(TRAVIS_PR_NUMBER)); } 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 4382931defc..c0acb7f83a6 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 @@ -423,10 +423,16 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled, String de // ensure repo is not shallow before attempting to get git diff gitRepoUnshallow.unshallow(); - String baseCommitSha = pullRequestInfo.getPullRequestBaseBranchSha(); + String baseCommitSha = pullRequestInfo.getBaseBranchSha(); + if (baseCommitSha == null && pullRequestInfo.getBaseBranchHeadSha() != null) { + baseCommitSha = + gitClient.getMergeBase( + pullRequestInfo.getBaseBranchHeadSha(), pullRequestInfo.getHeadCommit().getSha()); + } + if (baseCommitSha == null) { baseCommitSha = - gitClient.getBaseCommitSha(pullRequestInfo.getPullRequestBaseBranch(), defaultBranch); + gitClient.getBaseCommitSha(pullRequestInfo.getBaseBranch(), defaultBranch); } Diff diff = gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getHeadCommit().getSha()); 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 a3ddb6f4f1e..c25cb1b7d2b 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 @@ -36,7 +36,7 @@ class CiVisibilityRepoServicesTest extends Specification { setup: def expectedInfo = new PullRequestInfo( "master", - "baseSha", + "baseSha", null, new CommitInfo( "sourceSha", new PersonInfo("john", "john@doe.com", "never"), @@ -47,7 +47,7 @@ class CiVisibilityRepoServicesTest extends Specification { ) def config = Stub(Config) - config.getGitPullRequestBaseBranch() >> expectedInfo.getPullRequestBaseBranch() + config.getGitPullRequestBaseBranch() >> expectedInfo.getBaseBranch() def environment = Stub(CiEnvironment) environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA) >> "targetSha" @@ -55,10 +55,10 @@ class CiVisibilityRepoServicesTest extends Specification { def repoUnshallow = Stub(GitRepoUnshallow) def ciProviderInfo = Stub(CIProviderInfo) - ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber()) + ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber()) def gitClient = Stub(GitClient) - gitClient.getMergeBase("targetSha", "sourceSha") >> expectedInfo.getPullRequestBaseBranchSha() + gitClient.getMergeBase("targetSha", "sourceSha") >> expectedInfo.getBaseBranchSha() gitClient.getCommitInfo("sourceSha", true) >> expectedInfo.getHeadCommit() expect: 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 0be0b908c7b..5475829870b 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,9 @@ class GithubActionsInfoTest extends CITagsProviderTest { def pullRequestInfo = new GithubActionsInfo(new CiEnvironmentImpl(System.getenv())).buildPullRequestInfo() then: - pullRequestInfo.getPullRequestBaseBranch() == "base-ref" - pullRequestInfo.getPullRequestBaseBranchSha() == "52e0974c74d41160a03d59ddc73bb9f5adab054b" + pullRequestInfo.getBaseBranch() == "base-ref" + pullRequestInfo.getBaseBranchSha() == null + pullRequestInfo.getBaseBranchHeadSha() == "52e0974c74d41160a03d59ddc73bb9f5adab054b" pullRequestInfo.getHeadCommit().getSha() == "df289512a51123083a8e6931dd6f57bb3883d4c4" pullRequestInfo.getPullRequestNumber() == "1" } 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 f86a58834a7..6bc22fc9fbf 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 @@ -8,8 +8,10 @@ class PullRequestInfoTest 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) - 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 String SHA_A = "shaA" + private static final String SHA_B = "shaB" + private static final CommitInfo COMMIT_A = new CommitInfo(SHA_A, PERSON_A, PERSON_A, "msgA") + private static final CommitInfo COMMIT_B = new CommitInfo(SHA_B, PERSON_B, PERSON_B, "msgB") private static final CommitInfo EMPTY_COMMIT = new CommitInfo(null, EMPTY_PERSON, EMPTY_PERSON, null) def "test isEmpty"() { @@ -17,11 +19,11 @@ class PullRequestInfoTest extends Specification { 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 + info | empty + new PullRequestInfo(null, null, null, EMPTY_COMMIT, null) | true + new PullRequestInfo("", "", null, EMPTY_COMMIT, "") | true + new PullRequestInfo(null, "", null, COMMIT_A, "42") | false + new PullRequestInfo("branch", "baseSha", SHA_A, COMMIT_A, "42") | false } def "test isComplete"() { @@ -29,11 +31,11 @@ class PullRequestInfoTest extends Specification { 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 + info | empty + new PullRequestInfo(null, null, null, EMPTY_COMMIT, null) | false + new PullRequestInfo("", "", null, EMPTY_COMMIT, "") | false + new PullRequestInfo("branch", "", null, COMMIT_A, "42") | false + new PullRequestInfo("branch", "baseSha", SHA_A, COMMIT_A, "42") | true } def "test info merge"() { @@ -41,10 +43,10 @@ class PullRequestInfoTest extends Specification { PullRequestInfo.merge(infoA, infoB) == result where: - 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") + infoA | infoB | result + new PullRequestInfo("branchA", "baseShaA", SHA_A, COMMIT_A, "42") | new PullRequestInfo("branchB", "baseShaB", SHA_B, COMMIT_B, "28") | new PullRequestInfo("branchA", "baseShaA", SHA_A, COMMIT_A, "42") + new PullRequestInfo(null, null, null, EMPTY_COMMIT, null) | new PullRequestInfo("branchB", "baseShaB", SHA_B, COMMIT_B, "28") | new PullRequestInfo("branchB", "baseShaB", SHA_B, COMMIT_B, "28") + new PullRequestInfo("branchA", null, SHA_A, EMPTY_COMMIT, "42") | new PullRequestInfo("branchB", "baseShaB", null, COMMIT_B, null) | new PullRequestInfo("branchA", "baseShaB", SHA_A, COMMIT_B, "42") + new PullRequestInfo("branchA", null, null, EMPTY_COMMIT, "42") | new PullRequestInfo(null, null, null, EMPTY_COMMIT, null) | new PullRequestInfo("branchA", null, null, EMPTY_COMMIT, "42") } } 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 63aec166076..f50986bc47e 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,6 +132,8 @@ 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_PULL_REQUEST_BASE_BRANCH_HEAD_SHA = + "git.pull_request.base_branch_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"; From 18a659b4a9d9fecd334eb2f9606049265566209c Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Tue, 29 Jul 2025 14:40:44 +0200 Subject: [PATCH 2/3] feat: unify coalesce behavior --- .../CiVisibilityRepoServices.java | 6 ++--- .../civisibility/ci/PullRequestInfo.java | 24 ++++++++----------- .../ci/PullRequestInfoTest.groovy | 4 ++-- .../datadog/trace/api/git/CommitInfo.java | 18 +++++++------- .../datadog/trace/api/git/PersonInfo.java | 16 ++++++------- .../main/java/datadog/trace/util/Strings.java | 15 ++++++++++++ .../civisibility/git/CommitInfoTest.groovy | 4 ++-- .../civisibility/git/PersonInfoTest.groovy | 4 ++-- .../datadog/trace/util/StringsTest.groovy | 17 +++++++++++++ 9 files changed, 68 insertions(+), 40 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 b16e619417a..63db00f3dae 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 @@ -125,13 +125,13 @@ static PullRequestInfo buildPullRequestInfo( } // complete with CI vars if user didn't provide all information - PullRequestInfo ciInfo = PullRequestInfo.merge(userInfo, ciProviderInfo.buildPullRequestInfo()); + PullRequestInfo ciInfo = PullRequestInfo.coalesce(userInfo, ciProviderInfo.buildPullRequestInfo()); String headSha = ciInfo.getHeadCommit().getSha(); if (Strings.isNotBlank(headSha)) { // if head sha present try to populate author, committer and message info through git client try { CommitInfo commitInfo = gitClient.getCommitInfo(headSha, true); - return PullRequestInfo.merge( + return PullRequestInfo.coalesce( ciInfo, new PullRequestInfo(null, null, null, commitInfo, null)); } catch (Exception ignored) { } @@ -170,7 +170,7 @@ private static PullRequestInfo buildUserPullRequestInfo( new CommitInfo(environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)), null); - return PullRequestInfo.merge(userInfo, ddCiInfo); + return PullRequestInfo.coalesce(userInfo, ddCiInfo); } private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) { 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 6ccf1e64199..e755e69fd36 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 @@ -67,23 +67,19 @@ public boolean isComplete() { } /** - * Merges info by completing the empty information fields with the fallback's + * Combine infos by completing the empty information fields in {@code first} with {@code second}'s * - * @param info Base PR info - * @param fallback Fallback PR info - * @return Completed PR info + * @param first Base PR info + * @param second Fallback PR info + * @return Combined PR info */ - public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallback) { + public static PullRequestInfo coalesce(final PullRequestInfo first, final PullRequestInfo second) { return new PullRequestInfo( - Strings.isNotBlank(info.baseBranch) ? info.baseBranch : fallback.baseBranch, - Strings.isNotBlank(info.baseBranchSha) ? info.baseBranchSha : fallback.baseBranchSha, - Strings.isNotBlank(info.baseBranchHeadSha) - ? info.baseBranchHeadSha - : fallback.baseBranchHeadSha, - CommitInfo.merge(info.headCommit, fallback.headCommit), - Strings.isNotBlank(info.pullRequestNumber) - ? info.pullRequestNumber - : fallback.pullRequestNumber); + Strings.coalesce(first.baseBranch, second.baseBranch), + Strings.coalesce(first.baseBranchSha, second.baseBranchSha), + Strings.coalesce(first.baseBranchHeadSha, second.baseBranchHeadSha), + CommitInfo.coalesce(first.headCommit, second.headCommit), + Strings.coalesce(first.pullRequestNumber, second.pullRequestNumber)); } @Override 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 6bc22fc9fbf..e756c911929 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 @@ -38,9 +38,9 @@ class PullRequestInfoTest extends Specification { new PullRequestInfo("branch", "baseSha", SHA_A, COMMIT_A, "42") | true } - def "test info merge"() { + def "test info coalesce"() { expect: - PullRequestInfo.merge(infoA, infoB) == result + PullRequestInfo.coalesce(infoA, infoB) == result where: infoA | infoB | result 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 afca5d1b1fb..ad5183c4f92 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 @@ -59,18 +59,18 @@ public boolean isComplete() { } /** - * Merges info by completing the empty information fields with the fallback's + * Combine infos by completing the empty information fields in {@code first} with {@code second}'s * - * @param info Base commit info - * @param fallback Fallback commit info - * @return Completed commit info + * @param first Base commit info + * @param second Fallback commit info + * @return Combined commit info */ - public static CommitInfo merge(CommitInfo info, CommitInfo fallback) { + public static CommitInfo coalesce(final CommitInfo first, final CommitInfo second) { 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); + Strings.coalesce(first.sha, second.sha), + PersonInfo.coalesce(first.author, second.author), + PersonInfo.coalesce(first.committer, second.committer), + Strings.coalesce(first.fullMessage, second.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 553bf175d19..a7c1a083658 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 @@ -57,17 +57,17 @@ public boolean isComplete() { } /** - * Merges info by completing the empty information fields with the fallback's + * Combine infos by completing the empty information fields in {@code first} with {@code second}'s * - * @param info Base person info - * @param fallback Fallback person info - * @return Completed person info + * @param first Base person info + * @param second Fallback person info + * @return Combined person info */ - public static PersonInfo merge(final PersonInfo info, final PersonInfo fallback) { + public static PersonInfo coalesce(final PersonInfo first, final PersonInfo second) { 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); + Strings.coalesce(first.name, second.name), + Strings.coalesce(first.email, second.email), + Strings.coalesce(first.iso8601Date, second.iso8601Date)); } @Override diff --git a/internal-api/src/main/java/datadog/trace/util/Strings.java b/internal-api/src/main/java/datadog/trace/util/Strings.java index 4a93a0c9fbf..9a546169a67 100644 --- a/internal-api/src/main/java/datadog/trace/util/Strings.java +++ b/internal-api/src/main/java/datadog/trace/util/Strings.java @@ -7,6 +7,7 @@ import java.security.NoSuchAlgorithmException; import java.util.concurrent.ThreadLocalRandom; import javax.annotation.Nonnull; +import javax.annotation.Nullable; public final class Strings { @@ -240,4 +241,18 @@ public static String[] concat(String[] arr, String... extra) { System.arraycopy(extra, 0, result, arr.length, extra.length); return result; } + + /** + * @return first non-blank string out of the two, {@code null} if both are blank + */ + @Nullable + public static String coalesce(@Nullable final String first, @Nullable final String second) { + if (isNotBlank(first)) { + return first; + } else if (isNotBlank(second)) { + return second; + } else { + return null; + } + } } 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 index a03bdc2da0b..656fb376124 100644 --- 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 @@ -33,9 +33,9 @@ class CommitInfoTest extends Specification { new CommitInfo("sha", PERSON_A, PERSON_A, "msg") | true } - def "test info merge"() { + def 'test info coalesce'() { expect: - CommitInfo.merge(infoA, infoB) == result + CommitInfo.coalesce(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") 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 index 2afef0fdb48..92698a3db97 100644 --- 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 @@ -28,9 +28,9 @@ class PersonInfoTest extends Specification { new PersonInfo("name", "email", "date") | true } - def "test info merge"() { + def 'test info coalesce'() { expect: - PersonInfo.merge(infoA, infoB) == result + PersonInfo.coalesce(infoA, infoB) == result where: infoA | infoB | result new PersonInfo("nameA", "emailA", "dateA") | new PersonInfo("nameB", "emailB", "dateB") | new PersonInfo("nameA", "emailA", "dateA") diff --git a/internal-api/src/test/groovy/datadog/trace/util/StringsTest.groovy b/internal-api/src/test/groovy/datadog/trace/util/StringsTest.groovy index 544874c6816..6479b9eed1f 100644 --- a/internal-api/src/test/groovy/datadog/trace/util/StringsTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/util/StringsTest.groovy @@ -158,4 +158,21 @@ class StringsTest extends DDSpecification { '' | '' 'zouzou@sansgluten.com' | '7A6F757A6F754073616E73676C7574656E2E636F6D' } + + void 'test coalesce: #first - #second'() { + when: + def combined = Strings.coalesce(first, second) + + then: + expected == combined + + where: + first | second | expected + "a" | "b" | "a" + "a" | null | "a" + null | "b" | "b" + "" | "b" | "b" + null | null | null + "" | "" | null + } } From 21ae796d803ef2fe3062e264402768f44a31f574 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Tue, 29 Jul 2025 15:32:32 +0200 Subject: [PATCH 3/3] style: spotless --- .../datadog/trace/civisibility/CiVisibilityRepoServices.java | 3 ++- .../java/datadog/trace/civisibility/ci/PullRequestInfo.java | 3 ++- internal-api/src/main/java/datadog/trace/util/Strings.java | 4 +--- 3 files changed, 5 insertions(+), 5 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 63db00f3dae..57afe1d8e0b 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 @@ -125,7 +125,8 @@ static PullRequestInfo buildPullRequestInfo( } // complete with CI vars if user didn't provide all information - PullRequestInfo ciInfo = PullRequestInfo.coalesce(userInfo, ciProviderInfo.buildPullRequestInfo()); + PullRequestInfo ciInfo = + PullRequestInfo.coalesce(userInfo, ciProviderInfo.buildPullRequestInfo()); String headSha = ciInfo.getHeadCommit().getSha(); if (Strings.isNotBlank(headSha)) { // if head sha present try to populate author, committer and message info through git client 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 e755e69fd36..a6319a014c5 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 @@ -73,7 +73,8 @@ public boolean isComplete() { * @param second Fallback PR info * @return Combined PR info */ - public static PullRequestInfo coalesce(final PullRequestInfo first, final PullRequestInfo second) { + public static PullRequestInfo coalesce( + final PullRequestInfo first, final PullRequestInfo second) { return new PullRequestInfo( Strings.coalesce(first.baseBranch, second.baseBranch), Strings.coalesce(first.baseBranchSha, second.baseBranchSha), diff --git a/internal-api/src/main/java/datadog/trace/util/Strings.java b/internal-api/src/main/java/datadog/trace/util/Strings.java index 9a546169a67..301b7223f04 100644 --- a/internal-api/src/main/java/datadog/trace/util/Strings.java +++ b/internal-api/src/main/java/datadog/trace/util/Strings.java @@ -242,9 +242,7 @@ public static String[] concat(String[] arr, String... extra) { return result; } - /** - * @return first non-blank string out of the two, {@code null} if both are blank - */ + /** @return first non-blank string out of the two, {@code null} if both are blank */ @Nullable public static String coalesce(@Nullable final String first, @Nullable final String second) { if (isNotBlank(first)) {