aboutsummaryrefslogtreecommitdiff
path: root/buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java')
-rw-r--r--buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java b/buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java
new file mode 100644
index 000000000..a9da0040b
--- /dev/null
+++ b/buildSrc/src/main/java/deployment/DeploymentRequestProcessTask.java
@@ -0,0 +1,105 @@
+package deployment;
+
+import github.Deployment;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.TaskAction;
+
+public class DeploymentRequestProcessTask extends DefaultTask {
+
+ private final DeploymentProcessConfiguration mConfiguration;
+ private final int mStepIndex;
+
+ @Input
+ public String getEnvironmentKey() {
+ return getEnvironmentName(mConfiguration, mStepIndex);
+ }
+
+ @Inject
+ public DeploymentRequestProcessTask(
+ DeploymentProcessConfiguration configuration, int stepIndex) {
+ mConfiguration = configuration;
+ mStepIndex = stepIndex;
+ setGroup("Publishing");
+ setDescription("Request deployment of " + getEnvironmentName(configuration, stepIndex));
+ }
+
+ @TaskAction
+ public void deploymentRequestAction() {
+ try {
+ deploymentRequest(getProject().getProperties(), mConfiguration, mStepIndex);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static void deploymentRequest(
+ Map<String, ?> properties, DeploymentProcessConfiguration configuration, int stepIndex)
+ throws Exception {
+ final DeploymentCommandLineArgs data =
+ new DeploymentCommandLineArgs(
+ properties.get("requestDeploy.sha").toString(),
+ properties.get("requestDeploy.api_user_name").toString(),
+ properties.get("requestDeploy.api_user_token").toString());
+
+ Deployment deployment = new Deployment(data.apiUsername, data.apiUserToken);
+ if (stepIndex == 0) {
+ requestNewDeploy(deployment, data, configuration);
+ } else {
+ throw new UnsupportedOperationException(
+ "step " + stepIndex + " for " + configuration.name + " is not implemented!");
+ }
+ }
+
+ private static void requestNewDeploy(
+ Deployment deployment,
+ DeploymentCommandLineArgs data,
+ DeploymentProcessConfiguration environment)
+ throws Exception {
+ final String environmentToDeploy = getEnvironmentName(environment, 0);
+ final List<String> environmentsToKill =
+ environment.environmentSteps.stream()
+ .map(name -> getEnvironmentName(environment.name, name))
+ .filter(env -> !env.equals(environmentToDeploy))
+ .collect(Collectors.toList());
+
+ final Deployment.Response response =
+ deployment.requestDeployment(
+ new Deployment.Request(
+ data.sha,
+ "deploy",
+ false,
+ environmentToDeploy,
+ String.format(
+ Locale.ROOT,
+ "Deployment for '%s' request by '%s'.",
+ environmentToDeploy,
+ data.apiUsername),
+ Collections.singletonList("master-green-requirement"),
+ new Deployment.RequestPayloadField(environmentsToKill)));
+
+ System.out.println(
+ String.format(
+ Locale.ROOT,
+ "Deploy request response: id %s, sha %s, environment %s, task %s.",
+ response.id,
+ response.sha,
+ response.environment,
+ response.task));
+ }
+
+ private static String getEnvironmentName(String environmentName, String stepName) {
+ return String.format(Locale.ROOT, "%s_%s", environmentName, stepName);
+ }
+
+ private static String getEnvironmentName(
+ DeploymentProcessConfiguration environment, int index) {
+ return getEnvironmentName(environment.name, environment.environmentSteps.get(index));
+ }
+}