-
Notifications
You must be signed in to change notification settings - Fork 12
/
SetUpDetectWorkspaceCallable.java
124 lines (105 loc) · 5.35 KB
/
SetUpDetectWorkspaceCallable.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* blackduck-detect
*
* Copyright (c) 2019 Synopsys, Inc.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.synopsys.integration.jenkins.detect.substeps;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.jenkinsci.remoting.Role;
import org.jenkinsci.remoting.RoleChecker;
import com.synopsys.integration.exception.IntegrationException;
import com.synopsys.integration.jenkins.detect.DetectDownloadManager;
import com.synopsys.integration.jenkins.detect.DetectJenkinsLogger;
import com.synopsys.integration.jenkins.detect.JavaExecutableManager;
import com.synopsys.integration.jenkins.detect.exception.DetectJenkinsException;
import hudson.Platform;
import hudson.remoting.Callable;
public class SetUpDetectWorkspaceCallable implements Callable<DetectSetupResponse, IntegrationException> {
private static final long serialVersionUID = -4754831395795794586L;
private final DetectJenkinsLogger logger;
private final HashMap<String, String> environmentVariables;
private final String workspaceTempPath;
private final String remoteJavaHome;
public SetUpDetectWorkspaceCallable(final DetectJenkinsLogger logger, final Map<String, String> environmentVariables, final String workspaceTempPath, final String remoteJavaHome) {
this.logger = logger;
this.environmentVariables = new HashMap<>(environmentVariables);
this.workspaceTempPath = workspaceTempPath;
this.remoteJavaHome = remoteJavaHome;
}
@Override
public DetectSetupResponse call() throws IntegrationException {
try {
final String pathToDetectJar = environmentVariables.get("DETECT_JAR");
final DetectSetupResponse.ExecutionStrategy executionStrategy = determineExecutionStrategy(pathToDetectJar);
if (executionStrategy == DetectSetupResponse.ExecutionStrategy.JAR) {
return setUpForJarExecution(pathToDetectJar, remoteJavaHome);
} else {
return setUpForScriptExecution(executionStrategy);
}
} catch (final Exception e) {
throw new DetectJenkinsException("Could not set up Detect environment", e);
}
}
@Override
public void checkRoles(final RoleChecker checker) throws SecurityException {
checker.check(this, new Role(this.getClass()));
}
private DetectSetupResponse.ExecutionStrategy determineExecutionStrategy(final String pathToDetectJar) {
if (StringUtils.isNotBlank(pathToDetectJar)) {
return DetectSetupResponse.ExecutionStrategy.JAR;
} else {
if (Platform.current() == Platform.WINDOWS) {
return DetectSetupResponse.ExecutionStrategy.POWERSHELL_SCRIPT;
} else {
return DetectSetupResponse.ExecutionStrategy.SHELL_SCRIPT;
}
}
}
private DetectSetupResponse setUpForJarExecution(final String pathToDetectJar, final String javaHome) throws IOException {
final JavaExecutableManager javaExecutableManager = new JavaExecutableManager(logger, environmentVariables);
final String javaExecutablePath = javaExecutableManager.calculateJavaExecutablePath(javaHome);
logger.info("Running with JAVA: " + javaExecutablePath);
logger.info("Detect configured: " + pathToDetectJar);
javaExecutableManager.logJavaVersion();
final Path detectJar = Paths.get(pathToDetectJar);
logger.info("Running Detect: " + detectJar.getFileName());
return new DetectSetupResponse(DetectSetupResponse.ExecutionStrategy.JAR, javaExecutablePath, pathToDetectJar);
}
private DetectSetupResponse setUpForScriptExecution(final DetectSetupResponse.ExecutionStrategy executionStrategy) throws IOException, IntegrationException {
final String detectRemotePath;
final String scriptUrl;
if (executionStrategy == DetectSetupResponse.ExecutionStrategy.POWERSHELL_SCRIPT) {
scriptUrl = DetectDownloadManager.LATEST_POWERSHELL_SCRIPT_URL;
} else {
scriptUrl = DetectDownloadManager.LATEST_SHELL_SCRIPT_URL;
}
final DetectDownloadManager detectDownloadManager = new DetectDownloadManager(logger, workspaceTempPath);
detectRemotePath = detectDownloadManager.downloadScript(scriptUrl).getCanonicalPath();
if (StringUtils.isBlank(detectRemotePath)) {
throw new IntegrationException("[ERROR] The Detect script was not downloaded successfully.");
}
return new DetectSetupResponse(executionStrategy, detectRemotePath);
}
}