All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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();
		}
	}

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy