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 d3c0280a84b..adfa51161f4 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 @@ -65,7 +65,8 @@ public class CiVisibilityRepoServices { ciProvider = ciProviderInfo.getProvider(); CIInfo ciInfo = ciProviderInfo.buildCIInfo(); - PullRequestInfo pullRequestInfo = buildPullRequestInfo(services.environment, ciProviderInfo); + PullRequestInfo pullRequestInfo = + buildPullRequestInfo(services.config, services.environment, ciProviderInfo); if (pullRequestInfo.isNotEmpty()) { LOGGER.info("PR detected: {}", pullRequestInfo); @@ -110,18 +111,38 @@ public class CiVisibilityRepoServices { @Nonnull private static PullRequestInfo buildPullRequestInfo( - CiEnvironment environment, CIProviderInfo ciProviderInfo) { - PullRequestInfo ciProviderPrInfo = ciProviderInfo.buildPullRequestInfo(); - if (ciProviderPrInfo.isNotEmpty()) { - return ciProviderPrInfo; + Config config, CiEnvironment environment, CIProviderInfo ciProviderInfo) { + PullRequestInfo info = buildUserPullRequestInfo(config, environment); + + if (info.isComplete()) { + return info; + } + + // complete with CI vars if user didn't provide all information + return PullRequestInfo.merge(info, ciProviderInfo.buildPullRequestInfo()); + } + + @Nonnull + private static PullRequestInfo buildUserPullRequestInfo( + Config config, CiEnvironment environment) { + PullRequestInfo userInfo = + new PullRequestInfo( + config.getGitPullRequestBaseBranch(), + config.getGitPullRequestBaseBranchSha(), + config.getGitCommitHeadSha()); + + if (userInfo.isComplete()) { + return userInfo; } - // could not get PR info from CI provider, - // check if it was set manually - return new PullRequestInfo( - null, - environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA), - environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)); + // logs-backend specific vars + PullRequestInfo ddCiInfo = + new PullRequestInfo( + null, + environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA), + environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)); + + return PullRequestInfo.merge(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/AppVeyorInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java index 3657766e312..37140eded88 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 @@ -9,6 +9,7 @@ import datadog.trace.api.git.GitInfo; import datadog.trace.api.git.PersonInfo; import datadog.trace.civisibility.ci.env.CiEnvironment; +import datadog.trace.util.Strings; import javax.annotation.Nonnull; class AppVeyorInfo implements CIProviderInfo { @@ -25,6 +26,8 @@ class AppVeyorInfo implements CIProviderInfo { 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 = @@ -83,7 +86,15 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + // check if PR is detected + if (Strings.isNotBlank(environment.get(APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH))) { + return new PullRequestInfo( + normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)), + null, + environment.get(APPVEYOR_PULL_REQUEST_HEAD_COMMIT)); + } else { + return PullRequestInfo.EMPTY; + } } private String buildGitBranch(final String repoProvider) { 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 bbda148a978..9def7865875 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 @@ -26,6 +26,7 @@ class BitBucketInfo implements CIProviderInfo { public static final String BITBUCKET_GIT_COMMIT = "BITBUCKET_COMMIT"; 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"; private final CiEnvironment environment; @@ -74,7 +75,8 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)), null, null); } 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 080b81fea25..1a0e56d3862 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 @@ -14,6 +14,7 @@ class BitriseInfo implements CIProviderInfo { + // https://devcenter.bitrise.io/en/references/available-environment-variables.html public static final String BITRISE = "BITRISE_BUILD_SLUG"; public static final String BITRISE_PROVIDER_NAME = "bitrise"; public static final String BITRISE_PIPELINE_ID = "BITRISE_BUILD_SLUG"; @@ -31,6 +32,7 @@ class BitriseInfo implements CIProviderInfo { public static final String BITRISE_GIT_AUTHOR_EMAIL = "GIT_CLONE_COMMIT_AUTHOR_EMAIL"; 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"; private final CiEnvironment environment; @@ -70,7 +72,8 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)), null, null); } 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 4ae853c55e4..ca401b80cce 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 @@ -27,6 +27,7 @@ class BuddyInfo implements CIProviderInfo { public static final String BUDDY_GIT_COMMIT_MESSAGE = "BUDDY_EXECUTION_REVISION_MESSAGE"; 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"; private final CiEnvironment environment; @@ -62,7 +63,8 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { - return PullRequestInfo.EMPTY; + return new PullRequestInfo( + normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)), null, null); } 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 e7cc93d4475..aa0836a133e 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,6 +37,9 @@ 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_BASE_BRANCH = + "BUILDKITE_PULL_REQUEST_BASE_BRANCH"; private final CiEnvironment environment; @@ -78,9 +81,18 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { + if (isPullRequest()) { + return new PullRequestInfo( + normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)), null, null); + } return PullRequestInfo.EMPTY; } + private boolean isPullRequest() { + String pullRequest = environment.get(BUILDKITE_PULL_REQUEST); + return pullRequest != null && !"false".equals(pullRequest); + } + private String buildCiNodeLabels() { List labels = new ArrayList<>(); for (Map.Entry e : environment.get().entrySet()) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIProviderInfoFactory.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIProviderInfoFactory.java index df6dd218a88..3037e92d8e5 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIProviderInfoFactory.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIProviderInfoFactory.java @@ -57,6 +57,8 @@ public CIProviderInfo createCIProviderInfo(Path currentPath) { } else if (environment.get(AwsCodePipelineInfo.AWS_CODEPIPELINE) != null && environment.get(AwsCodePipelineInfo.AWS_CODEPIPELINE).startsWith("codepipeline")) { return new AwsCodePipelineInfo(environment); + } else if (environment.get(DroneInfo.DRONE) != null) { + return new DroneInfo(environment); } else { return new UnknownCIInfo(environment, targetFolder, currentPath); } 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 6f107913da0..51f64815f27 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 @@ -12,6 +12,8 @@ import javax.annotation.Nonnull; public class CodefreshInfo implements CIProviderInfo { + + // https://codefresh.io/docs/docs/pipelines/variables/#system-variables public static final String CODEFRESH = "CF_BUILD_ID"; public static final String CODEFRESH_PROVIDER_NAME = "codefresh"; public static final String CF_STEP_NAME = "CF_STEP_NAME"; 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 new file mode 100644 index 00000000000..7123813506f --- /dev/null +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/DroneInfo.java @@ -0,0 +1,78 @@ +package datadog.trace.civisibility.ci; + +import static datadog.trace.api.git.GitUtils.filterSensitiveInfo; +import static datadog.trace.api.git.GitUtils.normalizeBranch; +import static datadog.trace.api.git.GitUtils.normalizeTag; +import static datadog.trace.civisibility.utils.FileUtils.expandTilde; + +import datadog.trace.api.civisibility.telemetry.tag.Provider; +import datadog.trace.api.git.CommitInfo; +import datadog.trace.api.git.GitInfo; +import datadog.trace.api.git.PersonInfo; +import datadog.trace.civisibility.ci.env.CiEnvironment; +import javax.annotation.Nonnull; + +public class DroneInfo implements CIProviderInfo { + + public static final String DRONE = "DRONE"; + public static final String DRONE_PROVIDER_NAME = "drone"; + public static final String DRONE_BUILD_NUMBER = "DRONE_BUILD_NUMBER"; + public static final String DRONE_BUILD_LINK = "DRONE_BUILD_LINK"; + public static final String DRONE_STEP_NAME = "DRONE_STEP_NAME"; + public static final String DRONE_STAGE_NAME = "DRONE_STAGE_NAME"; + public static final String DRONE_WORKSPACE = "DRONE_WORKSPACE"; + public static final String DRONE_GIT_HTTP_URL = "DRONE_GIT_HTTP_URL"; + public static final String DRONE_COMMIT_SHA = "DRONE_COMMIT_SHA"; + public static final String DRONE_BRANCH = "DRONE_BRANCH"; + public static final String DRONE_TAG = "DRONE_TAG"; + 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"; + + private final CiEnvironment environment; + + DroneInfo(CiEnvironment environment) { + this.environment = environment; + } + + @Override + public GitInfo buildCIGitInfo() { + return new GitInfo( + filterSensitiveInfo(environment.get(DRONE_GIT_HTTP_URL)), + normalizeBranch(environment.get(DRONE_BRANCH)), + normalizeTag(environment.get(DRONE_TAG)), + new CommitInfo( + environment.get(DRONE_COMMIT_SHA), + buildGitAuthor(), + PersonInfo.NOOP, + environment.get(DRONE_COMMIT_MESSAGE))); + } + + @Override + public CIInfo buildCIInfo() { + return CIInfo.builder(environment) + .ciProviderName(DRONE_PROVIDER_NAME) + .ciPipelineNumber(environment.get(DRONE_BUILD_NUMBER)) + .ciPipelineUrl(environment.get(DRONE_BUILD_LINK)) + .ciJobName(environment.get(DRONE_STEP_NAME)) + .ciStageName(environment.get(DRONE_STAGE_NAME)) + .ciWorkspace(expandTilde(environment.get(DRONE_WORKSPACE))) + .build(); + } + + @Nonnull + @Override + public PullRequestInfo buildPullRequestInfo() { + return PullRequestInfo.EMPTY; + } + + private PersonInfo buildGitAuthor() { + return new PersonInfo( + environment.get(DRONE_COMMIT_AUTHOR_NAME), environment.get(DRONE_COMMIT_AUTHOR_EMAIL)); + } + + @Override + public Provider getProvider() { + return Provider.DRONE; + } +} 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 17ceedb61cd..65950147b21 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 @@ -41,8 +41,6 @@ class GitLabInfo implements CIProviderInfo { public static final String GITLAB_CI_RUNNER_TAGS = "CI_RUNNER_TAGS"; public static final String GITLAB_PULL_REQUEST_BASE_BRANCH = "CI_MERGE_REQUEST_TARGET_BRANCH_NAME"; - public static final String GITLAB_PULL_REQUEST_BASE_BRANCH_SHA = - "CI_MERGE_REQUEST_TARGET_BRANCH_SHA"; public static final String GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA = "CI_MERGE_REQUEST_SOURCE_BRANCH_SHA"; @@ -87,8 +85,8 @@ public CIInfo buildCIInfo() { @Override public PullRequestInfo buildPullRequestInfo() { return new PullRequestInfo( - environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH), - environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH_SHA), + normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)), + null, environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA)); } 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 a2b39fac978..6eb8f8c6444 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 @@ -127,7 +127,7 @@ public PullRequestInfo buildPullRequestInfo() { } catch (Exception e) { LOGGER.warn("Error while parsing GitHub event", e); - return PullRequestInfo.EMPTY; + return new PullRequestInfo(baseRef, null, null); } } 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 7365f8f824a..54a4a96c609 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 @@ -36,6 +36,32 @@ public boolean isNotEmpty() { || Strings.isNotBlank(gitCommitHeadSha); } + public boolean isComplete() { + return Strings.isNotBlank(pullRequestBaseBranch) + && Strings.isNotBlank(pullRequestBaseBranchSha) + && Strings.isNotBlank(gitCommitHeadSha); + } + + /** + * Merges info by completing the empty information fields with the fallback's + * + * @param info Base PR info + * @param fallback Fallback PR info + * @return Completed PR info + */ + 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.gitCommitHeadSha) + ? info.gitCommitHeadSha + : fallback.gitCommitHeadSha); + } + @Override public boolean equals(Object o) { if (this == o) { 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 e95cb34ca31..01354d9f7ef 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,6 +28,8 @@ 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"; private final CiEnvironment environment; @@ -64,9 +66,20 @@ public CIInfo buildCIInfo() { @Nonnull @Override public PullRequestInfo buildPullRequestInfo() { + if (isPullRequest()) { + return new PullRequestInfo( + normalizeBranch(environment.get(TRAVIS_GIT_BRANCH)), + null, + environment.get(TRAVIS_PULL_REQUEST_HEAD_SHA)); + } return PullRequestInfo.EMPTY; } + private boolean isPullRequest() { + String pullRequest = environment.get(TRAVIS_PULL_REQUEST); + return pullRequest != null && !"false".equals(pullRequest); + } + private String buildGitBranch() { final String fromBranch = environment.get(TRAVIS_GIT_PR_BRANCH); if (fromBranch != null && !fromBranch.isEmpty()) { 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 d22f7542803..57907263083 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 @@ -50,8 +50,9 @@ abstract class CITagsProviderTest extends Specification { CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() + def prInfo = ciProviderInfo.buildPullRequestInfo() def ciTagsProvider = ciTagsProvider() - def tags = ciTagsProvider.getCiTags(ciInfo, PullRequestInfo.EMPTY) + def tags = ciTagsProvider.getCiTags(ciInfo, prInfo) then: if (isCi()) { diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/DroneInfoTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/DroneInfoTest.groovy new file mode 100644 index 00000000000..310030e90a2 --- /dev/null +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/DroneInfoTest.groovy @@ -0,0 +1,26 @@ +package datadog.trace.civisibility.ci + +class DroneInfoTest extends CITagsProviderTest { + + @Override + String getProviderName() { + return DroneInfo.DRONE_PROVIDER_NAME + } + + @Override + Map buildRemoteGitInfoEmpty() { + final Map map = new HashMap<>() + map.put(DroneInfo.DRONE, "true") + map.put(DroneInfo.DRONE_WORKSPACE, localFSGitWorkspace) + return map + } + + @Override + Map buildRemoteGitInfoMismatchLocalGit() { + final Map map = new HashMap<>() + map.put(DroneInfo.DRONE, "true") + map.put(DroneInfo.DRONE_WORKSPACE, localFSGitWorkspace) + map.put(DroneInfo.DRONE_COMMIT_SHA, "0000000000000000000000000000000000000000") + return map + } +} 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 new file mode 100644 index 00000000000..347b1ad6d86 --- /dev/null +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/PullRequestInfoTest.groovy @@ -0,0 +1,16 @@ +package datadog.trace.civisibility.ci + +import spock.lang.Specification + +class PullRequestInfoTest extends Specification { + def "test merging of informations"() { + 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) + } +} 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 def208d7110..cb559ba7094 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 @@ -346,6 +346,7 @@ "APPVEYOR_BUILD_FOLDER": "/foo/bar", "APPVEYOR_BUILD_ID": "appveyor-build-id", "APPVEYOR_BUILD_NUMBER": "appveyor-pipeline-number", + "APPVEYOR_PULL_REQUEST_HEAD_COMMIT": "724faca55efebf66fc15bfccc34577c64c5480bd", "APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH": "origin/pr", "APPVEYOR_REPO_BRANCH": "origin/master", "APPVEYOR_REPO_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", @@ -367,8 +368,10 @@ "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.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" } ], @@ -378,6 +381,7 @@ "APPVEYOR_BUILD_FOLDER": "/foo/bar", "APPVEYOR_BUILD_ID": "appveyor-build-id", "APPVEYOR_BUILD_NUMBER": "appveyor-pipeline-number", + "APPVEYOR_PULL_REQUEST_HEAD_COMMIT": "724faca55efebf66fc15bfccc34577c64c5480bd", "APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH": "refs/heads/pr", "APPVEYOR_REPO_BRANCH": "refs/heads/master", "APPVEYOR_REPO_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", @@ -399,8 +403,10 @@ "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.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" } ], 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 bbd8cd37ea6..e1bd66ef7cd 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 @@ -591,5 +591,26 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "ssh://host.xz:54321/path/to/repo.git/" } + ], + [ + { + "BITBUCKET_BUILD_NUMBER": "bitbucket-build-num", + "BITBUCKET_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "BITBUCKET_GIT_HTTP_ORIGIN": "https://bitbucket-repo-url.com/repo.git", + "BITBUCKET_PIPELINE_UUID": "{bitbucket-uuid}", + "BITBUCKET_PR_DESTINATION_BRANCH": "target-branch", + "BITBUCKET_REPO_FULL_NAME": "bitbucket-repo" + }, + { + "ci.job.url": "https://bitbucket.org/bitbucket-repo/addon/pipelines/home#!/results/bitbucket-build-num", + "ci.pipeline.id": "bitbucket-uuid", + "ci.pipeline.name": "bitbucket-repo", + "ci.pipeline.number": "bitbucket-build-num", + "ci.pipeline.url": "https://bitbucket.org/bitbucket-repo/addon/pipelines/home#!/results/bitbucket-build-num", + "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" + } ] ] 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 579ace5d2c9..26eed3063d9 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 @@ -690,5 +690,26 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "ssh://host.xz:54321/path/to/repo.git/" } + ], + [ + { + "BITRISEIO_GIT_BRANCH_DEST": "target-branch", + "BITRISE_BUILD_NUMBER": "bitrise-pipeline-number", + "BITRISE_BUILD_SLUG": "bitrise-pipeline-id", + "BITRISE_BUILD_URL": "https://bitrise-build-url.com//", + "BITRISE_GIT_MESSAGE": "bitrise-git-commit-message", + "BITRISE_TRIGGERED_WORKFLOW_ID": "bitrise-pipeline-name", + "GIT_CLONE_COMMIT_HASH": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123" + }, + { + "ci.pipeline.id": "bitrise-pipeline-id", + "ci.pipeline.name": "bitrise-pipeline-name", + "ci.pipeline.number": "bitrise-pipeline-number", + "ci.pipeline.url": "https://bitrise-build-url.com//", + "ci.provider.name": "bitrise", + "git.commit.message": "bitrise-git-commit-message", + "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "git.pull_request.base_branch": "target-branch" + } ] ] 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 9c64a199d13..480079bad1f 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 @@ -479,5 +479,37 @@ "git.repository_url": "ssh://host.xz:54321/path/to/repo.git/", "git.tag": "v1.0" } + ], + [ + { + "BUDDY": "true", + "BUDDY_EXECUTION_BRANCH": "master", + "BUDDY_EXECUTION_ID": "buddy-execution-id", + "BUDDY_EXECUTION_REVISION": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL": "mikebenson@buddy.works", + "BUDDY_EXECUTION_REVISION_COMMITTER_NAME": "Mike Benson", + "BUDDY_EXECUTION_REVISION_MESSAGE": "Create buddy.yml", + "BUDDY_EXECUTION_TAG": "v1.0", + "BUDDY_EXECUTION_URL": "https://app.buddy.works/myworkspace/my-project/pipelines/pipeline/456/execution/5d9dc42c422f5a268b389d08", + "BUDDY_PIPELINE_ID": "456", + "BUDDY_PIPELINE_NAME": "Deploy to Production", + "BUDDY_RUN_PR_BASE_BRANCH": "target-branch", + "BUDDY_SCM_URL": "https://github.com/buddyworks/my-project.git" + }, + { + "ci.pipeline.id": "456/buddy-execution-id", + "ci.pipeline.name": "Deploy to Production", + "ci.pipeline.number": "buddy-execution-id", + "ci.pipeline.url": "https://app.buddy.works/myworkspace/my-project/pipelines/pipeline/456/execution/5d9dc42c422f5a268b389d08", + "ci.provider.name": "buddy", + "git.branch": "master", + "git.commit.committer.email": "mikebenson@buddy.works", + "git.commit.committer.name": "Mike Benson", + "git.commit.message": "Create buddy.yml", + "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" + } ] ] 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 86ff170deb8..5ed61730094 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 @@ -13,6 +13,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -47,6 +49,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -81,6 +85,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -115,6 +121,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -149,6 +157,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "", "HOME": "/not-my-home", @@ -185,6 +195,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "", "HOME": "/not-my-home", @@ -221,6 +233,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "", "HOME": "/not-my-home", @@ -257,6 +271,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://user@hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -291,6 +307,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://user%E2%82%AC@hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -325,6 +343,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://user:pwd@hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -359,6 +379,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "git@hostname.com:org/repo.git", "BUILDKITE_TAG": "" }, @@ -393,6 +415,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -427,6 +451,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -461,6 +487,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "" }, @@ -495,6 +523,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "0.1.0" }, @@ -529,6 +559,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "origin/tags/0.1.0" }, @@ -563,6 +595,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "http://hostname.com/repo.git", "BUILDKITE_TAG": "refs/heads/tags/0.1.0" }, @@ -596,6 +630,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_TAG": "", "DD_GIT_BRANCH": "user-supplied-branch", "DD_GIT_COMMIT_AUTHOR_DATE": "usersupplied-authordate", @@ -641,6 +677,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_TAG": "", "DD_GIT_COMMIT_AUTHOR_DATE": "usersupplied-authordate", "DD_GIT_COMMIT_AUTHOR_EMAIL": "usersupplied-authoremail", @@ -686,6 +724,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://github.com/DataDog/dogweb", "BUILDKITE_TAG": "", "DD_TEST_CASE_NAME": "http-repository-url-no-git-suffix" @@ -718,6 +758,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "ssh://host.xz:54321/path/to/repo/", "BUILDKITE_TAG": "", "DD_TEST_CASE_NAME": "ssh-repository-url-no-git-suffix" @@ -750,6 +792,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user:password@github.com/DataDog/dogweb.git", "BUILDKITE_TAG": "" }, @@ -781,6 +825,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user@github.com/DataDog/dogweb.git", "BUILDKITE_TAG": "" }, @@ -812,6 +858,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user:password@github.com:1234/DataDog/dogweb.git", "BUILDKITE_TAG": "" }, @@ -843,6 +891,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user:password@1.1.1.1/DataDog/dogweb.git", "BUILDKITE_TAG": "" }, @@ -874,6 +924,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user:password@1.1.1.1:1234/DataDog/dogweb.git", "BUILDKITE_TAG": "" }, @@ -905,6 +957,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "https://user:password@1.1.1.1:1234/DataDog/dogweb_with_@_yeah.git", "BUILDKITE_TAG": "" }, @@ -936,6 +990,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "ssh://user@host.xz:54321/path/to/repo.git/", "BUILDKITE_TAG": "" }, @@ -967,6 +1023,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_REPO": "ssh://user:password@host.xz:54321/path/to/repo.git/", "BUILDKITE_TAG": "" }, @@ -1001,6 +1059,8 @@ "BUILDKITE_JOB_ID": "buildkite-job-id", "BUILDKITE_MESSAGE": "buildkite-git-commit-message", "BUILDKITE_PIPELINE_SLUG": "buildkite-pipeline-name", + "BUILDKITE_PULL_REQUEST": "false", + "BUILDKITE_PULL_REQUEST_BASE_BRANCH": "", "BUILDKITE_TAG": "" }, { @@ -1018,5 +1078,37 @@ "git.commit.message": "buildkite-git-commit-message", "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123" } + ], + [ + { + "BUILDKITE": "true", + "BUILDKITE_BRANCH": "", + "BUILDKITE_BUILD_AUTHOR": "buildkite-git-commit-author-name", + "BUILDKITE_BUILD_AUTHOR_EMAIL": "buildkite-git-commit-author-email@datadoghq.com", + "BUILDKITE_BUILD_ID": "buildkite-pipeline-id", + "BUILDKITE_BUILD_NUMBER": "buildkite-pipeline-number", + "BUILDKITE_BUILD_URL": "https://buildkite-build-url.com", + "BUILDKITE_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "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_BASE_BRANCH": "master", + "BUILDKITE_TAG": "" + }, + { + "_dd.ci.env_vars": "{\"BUILDKITE_BUILD_ID\":\"buildkite-pipeline-id\",\"BUILDKITE_JOB_ID\":\"buildkite-job-id\"}", + "ci.job.url": "https://buildkite-build-url.com#buildkite-job-id", + "ci.pipeline.id": "buildkite-pipeline-id", + "ci.pipeline.name": "buildkite-pipeline-name", + "ci.pipeline.number": "buildkite-pipeline-number", + "ci.pipeline.url": "https://buildkite-build-url.com", + "ci.provider.name": "buildkite", + "git.commit.author.email": "buildkite-git-commit-author-email@datadoghq.com", + "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" + } ] ] 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 new file mode 100644 index 00000000000..962b3dde6ef --- /dev/null +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/drone.json @@ -0,0 +1,35 @@ +[ + [ + { + "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_STAGE_NAME": "build", + "DRONE_STEP_NAME": "build_backend", + "DRONE_TAG": "v1.0.0", + "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.repository_url": "https://github.com/octocat/hello-world.git", + "git.tag": "v1.0.0" + } + ] +] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/github.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/github.json index 3dd5ac62d54..f8e852eaf8a 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/github.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/github.json @@ -710,5 +710,32 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "https://1.1.1.1:1234/ghactions-repo.git" } + ], + [ + { + "GITHUB_ACTION": "run", + "GITHUB_BASE_REF": "target-branch", + "GITHUB_JOB": "github-job-name", + "GITHUB_REPOSITORY": "ghactions-repo", + "GITHUB_RUN_ATTEMPT": "ghactions-run-attempt", + "GITHUB_RUN_ID": "ghactions-pipeline-id", + "GITHUB_RUN_NUMBER": "ghactions-pipeline-number", + "GITHUB_SERVER_URL": "https://github.com", + "GITHUB_SHA": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "GITHUB_WORKFLOW": "ghactions-pipeline-name" + }, + { + "_dd.ci.env_vars": "{\"GITHUB_SERVER_URL\":\"https://github.com\",\"GITHUB_REPOSITORY\":\"ghactions-repo\",\"GITHUB_RUN_ID\":\"ghactions-pipeline-id\",\"GITHUB_RUN_ATTEMPT\":\"ghactions-run-attempt\"}", + "ci.job.name": "github-job-name", + "ci.job.url": "https://github.com/ghactions-repo/commit/b9f0fb3fdbb94c9d24b2c75b49663122a529e123/checks", + "ci.pipeline.id": "ghactions-pipeline-id", + "ci.pipeline.name": "ghactions-pipeline-name", + "ci.pipeline.number": "ghactions-pipeline-number", + "ci.pipeline.url": "https://github.com/ghactions-repo/actions/runs/ghactions-pipeline-id/attempts/ghactions-run-attempt", + "ci.provider.name": "github", + "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "git.pull_request.base_branch": "target-branch", + "git.repository_url": "https://github.com/ghactions-repo.git" + } ] ] 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 24882c1e859..af479d7ff91 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 @@ -1043,5 +1043,47 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "https://gitlab.com/repo/myrepo.git" } + ], + [ + { + "CI_COMMIT_AUTHOR": "John Doe ", + "CI_COMMIT_MESSAGE": "gitlab-git-commit-message", + "CI_COMMIT_REF_NAME": "origin/master", + "CI_COMMIT_SHA": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "CI_COMMIT_TIMESTAMP": "2021-07-21T11:43:07-04:00", + "CI_JOB_ID": "gitlab-job-id", + "CI_JOB_NAME": "gitlab-job-name", + "CI_JOB_STAGE": "gitlab-stage-name", + "CI_JOB_URL": "https://gitlab.com/job", + "CI_MERGE_REQUEST_TARGET_BRANCH_NAME": "target-branch", + "CI_PIPELINE_ID": "gitlab-pipeline-id", + "CI_PIPELINE_IID": "gitlab-pipeline-number", + "CI_PIPELINE_URL": "https://foo/repo/-/pipelines/1234", + "CI_PROJECT_DIR": "/foo/bar", + "CI_PROJECT_PATH": "gitlab-pipeline-name", + "CI_PROJECT_URL": "https://gitlab.com/repo", + "CI_REPOSITORY_URL": "https://gitlab.com/repo/myrepo.git", + "GITLAB_CI": "gitlab" + }, + { + "_dd.ci.env_vars": "{\"CI_PROJECT_URL\":\"https://gitlab.com/repo\",\"CI_PIPELINE_ID\":\"gitlab-pipeline-id\",\"CI_JOB_ID\":\"gitlab-job-id\"}", + "ci.job.name": "gitlab-job-name", + "ci.job.url": "https://gitlab.com/job", + "ci.pipeline.id": "gitlab-pipeline-id", + "ci.pipeline.name": "gitlab-pipeline-name", + "ci.pipeline.number": "gitlab-pipeline-number", + "ci.pipeline.url": "https://foo/repo/-/pipelines/1234", + "ci.provider.name": "gitlab", + "ci.stage.name": "gitlab-stage-name", + "ci.workspace_path": "/foo/bar", + "git.branch": "master", + "git.commit.author.date": "2021-07-21T11:43:07-04:00", + "git.commit.author.email": "john@doe.com", + "git.commit.author.name": "John Doe", + "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" + } ] ] 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 2131938546f..bbc2b314fac 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 @@ -10,6 +10,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo", "TRAVIS_TAG": "origin/tags/0.1.0" }, @@ -38,6 +39,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo", "TRAVIS_TAG": "refs/heads/tags/0.1.0" }, @@ -65,6 +67,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -91,6 +94,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -118,6 +122,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -145,6 +150,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -173,6 +179,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo", "USERPROFILE": "/not-my-home" }, @@ -201,6 +208,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -229,6 +237,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo", "USERPROFILE": "/not-my-home" }, @@ -257,6 +266,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -284,6 +294,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -311,6 +322,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -338,6 +350,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_PULL_REQUEST_BRANCH": "origin/master", "TRAVIS_PULL_REQUEST_SLUG": "user/repo", "TRAVIS_REPO_SLUG": "user/repo" @@ -367,6 +380,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_PULL_REQUEST_BRANCH": "refs/heads/master", "TRAVIS_PULL_REQUEST_SLUG": "user/repo", "TRAVIS_REPO_SLUG": "user/repo" @@ -396,6 +410,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_PULL_REQUEST_BRANCH": "refs/heads/feature/one", "TRAVIS_PULL_REQUEST_SLUG": "user/repo", "TRAVIS_REPO_SLUG": "user/repo" @@ -433,6 +448,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -473,6 +489,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo" }, { @@ -505,6 +522,7 @@ "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "false", "TRAVIS_REPO_SLUG": "user/repo", "TRAVIS_TAG": "origin/tags/0.1.0" }, @@ -521,5 +539,35 @@ "git.repository_url": "https://github.com/user/repo.git", "git.tag": "0.1.0" } + ], + [ + { + "TRAVIS": "travisCI", + "TRAVIS_BRANCH": "origin/master", + "TRAVIS_BUILD_ID": "travis-pipeline-id", + "TRAVIS_BUILD_NUMBER": "travis-pipeline-number", + "TRAVIS_BUILD_WEB_URL": "https://travisci.com/pipeline", + "TRAVIS_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "TRAVIS_COMMIT_MESSAGE": "travis-commit-message", + "TRAVIS_JOB_WEB_URL": "https://travisci.com/job", + "TRAVIS_PULL_REQUEST": "42", + "TRAVIS_PULL_REQUEST_BRANCH": "pr", + "TRAVIS_PULL_REQUEST_SHA": "724faca55efebf66fc15bfccc34577c64c5480bd", + "TRAVIS_REPO_SLUG": "user/repo" + }, + { + "ci.job.url": "https://travisci.com/job", + "ci.pipeline.id": "travis-pipeline-id", + "ci.pipeline.name": "user/repo", + "ci.pipeline.number": "travis-pipeline-number", + "ci.pipeline.url": "https://travisci.com/pipeline", + "ci.provider.name": "travisci", + "git.branch": "pr", + "git.commit.head_sha": "724faca55efebf66fc15bfccc34577c64c5480bd", + "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" + } ] ] diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/usersupplied.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/usersupplied.json index f07f4e37400..add7045275c 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/usersupplied.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/usersupplied.json @@ -396,5 +396,33 @@ "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "git.repository_url": "ssh://host.xz:54321/path/to/repo.git/" } + ], + [ + { + "DD_GIT_COMMIT_AUTHOR_DATE": "usersupplied-authordate", + "DD_GIT_COMMIT_AUTHOR_EMAIL": "usersupplied-authoremail", + "DD_GIT_COMMIT_AUTHOR_NAME": "usersupplied-authorname", + "DD_GIT_COMMIT_COMMITTER_DATE": "usersupplied-comitterdate", + "DD_GIT_COMMIT_COMMITTER_EMAIL": "usersupplied-comitteremail", + "DD_GIT_COMMIT_COMMITTER_NAME": "usersupplied-comittername", + "DD_GIT_COMMIT_MESSAGE": "usersupplied-message", + "DD_GIT_COMMIT_SHA": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "DD_GIT_PULL_REQUEST_BASE_BRANCH": "target-branch", + "DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "DD_GIT_REPOSITORY_URL": "git@github.com:DataDog/userrepo.git" + }, + { + "git.commit.author.date": "usersupplied-authordate", + "git.commit.author.email": "usersupplied-authoremail", + "git.commit.author.name": "usersupplied-authorname", + "git.commit.committer.date": "usersupplied-comitterdate", + "git.commit.committer.email": "usersupplied-comitteremail", + "git.commit.committer.name": "usersupplied-comittername", + "git.commit.message": "usersupplied-message", + "git.commit.sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "git.pull_request.base_branch": "target-branch", + "git.pull_request.base_branch_sha": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", + "git.repository_url": "git@github.com:DataDog/userrepo.git" + } ] ] diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/CiVisibilityConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/CiVisibilityConfig.java index 30bb443de82..d7ab9ad204a 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/CiVisibilityConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/CiVisibilityConfig.java @@ -85,6 +85,11 @@ public final class CiVisibilityConfig { public static final String TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES = "test.management.attempt.to.fix.retries"; + /* Git PR info */ + 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"; + /* COVERAGE SETTINGS */ public static final String CIVISIBILITY_CODE_COVERAGE_ENABLED = "civisibility.code.coverage.enabled"; diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 4254e06236d..3d4dc949c9a 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -389,6 +389,9 @@ public static String getHostName() { private final boolean ciVisibilityTestManagementEnabled; private final Integer ciVisibilityTestManagementAttemptToFixRetries; private final boolean ciVisibilityScalatestForkMonitorEnabled; + private final String gitPullRequestBaseBranch; + private final String gitPullRequestBaseBranchSha; + private final String gitCommitHeadSha; private final boolean remoteConfigEnabled; private final boolean remoteConfigIntegrityCheckEnabled; @@ -1633,6 +1636,9 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) configProvider.getInteger(TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES); ciVisibilityScalatestForkMonitorEnabled = configProvider.getBoolean(CIVISIBILITY_SCALATEST_FORK_MONITOR_ENABLED, false); + gitPullRequestBaseBranch = configProvider.getString(GIT_PULL_REQUEST_BASE_BRANCH); + gitPullRequestBaseBranchSha = configProvider.getString(GIT_PULL_REQUEST_BASE_BRANCH_SHA); + gitCommitHeadSha = configProvider.getString(GIT_COMMIT_HEAD_SHA); remoteConfigEnabled = configProvider.getBoolean( @@ -3205,6 +3211,18 @@ public Integer getCiVisibilityTestManagementAttemptToFixRetries() { return ciVisibilityTestManagementAttemptToFixRetries; } + public String getGitPullRequestBaseBranch() { + return gitPullRequestBaseBranch; + } + + public String getGitPullRequestBaseBranchSha() { + return gitPullRequestBaseBranchSha; + } + + public String getGitCommitHeadSha() { + return gitCommitHeadSha; + } + public String getAppSecRulesFile() { return appSecRulesFile; } diff --git a/internal-api/src/main/java/datadog/trace/api/civisibility/telemetry/tag/Provider.java b/internal-api/src/main/java/datadog/trace/api/civisibility/telemetry/tag/Provider.java index 702bd8d5713..4c6f24607a5 100644 --- a/internal-api/src/main/java/datadog/trace/api/civisibility/telemetry/tag/Provider.java +++ b/internal-api/src/main/java/datadog/trace/api/civisibility/telemetry/tag/Provider.java @@ -18,6 +18,7 @@ public enum Provider implements TagValue { TEAMCITY, TRAVISCI, BUDDYCI, + DRONE, UNSUPPORTED; private final String s;