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

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