
com.browserstack.BrowserstackGradlePlugin Maven / Gradle / Ivy
package com.browserstack;
import com.browserstack.config.BrowserStackConfig;
import com.browserstack.utils.Constants;
import com.browserstack.utils.GradleTaskUtils;
import com.browserstack.utils.UtilityMethods;
import org.json.simple.JSONObject;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import org.gradle.api.Task;
import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class BrowserstackGradlePlugin implements Plugin {
private static Boolean shouldPatchTasks = true;
public void apply(Project project) {
shouldPatchTasks = shouldPatchTasks();
if(System.getenv("platformIndex") != null || !shouldPatchTasks) {
if(!shouldPatchTasks) {
project.afterEvaluate(afterProject -> {
GradleTaskUtils.modifyJVMArgs(project);
});
}
return;
}
try {
GradleTaskUtils.cleanupGradleMConfig();
} catch (Exception ignored) {}
project.afterEvaluate(afterProject -> {
GradleTaskUtils.createTaskWithName(Constants.GRADLE_BROWSERSTACK_TASK, afterProject);
});
project.getTasks().withType(Task.class, task -> {
task.doFirst(new Action() {
@Override
public void execute(Task t) {
org.gradle.StartParameter startParameter = project.getRootProject().getGradle().getStartParameter();
String fileSeparator = System.getProperty("file.separator");
String workingDirectoryPath = startParameter.getCurrentDir().toString();
String gradleConfigFile = "gradle-m-config.json";
String fullConfigFilePath = workingDirectoryPath + fileSeparator + gradleConfigFile;
JSONObject jsonObject = new JSONObject();
jsonObject.put("projectDir", startParameter.getCurrentDir().toString());
org.gradle.TaskExecutionRequest taskExecutionRequest = startParameter.getTaskRequests().get(0);
jsonObject.put("taskArgs", taskExecutionRequest.getArgs());
jsonObject.put("gradleVersion", project.getGradle().getGradleVersion());
jsonObject.put("gradleHome", project.getGradle().getGradleHomeDir() != null ? project.getGradle().getGradleHomeDir().toString() : "");
jsonObject.put("gradleUserHome", startParameter.DEFAULT_GRADLE_USER_HOME.toString());
jsonObject.put("logLevel", startParameter.getLogLevel().toString());
jsonObject.put("systemPropertiesArgs", startParameter.getSystemPropertiesArgs());
try (FileWriter newFile = new FileWriter(fullConfigFilePath)) {
newFile.write(jsonObject.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
});
if (task.getName().equalsIgnoreCase("testClasses")) {
task.finalizedBy(Constants.GRADLE_BROWSERSTACK_TASK);
}
});
project.getGradle().getTaskGraph().whenReady(taskGraph -> {
HashMap browserStackSDKRunnerTask = GradleTaskUtils.disableTestTasks(taskGraph);
Map.Entry browserStackSDKRunnerTaskEntry = browserStackSDKRunnerTask.entrySet().iterator().next();
if (browserStackSDKRunnerTaskEntry != null) {
boolean sdkRunnerEnabled = browserStackSDKRunnerTaskEntry.getValue();
Task sdkRunnerTask = browserStackSDKRunnerTaskEntry.getKey();
System.out.println("[BrowserStack SDK Plugin] Runner enabled - " + sdkRunnerEnabled);
if (sdkRunnerEnabled && sdkRunnerTask != null) {
sdkRunnerTask.setEnabled(true);
}
}
});
}
public boolean shouldPatchTasks() {
BrowserStackConfig browserStackConfig = BrowserStackConfig.getNonSingletonInstance();
return (browserStackConfig!= null && browserStackConfig.getPlatforms() != null && browserStackConfig.getPlatforms().size() > 0 && browserStackConfig.shouldPatch());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy