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 adfa51161f4..1aca9e30cd1 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 @@ -129,7 +129,8 @@ private static PullRequestInfo buildUserPullRequestInfo( new PullRequestInfo( config.getGitPullRequestBaseBranch(), config.getGitPullRequestBaseBranchSha(), - config.getGitCommitHeadSha()); + config.getGitCommitHeadSha(), + null); if (userInfo.isComplete()) { return userInfo; @@ -140,7 +141,8 @@ private static PullRequestInfo buildUserPullRequestInfo( new PullRequestInfo( null, environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA), - environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)); + 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 37140eded88..cdb061f2d3c 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 @@ -24,10 +24,6 @@ class AppVeyorInfo implements CIProviderInfo { public static final String APPVEYOR_REPO_PROVIDER = "APPVEYOR_REPO_PROVIDER"; public static final String APPVEYOR_REPO_COMMIT = "APPVEYOR_REPO_COMMIT"; public static final String APPVEYOR_REPO_BRANCH = "APPVEYOR_REPO_BRANCH"; - public static final String APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH = - "APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH"; - public static final String APPVEYOR_PULL_REQUEST_HEAD_COMMIT = - "APPVEYOR_PULL_REQUEST_HEAD_COMMIT"; public static final String APPVEYOR_REPO_TAG_NAME = "APPVEYOR_REPO_TAG_NAME"; public static final String APPVEYOR_REPO_COMMIT_MESSAGE_SUBJECT = "APPVEYOR_REPO_COMMIT_MESSAGE"; public static final String APPVEYOR_REPO_COMMIT_MESSAGE_BODY = @@ -35,6 +31,10 @@ class AppVeyorInfo implements CIProviderInfo { public static final String APPVEYOR_REPO_COMMIT_AUTHOR_NAME = "APPVEYOR_REPO_COMMIT_AUTHOR"; public static final String APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL = "APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL"; + public static final String APPVEYOR_PR_HEAD_REPO_BRANCH = + "APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH"; + public static final String APPVEYOR_PR_HEAD_COMMIT = "APPVEYOR_PULL_REQUEST_HEAD_COMMIT"; + public static final String APPVEYOR_PR_NUMBER = "APPVEYOR_PULL_REQUEST_NUMBER"; private final CiEnvironment environment; @@ -87,11 +87,12 @@ public CIInfo buildCIInfo() { @Override public PullRequestInfo buildPullRequestInfo() { // check if PR is detected - if (Strings.isNotBlank(environment.get(APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH))) { + if (Strings.isNotBlank(environment.get(APPVEYOR_PR_HEAD_REPO_BRANCH))) { return new PullRequestInfo( normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)), null, - environment.get(APPVEYOR_PULL_REQUEST_HEAD_COMMIT)); + environment.get(APPVEYOR_PR_HEAD_COMMIT), + environment.get(APPVEYOR_PR_NUMBER)); } else { return PullRequestInfo.EMPTY; } @@ -99,7 +100,7 @@ public PullRequestInfo buildPullRequestInfo() { private String buildGitBranch(final String repoProvider) { if ("github".equals(repoProvider)) { - String branch = environment.get(APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH); + String branch = environment.get(APPVEYOR_PR_HEAD_REPO_BRANCH); if (branch == null || branch.isEmpty()) { branch = environment.get(APPVEYOR_REPO_BRANCH); } 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 6ca4907f220..ef33df817b7 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 @@ -40,6 +40,8 @@ class AzurePipelinesInfo implements CIProviderInfo { public static final String AZURE_BUILD_SOURCEVERSION_MESSAGE = "BUILD_SOURCEVERSIONMESSAGE"; public static final String AZURE_BUILD_REQUESTED_FOR_ID = "BUILD_REQUESTEDFORID"; public static final String AZURE_BUILD_REQUESTED_FOR_EMAIL = "BUILD_REQUESTEDFOREMAIL"; + public static final String AZURE_PR_NUMBER = "SYSTEM_PULLREQUEST_PULLREQUESTNUMBER"; + public static final String AZURE_PR_TARGET_BRANCH = "SYSTEM_PULLREQUEST_TARGETBRANCH"; private final CiEnvironment environment; @@ -85,7 +87,11 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(AZURE_PR_TARGET_BRANCH)), + null, + null, + environment.get(AZURE_PR_NUMBER)); } private String buildGitBranch() { 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 9def7865875..55738e3c2d8 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 @@ -27,6 +27,7 @@ class BitBucketInfo implements CIProviderInfo { public static final String BITBUCKET_GIT_BRANCH = "BITBUCKET_BRANCH"; public static final String BITBUCKET_GIT_TAG = "BITBUCKET_TAG"; public static final String BITBUCKET_PR_DESTINATION_BRANCH = "BITBUCKET_PR_DESTINATION_BRANCH"; + public static final String BITBUCKET_PR_NUMBER = "BITBUCKET_PR_ID"; private final CiEnvironment environment; @@ -76,7 +77,10 @@ public CIInfo buildCIInfo() { @Override public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( - normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)), null, null); + normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)), + null, + null, + environment.get(BITBUCKET_PR_NUMBER)); } private String buildPipelineUrl(final String repo, final String 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 1a0e56d3862..c063e21d7e1 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 @@ -33,6 +33,7 @@ class BitriseInfo implements CIProviderInfo { public static final String BITRISE_GIT_COMMITER_NAME = "GIT_CLONE_COMMIT_COMMITER_NAME"; public static final String BITRISE_GIT_COMMITER_EMAIL = "GIT_CLONE_COMMIT_COMMITER_EMAIL"; public static final String BITRISE_GIT_BRANCH_DEST = "BITRISEIO_GIT_BRANCH_DEST"; + public static final String BITRISE_PR_NUMBER = "BITRISE_PULL_REQUEST"; private final CiEnvironment environment; @@ -73,7 +74,10 @@ public CIInfo buildCIInfo() { @Override public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( - normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)), null, null); + normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)), + null, + null, + environment.get(BITRISE_PR_NUMBER)); } private String buildGitCommit() { 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 ca401b80cce..f0481db461b 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 @@ -28,6 +28,7 @@ class BuddyInfo implements CIProviderInfo { public static final String BUDDY_GIT_COMMIT_AUTHOR = "BUDDY_EXECUTION_REVISION_COMMITTER_NAME"; public static final String BUDDY_GIT_COMMIT_EMAIL = "BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL"; public static final String BUDDY_RUN_PR_BASE_BRANCH = "BUDDY_RUN_PR_BASE_BRANCH"; + public static final String BUDDY_RUN_PR_NUMBER = "BUDDY_RUN_PR_NO"; private final CiEnvironment environment; @@ -64,7 +65,10 @@ public CIInfo buildCIInfo() { @Override public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( - normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)), null, null); + normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)), + null, + null, + environment.get(BUDDY_RUN_PR_NUMBER)); } private String getPipelineId(String pipelineNumber) { 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 aa0836a133e..79c991e74c3 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 @@ -37,7 +37,7 @@ class BuildkiteInfo implements CIProviderInfo { public static final String BUILDKITE_GIT_AUTHOR_EMAIL = "BUILDKITE_BUILD_AUTHOR_EMAIL"; public static final String BUILDKITE_AGENT_ID = "BUILDKITE_AGENT_ID"; private static final String BUILDKITE_CI_NODE_LABEL_PREFIX = "BUILDKITE_AGENT_META_DATA_"; - private static final String BUILDKITE_PULL_REQUEST = "BUILDKITE_PULL_REQUEST"; + private static final String BUILDKITE_PULL_REQUEST_NUMBER = "BUILDKITE_PULL_REQUEST"; private static final String BUILDKITE_PULL_REQUEST_BASE_BRANCH = "BUILDKITE_PULL_REQUEST_BASE_BRANCH"; @@ -83,13 +83,16 @@ public CIInfo buildCIInfo() { public PullRequestInfo buildPullRequestInfo() { if (isPullRequest()) { return new PullRequestInfo( - normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)), null, null); + normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)), + null, + null, + environment.get(BUILDKITE_PULL_REQUEST_NUMBER)); } return PullRequestInfo.EMPTY; } private boolean isPullRequest() { - String pullRequest = environment.get(BUILDKITE_PULL_REQUEST); + String pullRequest = environment.get(BUILDKITE_PULL_REQUEST_NUMBER); return pullRequest != null && !"false".equals(pullRequest); } 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 53cedefd702..74a62d333d9 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,7 @@ public Map getCiTags(CIInfo ciInfo, PullRequestInfo pullRequestI .withPullRequestBaseBranch(pullRequestInfo) .withPullRequestBaseBranchSha(pullRequestInfo) .withGitCommitHeadSha(pullRequestInfo) + .withPullRequestNumber(pullRequestInfo) .withGitRepositoryUrl(gitInfo) .withGitCommit(gitInfo) .withGitBranch(gitInfo) @@ -135,6 +136,10 @@ public CITagsBuilder withGitCommitHeadSha(final PullRequestInfo pullRequestInfo) return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHeadSha()); } + public CITagsBuilder withPullRequestNumber(final PullRequestInfo pullRequestInfo) { + return putTagValue(Tags.PULL_REQUEST_NUMBER, pullRequestInfo.getPullRequestNumber()); + } + public CITagsBuilder withGitRepositoryUrl(final GitInfo gitInfo) { return putTagValue(Tags.GIT_REPOSITORY_URL, gitInfo.getRepositoryURL()); } 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 9abcc07f863..342e8e1a6ad 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 @@ -26,6 +26,7 @@ class CircleCIInfo implements CIProviderInfo { public static final String CIRCLECI_GIT_BRANCH = "CIRCLE_BRANCH"; public static final String CIRCLECI_GIT_TAG = "CIRCLE_TAG"; public static final String CIRCLECI_JOB_NAME = "CIRCLE_JOB"; + public static final String CIRCLECI_PR_NUMBER = "CIRCLE_PR_NUMBER"; private final CiEnvironment environment; @@ -60,7 +61,7 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo(null, null, null, 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 51f64815f27..031eebe8f91 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 @@ -23,6 +23,8 @@ public class CodefreshInfo implements CIProviderInfo { private static final String CF_REVISION = "CF_REVISION"; private static final String CF_COMMIT_MESSAGE = "CF_COMMIT_MESSAGE"; private static final String CF_COMMIT_AUTHOR = "CF_COMMIT_AUTHOR"; + private static final String CF_PULL_REQUEST_NUMBER = "CF_PULL_REQUEST_NUMBER"; + private static final String CF_PULL_REQUEST_TARGET_BRANCH = "CF_PULL_REQUEST_TARGET"; private final CiEnvironment environment; @@ -46,7 +48,11 @@ public GitInfo buildCIGitInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(CF_PULL_REQUEST_TARGET_BRANCH)), + null, + null, + environment.get(CF_PULL_REQUEST_NUMBER)); } private String buildGitBranch() { 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 7123813506f..97f16bdb875 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 @@ -28,6 +28,8 @@ public class DroneInfo implements CIProviderInfo { public static final String DRONE_COMMIT_AUTHOR_NAME = "DRONE_COMMIT_AUTHOR_NAME"; public static final String DRONE_COMMIT_AUTHOR_EMAIL = "DRONE_COMMIT_AUTHOR_EMAIL"; public static final String DRONE_COMMIT_MESSAGE = "DRONE_COMMIT_MESSAGE"; + public static final String DRONE_PULL_REQUEST_NUMBER = "DRONE_PULL_REQUEST"; + public static final String DRONE_PULL_REQUEST_TARGET_BRANCH = "DRONE_TARGET_BRANCH"; private final CiEnvironment environment; @@ -63,7 +65,11 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(DRONE_PULL_REQUEST_TARGET_BRANCH)), + null, + null, + environment.get(DRONE_PULL_REQUEST_NUMBER)); } private PersonInfo buildGitAuthor() { 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 65950147b21..8a94f166242 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 @@ -43,6 +43,7 @@ class GitLabInfo implements CIProviderInfo { "CI_MERGE_REQUEST_TARGET_BRANCH_NAME"; public static final String GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA = "CI_MERGE_REQUEST_SOURCE_BRANCH_SHA"; + public static final String GITLAB_PULL_REQUEST_NUMBER = "CI_MERGE_REQUEST_IID"; private final CiEnvironment environment; @@ -87,7 +88,8 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)), null, - environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA)); + environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA), + environment.get(GITLAB_PULL_REQUEST_NUMBER)); } private PersonInfo buildGitCommitAuthor() { 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 6eb8f8c6444..3b9f9c9eefe 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); + return new PullRequestInfo(baseRef, baseSha, headSha, null); } catch (Exception e) { LOGGER.warn("Error while parsing GitHub event", e); - return new PullRequestInfo(baseRef, null, null); + return new PullRequestInfo(baseRef, null, null, 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 252a42a3b2a..3593e54a273 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 @@ -36,6 +36,8 @@ class JenkinsInfo implements CIProviderInfo { public static final String JENKINS_DD_CUSTOM_TRACE_ID = "DD_CUSTOM_TRACE_ID"; public static final String JENKINS_NODE_NAME = "NODE_NAME"; public static final String JENKINS_NODE_LABELS = "NODE_LABELS"; + public static final String JENKINS_PR_NUMBER = "CHANGE_ID"; + public static final String JENKINS_PR_BASE_BRANCH = "CHANGE_TARGET"; private final CiEnvironment environment; @@ -72,7 +74,11 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(JENKINS_PR_BASE_BRANCH)), + null, + null, + environment.get(JENKINS_PR_NUMBER)); } private String buildCiNodeLabels() { 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 54a4a96c609..39b42e3a8b6 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 @@ -5,17 +5,22 @@ public class PullRequestInfo { - public static final PullRequestInfo EMPTY = new PullRequestInfo(null, null, null); + public static final PullRequestInfo EMPTY = new PullRequestInfo(null, null, null, null); private final String pullRequestBaseBranch; private final String pullRequestBaseBranchSha; private final String gitCommitHeadSha; + private final String pullRequestNumber; public PullRequestInfo( - String pullRequestBaseBranch, String pullRequestBaseBranchSha, String gitCommitHeadSha) { + String pullRequestBaseBranch, + String pullRequestBaseBranchSha, + String gitCommitHeadSha, + String pullRequestNumber) { this.pullRequestBaseBranch = pullRequestBaseBranch; this.pullRequestBaseBranchSha = pullRequestBaseBranchSha; this.gitCommitHeadSha = gitCommitHeadSha; + this.pullRequestNumber = pullRequestNumber; } public String getPullRequestBaseBranch() { @@ -30,16 +35,22 @@ public String getGitCommitHeadSha() { return gitCommitHeadSha; } + public String getPullRequestNumber() { + return pullRequestNumber; + } + public boolean isNotEmpty() { return Strings.isNotBlank(pullRequestBaseBranch) || Strings.isNotBlank(pullRequestBaseBranchSha) - || Strings.isNotBlank(gitCommitHeadSha); + || Strings.isNotBlank(gitCommitHeadSha) + || Strings.isNotBlank(pullRequestNumber); } public boolean isComplete() { return Strings.isNotBlank(pullRequestBaseBranch) && Strings.isNotBlank(pullRequestBaseBranchSha) - && Strings.isNotBlank(gitCommitHeadSha); + && Strings.isNotBlank(gitCommitHeadSha) + && Strings.isNotBlank(pullRequestNumber); } /** @@ -59,7 +70,10 @@ public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallba : fallback.pullRequestBaseBranchSha, Strings.isNotBlank(info.gitCommitHeadSha) ? info.gitCommitHeadSha - : fallback.gitCommitHeadSha); + : fallback.gitCommitHeadSha, + Strings.isNotBlank(info.pullRequestNumber) + ? info.pullRequestNumber + : fallback.pullRequestNumber); } @Override @@ -73,12 +87,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(gitCommitHeadSha, that.gitCommitHeadSha) + && Objects.equals(pullRequestNumber, that.pullRequestNumber); } @Override public int hashCode() { - return Objects.hash(pullRequestBaseBranch, pullRequestBaseBranchSha, gitCommitHeadSha); + return Objects.hash( + pullRequestBaseBranch, pullRequestBaseBranchSha, gitCommitHeadSha, pullRequestNumber); } @Override @@ -93,6 +109,9 @@ public String toString() { + ", commitSHA='" + gitCommitHeadSha + '\'' + + ", 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 e2173ead686..af5ede5e75a 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 @@ -1,5 +1,7 @@ package datadog.trace.civisibility.ci; +import static datadog.trace.api.git.GitUtils.normalizeBranch; + import datadog.trace.api.civisibility.telemetry.tag.Provider; import datadog.trace.api.git.CommitInfo; import datadog.trace.api.git.GitInfo; @@ -11,6 +13,9 @@ public class TeamcityInfo implements CIProviderInfo { public static final String TEAMCITY_PROVIDER_NAME = "teamcity"; private static final String TEAMCITY_BUILDCONF_NAME = "TEAMCITY_BUILDCONF_NAME"; private static final String BUILD_URL = "BUILD_URL"; + private static final String TEAMCITY_PULL_REQUEST_NUMBER = "TEAMCITY_PULLREQUEST_NUMBER"; + private static final String TEAMCITY_PULL_REQUEST_TARGET_BRANCH = + "TEAMCITY_PULLREQUEST_TARGET_BRANCH"; private final CiEnvironment environment; @@ -35,7 +40,11 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(TEAMCITY_PULL_REQUEST_TARGET_BRANCH)), + null, + null, + environment.get(TEAMCITY_PULL_REQUEST_NUMBER)); } @Override 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 01354d9f7ef..0a473d49299 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 @@ -28,8 +28,9 @@ class TravisInfo implements CIProviderInfo { public static final String TRAVIS_GIT_BRANCH = "TRAVIS_BRANCH"; public static final String TRAVIS_GIT_TAG = "TRAVIS_TAG"; public static final String TRAVIS_GIT_COMMIT_MESSAGE = "TRAVIS_COMMIT_MESSAGE"; - public static final String TRAVIS_PULL_REQUEST = "TRAVIS_PULL_REQUEST"; - public static final String TRAVIS_PULL_REQUEST_HEAD_SHA = "TRAVIS_PULL_REQUEST_SHA"; + public static final String TRAVIS_PR_NUMBER = "TRAVIS_PULL_REQUEST"; + public static final String TRAVIS_PR_HEAD_SHA = "TRAVIS_PULL_REQUEST_SHA"; + public static final String TRAVIS_EVENT_TYPE = "TRAVIS_EVENT_TYPE"; private final CiEnvironment environment; @@ -70,14 +71,14 @@ public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( normalizeBranch(environment.get(TRAVIS_GIT_BRANCH)), null, - environment.get(TRAVIS_PULL_REQUEST_HEAD_SHA)); + environment.get(TRAVIS_PR_HEAD_SHA), + environment.get(TRAVIS_PR_NUMBER)); } return PullRequestInfo.EMPTY; } private boolean isPullRequest() { - String pullRequest = environment.get(TRAVIS_PULL_REQUEST); - return pullRequest != null && !"false".equals(pullRequest); + return "pull_request".equals(environment.get(TRAVIS_EVENT_TYPE)); } private String buildGitBranch() { diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy index 57907263083..799cbafb476 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy @@ -40,7 +40,7 @@ abstract class CITagsProviderTest extends Specification { def "test ci provider info is set properly: #ciSpec.providerName #ciSpec.idx #ciSpec.testCaseName"() { setup: ciSpec.env.each { - environmentVariables.set(it.key, it.value) + environmentVariables.set(it.key, it.value.toString()) if (it.key == "HOME") { System.setProperty("user.home", it.value) } 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 347b1ad6d86..abe127b0819 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 @@ -7,10 +7,10 @@ class PullRequestInfoTest extends Specification { PullRequestInfo.merge(infoA, infoB) == result where: - infoA | infoB | result - new PullRequestInfo("branchA", "a", "a") | new PullRequestInfo("branchB", "b", "b") | new PullRequestInfo("branchA", "a", "a") - new PullRequestInfo(null, null, null) | new PullRequestInfo("branchB", "b", "b") | new PullRequestInfo("branchB", "b", "b") - new PullRequestInfo("branchA", null, null) | new PullRequestInfo("branchB", "b", "b") | new PullRequestInfo("branchA", "b", "b") - new PullRequestInfo("branchA", null, null) | new PullRequestInfo(null, null, null) | new PullRequestInfo("branchA", null, null) + 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) } } 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 cb559ba7094..62b98a03e08 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 @@ -348,6 +348,7 @@ "APPVEYOR_BUILD_NUMBER": "appveyor-pipeline-number", "APPVEYOR_PULL_REQUEST_HEAD_COMMIT": "724faca55efebf66fc15bfccc34577c64c5480bd", "APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH": "origin/pr", + "APPVEYOR_PULL_REQUEST_NUMBER": 42, "APPVEYOR_REPO_BRANCH": "origin/master", "APPVEYOR_REPO_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "APPVEYOR_REPO_COMMIT_AUTHOR": "appveyor-commit-author-name", @@ -372,7 +373,8 @@ "git.commit.message": "appveyor-commit-message\nappveyor-commit-message-extended", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "master", - "git.repository_url": "https://github.com/appveyor-repo-name.git" + "git.repository_url": "https://github.com/appveyor-repo-name.git", + "pr.number": "42" } ], [ diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/azurepipelines.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/azurepipelines.json index d072c2731c6..7b34a248a6a 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/azurepipelines.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/azurepipelines.json @@ -931,5 +931,35 @@ "git.commit.message": "azure-pipelines-commit-message", "git.repository_url": "ssh://1.1.1.1:54321/path/to/repo.git/" } + ], + [ + { + "BUILD_BUILDID": "azure-pipelines-build-id", + "BUILD_DEFINITIONNAME": "azure-pipelines-name", + "BUILD_REQUESTEDFOREMAIL": "azure-pipelines-commit-author-email@datadoghq.com", + "BUILD_REQUESTEDFORID": "azure-pipelines-commit-author", + "BUILD_SOURCEVERSIONMESSAGE": "azure-pipelines-commit-message", + "SYSTEM_JOBID": "azure-pipelines-job-id", + "SYSTEM_PULLREQUEST_PULLREQUESTNUMBER": 42, + "SYSTEM_PULLREQUEST_TARGETBRANCH": "refs/heads/target-branch", + "SYSTEM_TASKINSTANCEID": "azure-pipelines-task-id", + "SYSTEM_TEAMFOUNDATIONSERVERURI": "https://azure-pipelines-server-uri.com/", + "SYSTEM_TEAMPROJECTID": "azure-pipelines-project-id", + "TF_BUILD": "True" + }, + { + "_dd.ci.env_vars": "{\"SYSTEM_TEAMPROJECTID\":\"azure-pipelines-project-id\",\"BUILD_BUILDID\":\"azure-pipelines-build-id\",\"SYSTEM_JOBID\":\"azure-pipelines-job-id\"}", + "ci.job.url": "https://azure-pipelines-server-uri.com/azure-pipelines-project-id/_build/results?buildId=azure-pipelines-build-id&view=logs&j=azure-pipelines-job-id&t=azure-pipelines-task-id", + "ci.pipeline.id": "azure-pipelines-build-id", + "ci.pipeline.name": "azure-pipelines-name", + "ci.pipeline.number": "azure-pipelines-build-id", + "ci.pipeline.url": "https://azure-pipelines-server-uri.com/azure-pipelines-project-id/_build/results?buildId=azure-pipelines-build-id", + "ci.provider.name": "azurepipelines", + "git.commit.author.email": "azure-pipelines-commit-author-email@datadoghq.com", + "git.commit.author.name": "azure-pipelines-commit-author", + "git.commit.message": "azure-pipelines-commit-message", + "git.pull_request.base_branch": "target-branch", + "pr.number": "42" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitbucket.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitbucket.json index e1bd66ef7cd..df50f46fc3c 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitbucket.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitbucket.json @@ -599,6 +599,7 @@ "BITBUCKET_GIT_HTTP_ORIGIN": "https://bitbucket-repo-url.com/repo.git", "BITBUCKET_PIPELINE_UUID": "{bitbucket-uuid}", "BITBUCKET_PR_DESTINATION_BRANCH": "target-branch", + "BITBUCKET_PR_ID": 42, "BITBUCKET_REPO_FULL_NAME": "bitbucket-repo" }, { @@ -610,7 +611,8 @@ "ci.provider.name": "bitbucket", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "target-branch", - "git.repository_url": "https://bitbucket-repo-url.com/repo.git" + "git.repository_url": "https://bitbucket-repo-url.com/repo.git", + "pr.number": "42" } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitrise.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitrise.json index 26eed3063d9..0a8c95fc1e7 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitrise.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/bitrise.json @@ -698,6 +698,7 @@ "BITRISE_BUILD_SLUG": "bitrise-pipeline-id", "BITRISE_BUILD_URL": "https://bitrise-build-url.com//", "BITRISE_GIT_MESSAGE": "bitrise-git-commit-message", + "BITRISE_PULL_REQUEST": 42, "BITRISE_TRIGGERED_WORKFLOW_ID": "bitrise-pipeline-name", "GIT_CLONE_COMMIT_HASH": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123" }, @@ -709,7 +710,8 @@ "ci.provider.name": "bitrise", "git.commit.message": "bitrise-git-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", - "git.pull_request.base_branch": "target-branch" + "git.pull_request.base_branch": "target-branch", + "pr.number": "42" } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buddy.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buddy.json index 480079bad1f..ef3e14fa25c 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buddy.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buddy.json @@ -494,6 +494,7 @@ "BUDDY_PIPELINE_ID": "456", "BUDDY_PIPELINE_NAME": "Deploy to Production", "BUDDY_RUN_PR_BASE_BRANCH": "target-branch", + "BUDDY_RUN_PR_NO": 42, "BUDDY_SCM_URL": "https://github.com/buddyworks/my-project.git" }, { @@ -509,7 +510,8 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "target-branch", "git.repository_url": "https://github.com/buddyworks/my-project.git", - "git.tag": "v1.0" + "git.tag": "v1.0", + "pr.number": "42" } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buildkite.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buildkite.json index 5ed61730094..dcf63c99a73 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buildkite.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/buildkite.json @@ -1092,7 +1092,7 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", - "BUILDKITE_PULL_REQUEST": "42", + "BUILDKITE_PULL_REQUEST": 42, "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "master", "BUILDKITE_TAG": "" }, @@ -1108,7 +1108,8 @@ "git.commit.author.name": "buildkite-git-commit-author-name", "git.commit.message": "buildkite-git-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", - "git.pull_request.base_branch": "master" + "git.pull_request.base_branch": "master", + "pr.number": "42" } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/circleci.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/circleci.json index 2a697af349a..7d780898853 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/circleci.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/circleci.json @@ -750,5 +750,28 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "ssh://host.xz:54321/path/to/repo.git/" } + ], + [ + { + "CIRCLECI": "circleCI", + "CIRCLE_BUILD_NUM": "circleci-pipeline-number", + "CIRCLE_BUILD_URL": "https://circleci-build-url.com/", + "CIRCLE_JOB": "circleci-job-name", + "CIRCLE_PROJECT_REPONAME": "circleci-pipeline-name", + "CIRCLE_PR_NUMBER": 42, + "CIRCLE_SHA1": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "CIRCLE_WORKFLOW_ID": "circleci-pipeline-id" + }, + { + "_dd.ci.env_vars": "{\"CIRCLE_WORKFLOW_ID\":\"circleci-pipeline-id\",\"CIRCLE_BUILD_NUM\":\"circleci-pipeline-number\"}", + "ci.job.name": "circleci-job-name", + "ci.job.url": "https://circleci-build-url.com/", + "ci.pipeline.id": "circleci-pipeline-id", + "ci.pipeline.name": "circleci-pipeline-name", + "ci.pipeline.url": "https://app.circleci.com/pipelines/workflows/circleci-pipeline-id", + "ci.provider.name": "circleci", + "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "pr.number": "42" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/codefresh.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/codefresh.json index d719df10592..363f037e880 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/codefresh.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/codefresh.json @@ -158,5 +158,25 @@ "git.repository_url": "git@github.com:DataDog/userrepo.git", "git.tag": "0.0.2" } + ], + [ + { + "CF_BUILD_ID": "6410367cee516146a4c4c66e", + "CF_BUILD_URL": "https://g.codefresh.io/build/6410367cee516146a4c4c66e", + "CF_PIPELINE_NAME": "My simple project/Example Java Project Pipeline", + "CF_PULL_REQUEST_NUMBER": 42, + "CF_PULL_REQUEST_TARGET": "target-branch", + "CF_STEP_NAME": "mah-job-name" + }, + { + "_dd.ci.env_vars": "{\"CF_BUILD_ID\":\"6410367cee516146a4c4c66e\"}", + "ci.job.name": "mah-job-name", + "ci.pipeline.id": "6410367cee516146a4c4c66e", + "ci.pipeline.name": "My simple project/Example Java Project Pipeline", + "ci.pipeline.url": "https://g.codefresh.io/build/6410367cee516146a4c4c66e", + "ci.provider.name": "codefresh", + "git.pull_request.base_branch": "target-branch", + "pr.number": "42" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/drone.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/drone.json index 962b3dde6ef..548bfdde776 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/drone.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/drone.json @@ -31,5 +31,42 @@ "git.repository_url": "https://github.com/octocat/hello-world.git", "git.tag": "v1.0.0" } + ], + [ + { + "CI": "true", + "DRONE": "true", + "DRONE_BRANCH": "master", + "DRONE_BUILD_LINK": "https://drone.company.com/octocat/hello-world/42", + "DRONE_BUILD_NUMBER": "build-number", + "DRONE_COMMIT_AUTHOR_EMAIL": "octocat@github.com", + "DRONE_COMMIT_AUTHOR_NAME": "The Octocat", + "DRONE_COMMIT_MESSAGE": "Updated README.md", + "DRONE_COMMIT_SHA": "bcdd4bf0245c82c060407b3b24b9b87301d15ac1", + "DRONE_GIT_HTTP_URL": "https://github.com/octocat/hello-world.git", + "DRONE_PULL_REQUEST": 42, + "DRONE_STAGE_NAME": "build", + "DRONE_STEP_NAME": "build_backend", + "DRONE_TAG": "v1.0.0", + "DRONE_TARGET_BRANCH": "target-branch", + "DRONE_WORKSPACE": "/foo/bar/jenkins/hello-world-job" + }, + { + "ci.job.name": "build_backend", + "ci.pipeline.number": "build-number", + "ci.pipeline.url": "https://drone.company.com/octocat/hello-world/42", + "ci.provider.name": "drone", + "ci.stage.name": "build", + "ci.workspace_path": "/foo/bar/jenkins/hello-world-job", + "git.branch": "master", + "git.commit.author.email": "octocat@github.com", + "git.commit.author.name": "The Octocat", + "git.commit.message": "Updated README.md", + "git.commit.sha": "bcdd4bf0245c82c060407b3b24b9b87301d15ac1", + "git.pull_request.base_branch": "target-branch", + "git.repository_url": "https://github.com/octocat/hello-world.git", + "git.tag": "v1.0.0", + "pr.number": "42" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/gitlab.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/gitlab.json index af479d7ff91..44b502a2501 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/gitlab.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/gitlab.json @@ -1055,6 +1055,7 @@ "CI_JOB_NAME": "gitlab-job-name", "CI_JOB_STAGE": "gitlab-stage-name", "CI_JOB_URL": "https://gitlab.com/job", + "CI_MERGE_REQUEST_IID": 42, "CI_MERGE_REQUEST_TARGET_BRANCH_NAME": "target-branch", "CI_PIPELINE_ID": "gitlab-pipeline-id", "CI_PIPELINE_IID": "gitlab-pipeline-number", @@ -1083,7 +1084,8 @@ "git.commit.message": "gitlab-git-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "target-branch", - "git.repository_url": "https://gitlab.com/repo/myrepo.git" + "git.repository_url": "https://gitlab.com/repo/myrepo.git", + "pr.number": "42" } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json index 38d448747b8..722a1a90d0d 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json @@ -900,5 +900,28 @@ "ci.provider.name": "jenkins", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123" } + ], + [ + { + "BUILD_NUMBER": "jenkins-pipeline-number", + "BUILD_TAG": "jenkins-pipeline-id", + "BUILD_URL": "https://jenkins.com/pipeline", + "CHANGE_ID": 42, + "CHANGE_TARGET": "target-branch", + "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "JENKINS_URL": "jenkins", + "JOB_URL": "https://jenkins.com/job" + }, + { + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "ci.pipeline.id": "jenkins-pipeline-id", + "ci.pipeline.number": "jenkins-pipeline-number", + "ci.pipeline.url": "https://jenkins.com/pipeline", + "ci.provider.name": "jenkins", + "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "git.pull_request.base_branch": "target-branch", + "pr.number": "42" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/teamcity.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/teamcity.json index 086c1c16de1..2561bd943bd 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/teamcity.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/teamcity.json @@ -74,5 +74,21 @@ "git.repository_url": "git@github.com:DataDog/userrepo.git", "git.tag": "0.0.2" } + ], + [ + { + "BUILD_URL": "https://teamcity.com/repo", + "TEAMCITY_BUILDCONF_NAME": "Test 1", + "TEAMCITY_PULLREQUEST_NUMBER": 42, + "TEAMCITY_PULLREQUEST_TARGET_BRANCH": "target-branch", + "TEAMCITY_VERSION": "2022.10 (build 116751)" + }, + { + "ci.job.name": "Test 1", + "ci.job.url": "https://teamcity.com/repo", + "ci.provider.name": "teamcity", + "git.pull_request.base_branch": "target-branch", + "pr.number": "42" + } ] ] 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 bbc2b314fac..72075da9bd8 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 @@ -549,8 +549,9 @@ "TRAVIS_BUILD_WEB_URL": "https://travisci.com/pipeline", "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", + "TRAVIS_EVENT_TYPE": "pull_request", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", - "TRAVIS_PULL_REQUEST": "42", + "TRAVIS_PULL_REQUEST": 42, "TRAVIS_PULL_REQUEST_BRANCH": "pr", "TRAVIS_PULL_REQUEST_SHA": "724faca55efebf66fc15bfccc34577c64c5480bd", "TRAVIS_REPO_SLUG": "user/repo" @@ -567,7 +568,8 @@ "git.commit.message": "travis-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.pull_request.base_branch": "master", - "git.repository_url": "https://github.com/user/repo.git" + "git.repository_url": "https://github.com/user/repo.git", + "pr.number": "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 78c90b312a8..3c8b9d7b9d6 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 @@ -133,6 +133,7 @@ public class Tags { 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 PULL_REQUEST_NUMBER = "pr.number"; public static final String RUNTIME_NAME = "runtime.name"; public static final String RUNTIME_VENDOR = "runtime.vendor";