From 9e3b94ff2c6af99d70c56d6e40cce97db319df55 Mon Sep 17 00:00:00 2001 From: Nikita Tkachenko Date: Fri, 14 Mar 2025 14:56:06 +0100 Subject: [PATCH 1/3] Allow to manually set PR info --- .../CiVisibilityRepoServices.java | 20 ++++++++++++++- .../civisibility/CiVisibilityServices.java | 3 ++- .../datadog/trace/civisibility/Constants.java | 25 +++++++++++++++++++ .../domain/AbstractTestModule.java | 2 +- .../domain/AbstractTestSession.java | 2 +- .../trace/civisibility/domain/TestImpl.java | 2 +- .../civisibility/domain/TestSuiteImpl.java | 2 +- .../buildsystem/BuildSystemModuleImpl.java | 4 +-- .../buildsystem/BuildSystemSessionImpl.java | 5 ++-- .../domain/headless/HeadlessTestModule.java | 4 +-- .../domain/headless/HeadlessTestSession.java | 5 ++-- .../trace/api/civisibility/CIConstants.java | 7 ------ 12 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java 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 6078e61880e..2533668d5bd 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 @@ -9,6 +9,7 @@ import datadog.trace.civisibility.ci.CIProviderInfo; import datadog.trace.civisibility.ci.CITagsProvider; import datadog.trace.civisibility.ci.PullRequestInfo; +import datadog.trace.civisibility.ci.env.CiEnvironment; import datadog.trace.civisibility.codeowners.Codeowners; import datadog.trace.civisibility.codeowners.CodeownersProvider; import datadog.trace.civisibility.codeowners.NoCodeowners; @@ -40,6 +41,7 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import javax.annotation.Nullable; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +66,7 @@ public class CiVisibilityRepoServices { ciProvider = ciProviderInfo.getProvider(); CIInfo ciInfo = ciProviderInfo.buildCIInfo(); - PullRequestInfo pullRequestInfo = ciProviderInfo.buildPullRequestInfo(); + PullRequestInfo pullRequestInfo = buildPullRequestInfo(services.environment, ciProviderInfo); if (pullRequestInfo.isNotEmpty()) { LOGGER.info("PR detected: {}", pullRequestInfo); @@ -107,6 +109,22 @@ public class CiVisibilityRepoServices { } } + @NotNull + private static PullRequestInfo buildPullRequestInfo( + CiEnvironment environment, CIProviderInfo ciProviderInfo) { + PullRequestInfo ciProviderPrInfo = ciProviderInfo.buildPullRequestInfo(); + if (ciProviderPrInfo.isNotEmpty()) { + return ciProviderPrInfo; + } + + // could not get PR info from CI provider, + // check if it was set manually + return new PullRequestInfo( + null, + environment.get(Constants.DD_TARGET_BRANCH_HEAD_SHA), + environment.get(Constants.DD_FEATURE_BRANCH_HEAD_SHA)); + } + private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) { String ciWorkspace = ciInfo.getNormalizedCiWorkspace(); if (Strings.isNotBlank(ciWorkspace)) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java index c2b3f22fa20..f46986f31a5 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java @@ -67,6 +67,7 @@ public class CiVisibilityServices { final CiVisibilityMetricCollector metricCollector; final BackendApi backendApi; final JvmInfoFactory jvmInfoFactory; + final CiEnvironment environment; final CIProviderInfoFactory ciProviderInfoFactory; final GitClient.Factory gitClientFactory; final GitInfoProvider gitInfoProvider; @@ -87,7 +88,7 @@ public class CiVisibilityServices { this.jvmInfoFactory = new CachingJvmInfoFactory(config, new JvmInfoFactoryImpl()); this.gitClientFactory = buildGitClientFactory(config, metricCollector); - CiEnvironment environment = buildCiEnvironment(config, sco); + this.environment = buildCiEnvironment(config, sco); this.ciProviderInfoFactory = new CIProviderInfoFactory(config, environment); this.linesResolver = new BestEffortLinesResolver(new CompilerAidedLinesResolver(), new ByteCodeLinesResolver()); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java new file mode 100644 index 00000000000..79b556b7cb7 --- /dev/null +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java @@ -0,0 +1,25 @@ +package datadog.trace.civisibility; + +/** Constants that are not part of the internal (or external) API. */ +public interface Constants { + + /** + * Indicates that early flakiness detection feature was aborted in a test session because too many + * test cases were considered new. + */ + String EFD_ABORT_REASON_FAULTY = "faulty"; + + String CI_VISIBILITY_INSTRUMENTATION_NAME = "civisibility"; + + /** + * Env var containing SHA of the feature branch HEAD commit when running in a PR. Can be set + * manually if the necessary data is not exposed by the CI provider + */ + String DD_FEATURE_BRANCH_HEAD_SHA = "DD_FEATURE_BRANCH_HEAD_SHA"; + + /** + * Env var containing SHA of the target branch HEAD commit when running in a PR. Can be set + * manually if the necessary data is not exposed by the CI provider + */ + String DD_TARGET_BRANCH_HEAD_SHA = "DD_TARGET_BRANCH_HEAD_SHA"; +} diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java index 18f383106bd..5e99ea598f2 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java @@ -1,6 +1,6 @@ package datadog.trace.civisibility.domain; -import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME; +import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; import datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java index 90681d6a02e..51d2b1ceec9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java @@ -1,7 +1,7 @@ package datadog.trace.civisibility.domain; import static datadog.trace.api.TracePropagationStyle.NONE; -import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME; +import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; import datadog.trace.api.DDTraceId; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java index 270c3c1c7ee..f869618117d 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java @@ -1,8 +1,8 @@ package datadog.trace.civisibility.domain; import static datadog.json.JsonMapper.toJson; -import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; import datadog.trace.api.DDTraceId; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java index 65ee32ad17f..93facb1a93e 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java @@ -1,8 +1,8 @@ package datadog.trace.civisibility.domain; import static datadog.json.JsonMapper.toJson; -import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; import datadog.trace.api.civisibility.DDTestSuite; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java index 3754c6cee22..d38fc439408 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java @@ -6,7 +6,6 @@ import datadog.context.propagation.CarrierSetter; import datadog.trace.api.Config; import datadog.trace.api.DDTags; -import datadog.trace.api.civisibility.CIConstants; import datadog.trace.api.civisibility.domain.BuildModuleLayout; import datadog.trace.api.civisibility.domain.BuildModuleSettings; import datadog.trace.api.civisibility.domain.BuildSessionSettings; @@ -16,6 +15,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.civisibility.Constants; import datadog.trace.civisibility.codeowners.Codeowners; import datadog.trace.civisibility.config.ExecutionSettings; import datadog.trace.civisibility.coverage.percentage.CoverageCalculator; @@ -269,7 +269,7 @@ private SignalResponse onModuleExecutionResultReceived(ModuleExecutionResult res if (result.isEarlyFlakeDetectionEnabled()) { setTag(Tags.TEST_EARLY_FLAKE_ENABLED, true); if (result.isEarlyFlakeDetectionFaulty()) { - setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, CIConstants.EFD_ABORT_REASON_FAULTY); + setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, Constants.EFD_ABORT_REASON_FAULTY); } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java index 513cb74938f..c8a289caa7a 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java @@ -4,7 +4,6 @@ import datadog.trace.api.Config; import datadog.trace.api.DDTags; -import datadog.trace.api.civisibility.CIConstants; import datadog.trace.api.civisibility.domain.BuildModuleLayout; import datadog.trace.api.civisibility.domain.BuildSessionSettings; import datadog.trace.api.civisibility.domain.JavaAgent; @@ -14,6 +13,7 @@ import datadog.trace.api.civisibility.telemetry.tag.Provider; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.civisibility.Constants; import datadog.trace.civisibility.codeowners.Codeowners; import datadog.trace.civisibility.config.ExecutionSettings; import datadog.trace.civisibility.config.ExecutionSettingsFactory; @@ -208,8 +208,7 @@ public BuildSessionSettings getSettings() { @Override protected Collection additionalTelemetryTags() { - if (CIConstants.EFD_ABORT_REASON_FAULTY.equals( - span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) { + if (Constants.EFD_ABORT_REASON_FAULTY.equals(span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) { return Collections.singleton(EarlyFlakeDetectionAbortReason.FAULTY); } return Collections.emptySet(); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java index 65a75ed685a..2d8a66135e9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java @@ -2,7 +2,6 @@ import datadog.trace.api.Config; import datadog.trace.api.DDTags; -import datadog.trace.api.civisibility.CIConstants; import datadog.trace.api.civisibility.config.LibraryCapability; import datadog.trace.api.civisibility.config.TestIdentifier; import datadog.trace.api.civisibility.config.TestSourceData; @@ -14,6 +13,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.civisibility.Constants; import datadog.trace.civisibility.codeowners.Codeowners; import datadog.trace.civisibility.config.EarlyFlakeDetectionSettings; import datadog.trace.civisibility.config.ExecutionSettings; @@ -150,7 +150,7 @@ public void end(@Nullable Long endTime) { if (earlyFlakeDetectionSettings.isEnabled()) { setTag(Tags.TEST_EARLY_FLAKE_ENABLED, true); if (executionStrategy.isEFDLimitReached()) { - setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, CIConstants.EFD_ABORT_REASON_FAULTY); + setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, Constants.EFD_ABORT_REASON_FAULTY); } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java index a499793115b..ccafd04a41d 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java @@ -2,7 +2,6 @@ import datadog.trace.api.Config; import datadog.trace.api.DDTags; -import datadog.trace.api.civisibility.CIConstants; import datadog.trace.api.civisibility.config.LibraryCapability; import datadog.trace.api.civisibility.coverage.CoverageStore; import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector; @@ -11,6 +10,7 @@ import datadog.trace.api.civisibility.telemetry.tag.Provider; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.civisibility.Constants; import datadog.trace.civisibility.codeowners.Codeowners; import datadog.trace.civisibility.decorator.TestDecorator; import datadog.trace.civisibility.domain.AbstractTestSession; @@ -102,8 +102,7 @@ private void propagateModuleTags(AgentSpan moduleSpan) { @Override protected Collection additionalTelemetryTags() { - if (CIConstants.EFD_ABORT_REASON_FAULTY.equals( - span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) { + if (Constants.EFD_ABORT_REASON_FAULTY.equals(span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) { return Collections.singleton(EarlyFlakeDetectionAbortReason.FAULTY); } return Collections.emptySet(); diff --git a/internal-api/src/main/java/datadog/trace/api/civisibility/CIConstants.java b/internal-api/src/main/java/datadog/trace/api/civisibility/CIConstants.java index 08d5b7a13cf..a4ed5a1d9c6 100644 --- a/internal-api/src/main/java/datadog/trace/api/civisibility/CIConstants.java +++ b/internal-api/src/main/java/datadog/trace/api/civisibility/CIConstants.java @@ -1,16 +1,9 @@ package datadog.trace.api.civisibility; public interface CIConstants { - /** - * Indicates that early flakiness detection feature was aborted in a test session because too many - * test cases were considered new. - */ - String EFD_ABORT_REASON_FAULTY = "faulty"; String SELENIUM_BROWSER_DRIVER = "selenium"; - String CI_VISIBILITY_INSTRUMENTATION_NAME = "civisibility"; - String FAIL_FAST_TEST_ORDER = "FAILFAST"; String CIAPP_TEST_ORIGIN = "ciapp-test"; From ab6df6e75d913bcf3b4d2b869cdcf4096fda9351 Mon Sep 17 00:00:00 2001 From: Nikita Tkachenko Date: Fri, 14 Mar 2025 16:26:36 +0100 Subject: [PATCH 2/3] Replace Jetbrains annotation with a standard javax one --- .../datadog/trace/civisibility/CiVisibilityRepoServices.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java index 2533668d5bd..f3ffb49622a 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 @@ -40,8 +40,8 @@ import java.nio.file.Paths; import java.util.Map; import java.util.concurrent.CompletableFuture; +import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +109,7 @@ public class CiVisibilityRepoServices { } } - @NotNull + @Nonnull private static PullRequestInfo buildPullRequestInfo( CiEnvironment environment, CIProviderInfo ciProviderInfo) { PullRequestInfo ciProviderPrInfo = ciProviderInfo.buildPullRequestInfo(); From c8c04796ed76f80ef311475ccc87164d8e6db845 Mon Sep 17 00:00:00 2001 From: Nikita Tkachenko Date: Mon, 17 Mar 2025 10:25:26 +0100 Subject: [PATCH 3/3] Update env var names --- .../trace/civisibility/CiVisibilityRepoServices.java | 4 ++-- .../java/datadog/trace/civisibility/Constants.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java index f3ffb49622a..7ebbe41c005 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 @@ -121,8 +121,8 @@ private static PullRequestInfo buildPullRequestInfo( // check if it was set manually return new PullRequestInfo( null, - environment.get(Constants.DD_TARGET_BRANCH_HEAD_SHA), - environment.get(Constants.DD_FEATURE_BRANCH_HEAD_SHA)); + environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA), + environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)); } private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java index 79b556b7cb7..d662f9b5e58 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/Constants.java @@ -12,14 +12,14 @@ public interface Constants { String CI_VISIBILITY_INSTRUMENTATION_NAME = "civisibility"; /** - * Env var containing SHA of the feature branch HEAD commit when running in a PR. Can be set - * manually if the necessary data is not exposed by the CI provider + * Env var containing SHA of the feature branch HEAD commit when running in a PR. Set manually if + * the necessary data is not exposed by the CI provider */ - String DD_FEATURE_BRANCH_HEAD_SHA = "DD_FEATURE_BRANCH_HEAD_SHA"; + String DDCI_PULL_REQUEST_SOURCE_SHA = "DDCI_PULL_REQUEST_SOURCE_SHA"; /** - * Env var containing SHA of the target branch HEAD commit when running in a PR. Can be set - * manually if the necessary data is not exposed by the CI provider + * Env var containing SHA of the target branch HEAD commit when running in a PR. Set manually if + * the necessary data is not exposed by the CI provider */ - String DD_TARGET_BRANCH_HEAD_SHA = "DD_TARGET_BRANCH_HEAD_SHA"; + String DDCI_PULL_REQUEST_TARGET_SHA = "DDCI_PULL_REQUEST_TARGET_SHA"; }