io.sealights.agents.plugin.SealightsPlugin Maven / Gradle / Ivy
package io.sealights.agents.plugin;
import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.logging.Logging;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.testing.Test;
import io.sealights.onpremise.agents.java.agent.infra.utils.StringUtils;
import io.sealights.onpremise.agents.java.agent.plugins.engine.api.PluginExecData;
public class SealightsPlugin implements Plugin {
private EnhancedLogger logger = new EnhancedLogger(Logging.getLogger(this.getClass()));
@Override
public void apply(Project project) {
logger.lifecycle("Applying {} plugin to project '{}'", Constants.PLUGIN_EXTENSION_NAME, project.getName());
try {
SealightsPluginExtention sealights = project.getExtensions().create(Constants.PLUGIN_EXTENSION_NAME, SealightsPluginExtention.class, project);
// This is the patch for backward compatibility; the better solution was not found
// TODO remove it till 01.04.2018 (not a joke)
project.getExtensions().add(Constants.LISTENERTASK_EXTENSION_NAME, sealights);
project.getGradle().addListener(new SealightsBuildListener(project));
configureTasks(project);
}
catch(Exception e) {
logger.lifecycle(PluginExecData.SKIP_SEALIGHTS_MSG + " may occur due to error '{}' , run with --debug to see the stacktrace",
StringUtils.isNotEmpty(e.getMessage())? e.getMessage() : e.getClass().getName());
logger.debug("Exception:", e);
}
}
private void configureTasks(final Project project) {
project.afterEvaluate(new Action() {
@Override
public void execute(Project project) {
logger.lifecycle("project.afterEvaluate: configureJacocoTests");
configureJacocoTests(project);
}
});
final Test testTask = (Test) lookupTask(project, JavaPlugin.TEST_TASK_NAME);
if (testTask != null) {
testTask.doFirst(new Action() {
@Override
public void execute(Task test) {
logger.lifecycle("project '{}', task '{}', configureTestTask", project.getName(), testTask.getName());
configureTestTask(project, testTask);
}
});
}
else {
logger.lifecycle("Skipping sealights test listener for project '{}'", project.getName());
}
final JavaCompile javaCompileTask = (JavaCompile) lookupTask(project, JavaPlugin.COMPILE_JAVA_TASK_NAME);
if (javaCompileTask != null) {
javaCompileTask.doLast(new Action() {
@Override
public void execute(Task task) {
logger.lifecycle("project '{}', from '{}', configureCompileJavaTask", project.getName(), javaCompileTask.getName());
configureCompileJavaTask(project, javaCompileTask);
}
});
}
else {
logger.lifecycle("Skipping sealights build scanner for project '{}'", project.getName());
}
}
private Task lookupTask(final Project project, String taskName) {
TaskContainer tc = project.getTasks();
if (tc != null) {
return tc.findByName(taskName);
}
else {
logger.lifecycle("task '{}' does not exists in project '{}'");
return null;
}
}
private void configureJacocoTests(Project project) {
final SealightsPluginExtention extension = (SealightsPluginExtention) project.getExtensions().getByName(Constants.PLUGIN_EXTENSION_NAME);
PrepareTstListnrTask task = new PrepareTstListnrTask(extension);
task.execute();
}
private void configureTestTask(Project project, Test testTask) {
final SealightsPluginExtention extension = (SealightsPluginExtention) project.getExtensions().getByName(Constants.PLUGIN_EXTENSION_NAME);
TstListnrTask task = new TstListnrTask(testTask, extension);
task.execute();
}
private void configureCompileJavaTask(Project project, JavaCompile compileTask) {
final SealightsPluginExtention extention = (SealightsPluginExtention) project.getExtensions().getByName(Constants.PLUGIN_EXTENSION_NAME);
boolean runSucceeded = true;
if (!extention.getExecData().isNullModuleDone()) {
// First execute for null module
BldScanrTask task = new BldScanrTask(compileTask, extention);
runSucceeded = task.execute();
if (runSucceeded) {
extention.getExecData().nullModuleIsDone();
}
}
if (runSucceeded) {
// Another build scanner execution
BldScanrTask task = new BldScanrTask(compileTask, extention);
task.execute();
}
}
}