From 449944ffe807770d82b4414497c0dd46d1a6676f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Wed, 20 Jul 2022 00:21:49 +0200 Subject: [PATCH 1/6] This should fail --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6b71584..230a06c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.gradle.configureondemand=true systemProp.ruthless.java.languageVersion=8 -systemProp.sonar.projectKey=LajosCseppento_ruthless +#systemProp.sonar.projectKey=LajosCseppento_ruthless systemProp.sonar.organization=lajoscseppento systemProp.sonar.host.url=https://sonarcloud.io From 3d54bb12f4a5f6354cb4d89c4e5fbf8d9c6d5f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Wed, 20 Jul 2022 00:22:02 +0200 Subject: [PATCH 2/6] And what about this? --- build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ab2a386..4bf2deb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,8 @@ plugins { id("org.sonarqube") version "3.4.0.2513" } +System.setProperty("systemProp.sonar.projectKey", "LajosCseppento_ruthless") + allprojects { tasks.withType { val task = this From 0dda1ed72862b948c0c20c89316bd292616e368d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Wed, 20 Jul 2022 02:22:48 +0200 Subject: [PATCH 3/6] Now? --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4bf2deb..84e24b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("org.sonarqube") version "3.4.0.2513" } -System.setProperty("systemProp.sonar.projectKey", "LajosCseppento_ruthless") +System.setProperty("sonar.projectKey", "LajosCseppento_ruthless") allprojects { tasks.withType { From f6019bc6cc8330d91e8f28446afe23d0804a353d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Wed, 20 Jul 2022 02:24:10 +0200 Subject: [PATCH 4/6] Different --- build.gradle.kts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 84e24b1..f4176cd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("org.sonarqube") version "3.4.0.2513" } -System.setProperty("sonar.projectKey", "LajosCseppento_ruthless") +//System.setProperty("sonar.projectKey", "LajosCseppento_ruthless") allprojects { tasks.withType { @@ -12,3 +12,9 @@ allprojects { } } } + +sonarqube { + properties { + property("projectKey", "LajosCseppento_ruthless") + } +} From b90699ac90e8373856540342577d6f0f4571ce31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Wed, 20 Jul 2022 02:28:06 +0200 Subject: [PATCH 5/6] Again --- build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f4176cd..7964f34 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,6 +15,7 @@ allprojects { sonarqube { properties { - property("projectKey", "LajosCseppento_ruthless") +// property("projectKey", "LajosCseppento_ruthless") + property("sonar.projectKey", "LajosCseppento_ruthless") } } From edeba4295a8dffd92fd1b2daaa4a482ce8f6e663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lajos=20Cseppent=C5=91?= <1053931+LajosCseppento@users.noreply.github.com> Date: Fri, 22 Jul 2022 21:45:15 +0200 Subject: [PATCH 6/6] Sonar support --- build.gradle.kts | 10 +-- gradle.properties | 2 +- ruthless-plugin/build.gradle.kts | 12 ++- .../plugin/impl/AbstractProjectPlugin.java | 5 ++ .../plugin/impl/RuthlessBasePlugin.java | 74 +++++++++++++++++-- .../src/main/resources/configuration.yml | 3 + 6 files changed, 90 insertions(+), 16 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 96abf40..90fe381 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("org.sonarqube") version "3.4.0.2513" id("io.github.gradle-nexus.publish-plugin") version "1.1.0" + id("com.autonomousapps.dependency-analysis") version "1.10.0" } if (hasProperty("ossrhUsername")) { @@ -18,8 +19,6 @@ if (hasProperty("ossrhUsername")) { logger.warn("Configure project without OSSRH publishing") } -//System.setProperty("sonar.projectKey", "LajosCseppento_ruthless") - allprojects { tasks.withType { if (name == "check") { @@ -33,10 +32,3 @@ allprojects { } } } - -sonarqube { - properties { -// property("projectKey", "LajosCseppento_ruthless") - property("sonar.projectKey", "LajosCseppento_ruthless") - } -} diff --git a/gradle.properties b/gradle.properties index 3476094..e94b14c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.gradle.configureondemand=true systemProp.ruthless.java.languageVersion=8 -#systemProp.sonar.projectKey=LajosCseppento_ruthless +systemProp.sonar.projectKey=LajosCseppento_ruthless systemProp.sonar.organization=lajoscseppento systemProp.sonar.host.url=https://sonarcloud.io diff --git a/ruthless-plugin/build.gradle.kts b/ruthless-plugin/build.gradle.kts index ed87a08..89b1ecd 100644 --- a/ruthless-plugin/build.gradle.kts +++ b/ruthless-plugin/build.gradle.kts @@ -13,6 +13,13 @@ plugins { `maven-publish` } + +// TODO not all plugins are in maven central +// TODO ruthless should do the same for java-gradle-plugin +repositories { + gradlePluginPortal() +} + ruthless.lombok() dependencies { @@ -29,7 +36,10 @@ dependencies { implementation(gav) } - implementation("dev.lajoscseppento.gradle:gradle-plugin-common:0.2.1") + // TODO what is preferred? + api("com.fasterxml.jackson.core:jackson-databind") + api("dev.lajoscseppento.gradle:gradle-plugin-common:0.2.1") + implementation("com.fasterxml.jackson.core:jackson-core") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml") // #55 Direct declaration over dependency constraints to also propagate to the POM implementation("commons-codec:commons-codec:1.15") diff --git a/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/AbstractProjectPlugin.java b/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/AbstractProjectPlugin.java index 70d6ea7..01d3a57 100644 --- a/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/AbstractProjectPlugin.java +++ b/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/AbstractProjectPlugin.java @@ -4,6 +4,7 @@ import dev.lajoscseppento.ruthless.plugin.logging.RuthlessLogger; import java.util.Collections; import java.util.List; +import javax.annotation.Nullable; import lombok.NonNull; import org.gradle.api.Plugin; import org.gradle.api.Project; @@ -37,8 +38,12 @@ public abstract class AbstractProjectPlugin implements Plugin { protected RepositoryHandler repositories; protected TaskContainer tasks; + // TODO remove these from AbstractProjectPlugin + @Nullable protected GradlePluginDevelopmentExtension gradlePlugin; + @Nullable protected JavaPluginExtension java; + @Nullable protected SourceSetContainer sourceSets; @Override diff --git a/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/RuthlessBasePlugin.java b/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/RuthlessBasePlugin.java index b2afe9d..9967ff7 100644 --- a/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/RuthlessBasePlugin.java +++ b/ruthless-plugin/src/main/java/dev/lajoscseppento/ruthless/plugin/impl/RuthlessBasePlugin.java @@ -3,7 +3,21 @@ import dev.lajoscseppento.gradle.plugin.common.impl.Utils; import dev.lajoscseppento.ruthless.plugin.extension.RuthlessExtension; import dev.lajoscseppento.ruthless.plugin.extension.impl.RuthlessExtensionImpl; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; import org.gradle.api.GradleException; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.plugins.BasePlugin; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.language.base.plugins.LifecycleBasePlugin; +import org.sonarqube.gradle.SonarQubeExtension; +import org.sonarqube.gradle.SonarQubePlugin; public class RuthlessBasePlugin extends AbstractProjectPlugin { @Override @@ -16,10 +30,8 @@ public void apply() { logger.info("Adding extension to {}", project); configureExtension(); - if (project.equals(project.getRootProject())) { - logger.info("Configuring sonar on {}", project); - configureSonar(); - } + logger.info("Configuring Sonar Analysis on {}", project); + configureSonar(); project.afterEvaluate(proj -> afterEvaluate()); } @@ -29,8 +41,60 @@ private void configureExtension() { extensions.add(RuthlessExtension.class, "ruthless", ruthless); } + @Override + protected List>> requiredPlugins() { + return Arrays.asList(BasePlugin.class); + } + private void configureSonar() { - // TODO + if (project.equals(project.getRootProject())) { + project.getPluginManager().apply(SonarQubePlugin.class); + } + + TaskProvider sonarqubeTask = + project.getRootProject().getTasks().named(SonarQubeExtension.SONARQUBE_TASK_NAME); + + tasks.withType( + Task.class, + task -> { + if (task.getName().equals(LifecycleBasePlugin.CHECK_TASK_NAME)) { + sonarqubeTask.configure(sqTask -> sqTask.dependsOn(task)); + } + }); + + logger.lifecycle("B"); + logger.lifecycle("{}", sourceSets); + if (sourceSets != null) { + // TODO this is null, since it's context there is no java plugin yet + SonarQubeExtension sonarqube = + (SonarQubeExtension) + project.getExtensions().getByName(SonarQubeExtension.SONARQUBE_EXTENSION_NAME); + + logger.lifecycle("A"); + sonarqube.properties( + sqProperties -> { + logger.lifecycle("Z"); + Collection sonarTests = + (Collection) sqProperties.getProperties().get("sonar.tests"); + List newSonarTests = new ArrayList<>(sonarTests); + + sourceSets.withType( + SourceSet.class, + sourceSet -> { + logger.lifecycle(sourceSet.getName()); + if (sourceSet.getName().endsWith("Test")) { + sourceSet.getAllSource().getSrcDirs().stream() + .filter(File::exists) + .forEach(newSonarTests::add); + } + }); + + if (sonarTests.size() != newSonarTests.size()) { + sqProperties.property("sonar.tests", newSonarTests); + logger.lifecycle("{}",newSonarTests); + } + }); + } } private void afterEvaluate() { diff --git a/ruthless-plugin/src/main/resources/configuration.yml b/ruthless-plugin/src/main/resources/configuration.yml index a81213a..c3e3be6 100644 --- a/ruthless-plugin/src/main/resources/configuration.yml +++ b/ruthless-plugin/src/main/resources/configuration.yml @@ -58,3 +58,6 @@ gradlePlugins: - groupId: io.spring.gradle artifactId: dependency-management-plugin version: 1.0.11.RELEASE + - groupId: org.sonarsource.scanner.gradle + artifactId: sonarqube-gradle-plugin + version: 3.4.0.2513