Skip to content

Commit

Permalink
Upgrade to Gradle 7.2 and fix report generation (#350)
Browse files Browse the repository at this point in the history
* Gradle 7.2

* Fix Gradle lint report generation with Gradle 7.2
  • Loading branch information
rpalcolea authored Sep 13, 2021
1 parent a9deb55 commit 04c2d80
Show file tree
Hide file tree
Showing 10 changed files with 787 additions and 33 deletions.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ abstract class AbstractLintPluginTaskConfigurer {
}

abstract void wireJavaPlugin(Project project)
abstract Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension)

protected static boolean hasValidTaskConfiguration(Project project, GradleLintExtension lintExt) {
boolean shouldLint = project.hasProperty('gradleLint.alwaysRun') ?
Expand All @@ -50,29 +51,11 @@ abstract class AbstractLintPluginTaskConfigurer {
return tasks.any { it == criticalLintTask && it.state.failure != null }
}

protected Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension) {
new Action<GradleLintReportTask>() {
@Override
void execute(GradleLintReportTask gradleLintReportTask) {
gradleLintReportTask.reportOnlyFixableViolations = getReportOnlyFixableViolations(project, extension)
gradleLintReportTask.reports.all { report ->
report.conventionMapping.with {
enabled = { report.name == getReportFormat(project, extension) }
destination = {
def fileSuffix = report.name == 'text' ? 'txt' : report.name
new File(project.buildDir, "reports/gradleLint/${project.name}.$fileSuffix")
}
}
}
}
}
}

private static String getReportFormat(Project project, GradleLintExtension extension) {
protected static String getReportFormat(Project project, GradleLintExtension extension) {
return project.hasProperty('gradleLint.reportFormat') ? project.property('gradleLint.reportFormat') : extension.reportFormat
}

private static boolean getReportOnlyFixableViolations(Project project, GradleLintExtension extension) {
protected static boolean getReportOnlyFixableViolations(Project project, GradleLintExtension extension) {
return project.hasProperty('gradleLint.reportOnlyFixableViolations') ? Boolean.valueOf(project.property('gradleLint.reportOnlyFixableViolations').toString()) : extension.reportOnlyFixableViolations
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.netflix.nebula.lint.plugin

import org.gradle.api.Action
import org.gradle.api.Project

class Gradle7AndHigherLintPluginTaskConfigurer extends GradleBetween5And7LintPluginTaskConfigurer {
@Override
Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension) {
new Action<GradleLintReportTask>() {
@Override
void execute(GradleLintReportTask gradleLintReportTask) {
gradleLintReportTask.reportOnlyFixableViolations = getReportOnlyFixableViolations(project, extension)
gradleLintReportTask.reports.all { report ->
def fileSuffix = report.name == 'text' ? 'txt' : report.name
report.conventionMapping.with {
required.set(report.name == getReportFormat(project, extension))
outputLocation.set(new File(project.buildDir, "reports/gradleLint/${project.name}.$fileSuffix"))
}
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.netflix.nebula.lint.plugin

import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.execution.TaskExecutionListener
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.TaskState
import org.gradle.api.tasks.compile.AbstractCompile

class GradleBetween5And7LintPluginTaskConfigurer extends GradleLintPluginTaskConfigurer{
@Override
Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension) {
new Action<GradleLintReportTask>() {
@Override
void execute(GradleLintReportTask gradleLintReportTask) {
gradleLintReportTask.reportOnlyFixableViolations = getReportOnlyFixableViolations(project, extension)
gradleLintReportTask.reports.all { report ->
report.conventionMapping.with {
enabled = { report.name == getReportFormat(project, extension) }
destination = {
def fileSuffix = report.name == 'text' ? 'txt' : report.name
new File(project.buildDir, "reports/gradleLint/${project.name}.$fileSuffix")
}
}
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,11 @@ class GradleLintPlugin implements Plugin<Project> {

LintRuleRegistry.classLoader = getClass().classLoader

if (GradleKt.versionCompareTo(project.gradle, '5.0') >= 0) {
new GradleLintPluginTaskConfigurer().configure(project)
// TODO: we need to retire this once we have folks in Gradle 7.x+
if (GradleKt.versionCompareTo(project.gradle, '7.0') >= 0) {
new Gradle7AndHigherLintPluginTaskConfigurer().configure(project)
} else if (GradleKt.versionCompareTo(project.gradle, '5.0') >= 0) {
new GradleBetween5And7LintPluginTaskConfigurer().configure(project)
} else {
new LegacyGradleLintPluginTaskConfigurer().configure(project)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.TaskState
import org.gradle.api.tasks.compile.AbstractCompile

class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
abstract class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
abstract Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension)

@Override
void createTasks(Project project, GradleLintExtension lintExt) {
Expand Down Expand Up @@ -70,7 +71,7 @@ class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
}
}

private void configureAutoLint(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasks, TaskProvider criticalLintTask) {
protected void configureAutoLint(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasks, TaskProvider criticalLintTask) {
List<TaskProvider> lintTasksToVerify = lintTasks + criticalLintTask
project.afterEvaluate {
if (lintExt.autoLintAfterFailure) {
Expand All @@ -89,7 +90,7 @@ class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
* @param lintExt
* @param lintTasksToVerify
*/
private void configureAutoLintWithFailures(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasksToVerify) {
protected void configureAutoLintWithFailures(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasksToVerify) {
boolean hasExplicitLintTask = project.gradle.startParameter.taskNames.any { lintTasksToVerify.name.contains(it) }
if (!hasValidTaskConfiguration(project, lintExt) || hasExplicitLintTask) {
return
Expand All @@ -107,7 +108,7 @@ class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
* @param lintTasks
* @param criticalLintTask
*/
private void configureAutoLintWithoutFailures(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasks, TaskProvider criticalLintTask) {
protected void configureAutoLintWithoutFailures(Task autoLintTask, Project project, GradleLintExtension lintExt, List<TaskProvider> lintTasks, TaskProvider criticalLintTask) {
project.gradle.taskGraph.whenReady { taskGraph ->
List<Task> allTasks = taskGraph.allTasks
if (hasValidTaskConfiguration(project, lintExt)) {
Expand Down Expand Up @@ -140,7 +141,7 @@ class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
* @param lintTasks
* @param autoLintTask
*/
private void finalizeAllTasksWithAutoLint(Project project, List<TaskProvider> lintTasks, Task autoLintTask, GradleLintExtension lintExt) {
protected void finalizeAllTasksWithAutoLint(Project project, List<TaskProvider> lintTasks, Task autoLintTask, GradleLintExtension lintExt) {
project.tasks.configureEach { task ->
boolean skipForSpecificTask = lintExt.skipForTasks.any { taskToSkip -> task.name.endsWith(taskToSkip) }

Expand All @@ -153,7 +154,7 @@ class GradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigurer {
}
}

private void configureReportTask(Project project, GradleLintExtension extension) {
protected void configureReportTask(Project project, GradleLintExtension extension) {
TaskProvider<GradleLintReportTask> reportTask = project.tasks.register(GENERATE_GRADLE_LINT_REPORT, GradleLintReportTask)
reportTask.configure(configureReportAction(project, extension))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package com.netflix.nebula.lint.plugin

import com.netflix.nebula.interop.GradleKt
import com.netflix.nebula.lint.GradleLintPatchAction
import com.netflix.nebula.lint.StyledTextService
import com.netflix.nebula.lint.utils.DeprecationLoggerUtils
Expand Down Expand Up @@ -86,10 +87,18 @@ class GradleLintReportTask extends DefaultTask implements VerificationTask, Repo
reports.enabled.each { Report r ->
ReportWriter writer = null

switch (r.name) {
case 'xml': writer = new XmlReportWriter(outputFile: r.destination); break
case 'html': writer = new HtmlReportWriter(outputFile: r.destination); break
case 'text': writer = new TextReportWriter(outputFile: r.destination); break
if (GradleKt.versionCompareTo(project.gradle, '7.0') >= 0) {
switch (r.name) {
case 'xml': writer = new XmlReportWriter(outputFile: r.outputLocation.get().asFile); break
case 'html': writer = new HtmlReportWriter(outputFile: r.outputLocation.get().asFile); break
case 'text': writer = new TextReportWriter(outputFile: r.outputLocation.get().asFile); break
}
} else {
switch (r.name) {
case 'xml': writer = new XmlReportWriter(outputFile: r.destination); break
case 'html': writer = new HtmlReportWriter(outputFile: r.destination); break
case 'text': writer = new TextReportWriter(outputFile: r.destination); break
}
}

writer.writeReport(new AnalysisContext(ruleSet: lintService.ruleSet(project)), results)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.netflix.nebula.lint.plugin

import org.gradle.BuildResult
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.execution.TaskExecutionGraph
Expand Down Expand Up @@ -87,4 +88,23 @@ class LegacyGradleLintPluginTaskConfigurer extends AbstractLintPluginTaskConfigu
private void configureReportTask(Project project, GradleLintExtension extension) {
def task = project.tasks.create(GENERATE_GRADLE_LINT_REPORT, GradleLintReportTask, configureReportAction(project, extension))
}

@Override
Action<GradleLintReportTask> configureReportAction(Project project, GradleLintExtension extension) {
new Action<GradleLintReportTask>() {
@Override
void execute(GradleLintReportTask gradleLintReportTask) {
gradleLintReportTask.reportOnlyFixableViolations = getReportOnlyFixableViolations(project, extension)
gradleLintReportTask.reports.all { report ->
report.conventionMapping.with {
enabled = { report.name == getReportFormat(project, extension) }
destination = {
def fileSuffix = report.name == 'text' ? 'txt' : report.name
new File(project.buildDir, "reports/gradleLint/${project.name}.$fileSuffix")
}
}
}
}
}
}
}
Loading

0 comments on commit 04c2d80

Please sign in to comment.