Skip to content

Commit

Permalink
Add new check: gradle wrapper [JENKINS-29486]
Browse files Browse the repository at this point in the history
  • Loading branch information
v1v committed Jul 22, 2015
1 parent 309ab14 commit 06f1b49
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 0 deletions.
12 changes: 12 additions & 0 deletions pom.xml
Expand Up @@ -52,6 +52,11 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version>
</plugin>
</plugins>
</reporting>

Expand Down Expand Up @@ -82,6 +87,13 @@
<version>1.0</version>
</dependency>

<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>gradle</artifactId>
<version>1.24</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>maven-plugin</artifactId>
Expand Down
Expand Up @@ -7,6 +7,7 @@
import org.jenkins.ci.plugins.jenkinslint.check.ArtifactChecker;
import org.jenkins.ci.plugins.jenkinslint.check.CleanupWorkspaceChecker;
import org.jenkins.ci.plugins.jenkinslint.check.GitShallowChecker;
import org.jenkins.ci.plugins.jenkinslint.check.GradleWrapperChecker;
import org.jenkins.ci.plugins.jenkinslint.check.HardcodedScriptChecker;
import org.jenkins.ci.plugins.jenkinslint.check.JavadocChecker;
import org.jenkins.ci.plugins.jenkinslint.check.JobAssignedLabelChecker;
Expand Down Expand Up @@ -54,6 +55,8 @@ public void getData() throws IOException {
checkList.add(new GitShallowChecker());
checkList.add(new MultibranchJobTypeChecker());
checkList.add(new HardcodedScriptChecker());
checkList.add(new GradleWrapperChecker());


for (AbstractProject item : Jenkins.getInstance().getAllItems(AbstractProject.class)) {
LOG.log(Level.FINER, "queryChecks " + item.getDisplayName());
Expand Down
@@ -0,0 +1,63 @@
package org.jenkins.ci.plugins.jenkinslint.check;

import hudson.matrix.MatrixProject;
import hudson.model.Item;
import hudson.model.Project;
import hudson.tasks.Builder;
import org.jenkins.ci.plugins.jenkinslint.model.AbstractCheck;

import java.util.List;
import java.util.logging.Level;

/**
* @author Victor Martinez
*/
public class GradleWrapperChecker extends AbstractCheck {

public GradleWrapperChecker() {
super();
this.setDescription("By distributing the wrapper with your project, anyone can work with it without needing to " +
"install Gradle beforehand.<br/> Even better, users of the build are guaranteed to use the " +
"version of Gradle that the build was designed to work with.<br/>" +
"<a href=https://docs.gradle.org/current/userguide/gradle_wrapper.html>The Gradle Wrapper</a>");
this.setSeverity("Medium");
}

public boolean executeCheck(Item item) {
boolean found = false;
//if (Jenkins.getInstance().pluginManager.getPlugin("gradle") != null) {
if (item.getClass().getName().endsWith("hudson.maven.MavenModuleSet")) {
found = false;
} else {
if (item instanceof Project) {
found = isGradlew(((Project) item).getBuilders());
}
if (item instanceof MatrixProject) {
found = isGradlew(((MatrixProject) item).getBuilders());
}
}
//}
return found;
}

private boolean isGradlew (List<Builder> builders) {
boolean status = false;
if (builders != null && builders.size() > 0 ) {
for (Builder builder : builders) {
if (builder.getClass().getName().endsWith("Gradle")) {
try {
Object isUseWrapper = builder.getClass().getMethod("isUseWrapper", null).invoke(builder);
if (isUseWrapper instanceof Boolean) {
status = ! ((Boolean) isUseWrapper).booleanValue();
LOG.log(Level.FINE, "isGradlew " + !status);
}
} catch (Exception e) {
LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
status = false;
}
}
}
}
return status;
}
}
@@ -0,0 +1,85 @@
package org.jenkins.ci.plugins.jenkinslint.check;

import hudson.matrix.MatrixProject;
import hudson.maven.MavenModuleSet;
import hudson.model.FreeStyleProject;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
* GradleWrapperChecker Test Case.
*
* @author Victor Martinez
*/
public class GradleWrapperCheckerTestCase {
private GradleWrapperChecker checker = new GradleWrapperChecker();

@Rule public JenkinsRule j = new JenkinsRule();
@Test public void testDefaultJob() throws Exception {
FreeStyleProject project = j.createFreeStyleProject();
assertFalse(checker.executeCheck(project));
}
@Test public void testEmptyJobName() throws Exception {
FreeStyleProject project = j.createFreeStyleProject("");
assertFalse(checker.executeCheck(project));
}
@Test public void testMavenJobName() throws Exception {
MavenModuleSet project = j.createMavenProject();
assertFalse(checker.executeCheck(project));
}
//@Issue("JENKINS-29444")
@Test public void testMatrixProject() throws Exception {
MatrixProject project = j.createMatrixProject();
assertFalse(checker.executeCheck(project));
}
@Test public void testMatrixProjectWithGradlew() throws Exception {
MatrixProject project = j.createMatrixProject("WithoutGradle");
project.getBuildersList().add(new hudson.tasks.Shell("#!/bin/bash #single line"));
assertFalse(checker.executeCheck(project));
project.delete();
project = j.createMatrixProject("WithoutWrapper");
project.getBuildersList().add(new hudson.tasks.Shell("#!/bin/bash\nline1\nline2\nline3\nline4\nline5\nline6"));
project.getBuildersList().add(new hudson.plugins.gradle.Gradle("description","switches","tasks","rootBuildScriptDir","buildFile","gradleName", false, false, false, false));
assertTrue(checker.executeCheck(project));
project.delete();
project = j.createMatrixProject("WithWrapper");
project.getBuildersList().add(new hudson.plugins.gradle.Gradle("description","switches","tasks","rootBuildScriptDir","buildFile","gradleName", true, false, false, false));
assertFalse(checker.executeCheck(project));
}
@Test public void testJobWithGradlew() throws Exception {
FreeStyleProject project = j.createFreeStyleProject("WithoutGradle");
project.getBuildersList().add(new hudson.tasks.Shell("#!/bin/bash #single line"));
assertFalse(checker.executeCheck(project));
project.delete();
project = j.createFreeStyleProject("WithoutWrapper");
project.getBuildersList().add(new hudson.tasks.Shell("#!/bin/bash\nline1\nline2\nline3\nline4\nline5\nline6"));
project.getBuildersList().add(new hudson.plugins.gradle.Gradle("description","switches","tasks","rootBuildScriptDir","buildFile","gradleName", false, false, false, false));
project.save();
assertTrue(checker.executeCheck(project));
project.delete();
project = j.createFreeStyleProject("WithWrapper");
project.getBuildersList().add(new hudson.plugins.gradle.Gradle("description","switches","tasks","rootBuildScriptDir","buildFile","gradleName", true, false, false, false));
assertFalse(checker.executeCheck(project));
}
@Test public void testControlComment() throws Exception {
FreeStyleProject project = j.createFreeStyleProject();
assertFalse(checker.isIgnored(project.getDescription()));
project.setDescription("#lint:ignore:" + checker.getClass().getSimpleName());
assertTrue(checker.isIgnored(project.getDescription()));
}
//@Issue("JENKINS-29427")
@Test public void testAnotherBuilders() throws Exception {
FreeStyleProject project = j.createFreeStyleProject("MsBuildBuilder");
project.getBuildersList().add(new hudson.plugins.msbuild.MsBuildBuilder("", "", "", true, true, true));
assertFalse(checker.executeCheck(project));
project.delete();
project = j.createFreeStyleProject("Ant");
project.getBuildersList().add(new hudson.tasks.Ant("","","","",""));
assertFalse(checker.executeCheck(project));
project.delete();
}
}

0 comments on commit 06f1b49

Please sign in to comment.