Skip to content

Commit

Permalink
[JENKINS-35234] Resolved issue - Support the new workflow/pipeline model
Browse files Browse the repository at this point in the history
pom.xml
Added dependencies to workflow modules
Sloccount plugin now requires Jenkins 2.63

Refactored for new workflow (AbstractBuild and AbstractProject replaced
with Run<> and Job<>)
SloccountAreaRenderer.java
SloccountBuildAction.java
SloccountProjectAction.java
SloccountPublisher.java
SloccountResult.java

Solved NPE:
SloccountResult.java

Ignored FindBug errors:
SloccountAreaRenderer.java

Solved javadoc complains:
SloccountTablePortlet.java
SloccountLanguageStatistics.java
SloccountParser.java
ClocFile.java
ClocFiles.java
ClocHeader.java
ClocReport.java
ClocTotal.java

Updated API for new Jenkins:
FileFinder.java

Added escape-by-default in all jelly files:
index.jelly
SloccountTablePortlet/portlet.jelly
SloccountTablePortlet/table.jelly
SloccountBuildAction/statistics.jelly
SloccountBuildAction/summary.jelly
SloccountProjectAction/floatingBox.jelly
SloccountProjectAction/jobMain.jelly
SloccountPublisher/config.jelly
SloccountResult/files.jelly
SloccountResult/folders.jelly
SloccountResult/index.jelly
SloccountResult/languages.jelly
SloccountResult/modules.jelly
tabview/css.jelly
tabview/distribution-graph.jelly
tabview/main.jelly

Added SloccountPublisher step supporting workflow (with jelly file and
tests)
steps/SloccountPublisherStep.java
SloccountPublisherStep/config.jelly
test/SloccountPublisherStepTest.java
  • Loading branch information
piomis committed Jun 17, 2017
1 parent 29c846b commit 784fc49
Show file tree
Hide file tree
Showing 34 changed files with 471 additions and 63 deletions.
40 changes: 39 additions & 1 deletion pom.xml
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.447</version>
<version>2.7</version>
</parent>

<groupId>hudson.plugins.sloccount</groupId>
Expand Down Expand Up @@ -54,12 +54,50 @@
</properties>

<dependencies>
<dependency>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>jenkins-core</artifactId>
<version>2.63</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>dashboard-view</artifactId>
<version>2.0</version>
<optional>true</optional>
</dependency>
<!-- dependencies on Jenkins Pipeline plugins -->
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-job</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-cps</artifactId>
<version>2.34</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-support</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-durable-task-step</artifactId>
<version>2.11</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-step-api</artifactId>
<version>2.11</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-basic-steps</artifactId>
<version>2.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<repositories>
Expand Down
@@ -1,5 +1,6 @@
package hudson.plugins.sloccount;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.util.StackedAreaRenderer2;
import hudson.util.ChartUtil.NumberOnlyBuildLabel;

Expand All @@ -10,6 +11,7 @@
* links. This renderer does not render tooltips, these need to be defined in
* sub-classes.
*/
@SuppressFBWarnings(value="EQ_DOESNT_OVERRIDE_EQUALS", justification="Equals method is not needed.")
public class SloccountAreaRenderer extends StackedAreaRenderer2 {
/** Unique identifier of this class. */
private static final long serialVersionUID = 1440842055316682192L;
Expand All @@ -30,7 +32,7 @@ public SloccountAreaRenderer(final String url) {
/** {@inheritDoc} */
@Override
public final String generateURL(final CategoryDataset dataset, final int row, final int column) {
return getLabel(dataset, column).build.getNumber() + url;
return getLabel(dataset, column).getRun().getNumber() + url;
}

/**
Expand Down
56 changes: 46 additions & 10 deletions src/main/java/hudson/plugins/sloccount/SloccountBuildAction.java
@@ -1,29 +1,37 @@
package hudson.plugins.sloccount;

import hudson.model.AbstractBuild;
import hudson.model.Run;
import hudson.model.Action;
import jenkins.model.RunAction2;
import hudson.plugins.sloccount.model.SloccountReportStatistics;
import jenkins.tasks.SimpleBuildStep;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.kohsuke.stapler.StaplerProxy;

/**
*
* @author lordofthepigs
*/
public class SloccountBuildAction implements Action, Serializable, StaplerProxy {
public class SloccountBuildAction implements RunAction2, StaplerProxy, SimpleBuildStep.LastBuildAction {
/** Serial version UID. */
private static final long serialVersionUID = 0L;

public static final String URL_NAME = "sloccountResult";

private AbstractBuild<?,?> build;
private SloccountResult result;
private transient Run<?,?> build;
private final SloccountResult result;
private final int numBuildsInGraph;

private transient List<SloccountProjectAction> projectActions;

public SloccountBuildAction(AbstractBuild<?,?> build, SloccountResult result){
this.build = build;
public SloccountBuildAction(SloccountResult result, int numBuildsInGraph){
this.result = result;
this.numBuildsInGraph = numBuildsInGraph;

this.projectActions = new ArrayList<>();
}

public String getIconFileName() {
Expand All @@ -37,6 +45,12 @@ public String getDisplayName() {
public String getUrlName() {
return URL_NAME;
}

@Override
public Collection<? extends Action> getProjectActions() {
return this.projectActions;
}


/**
* Get differences between two report statistics.
Expand Down Expand Up @@ -81,7 +95,7 @@ SloccountBuildAction getPreviousAction(){
return null;
}

AbstractBuild<?,?> previousBuild = this.build.getPreviousBuild();
Run<?,?> previousBuild = this.build.getPreviousBuild();

while(previousBuild != null){
SloccountBuildAction action = previousBuild
Expand All @@ -101,11 +115,33 @@ SloccountBuildAction getPreviousAction(){
return null;
}

public AbstractBuild<?,?> getBuild(){
public Run<?,?> getBuild(){
return this.build;
}

public Object getTarget() {
return this.result;
}

@Override
public void onLoad(Run<?,?> r)
{
this.build = r;
if( this.projectActions == null )
{
this.projectActions = new ArrayList<>();
}
this.projectActions.add(new SloccountProjectAction(this.build.getParent(), this.numBuildsInGraph));
}

@Override
public void onAttached(Run<?,?> r)
{
this.build = r;
if( this.projectActions == null )
{
this.projectActions = new ArrayList<>();
}
this.projectActions.add(new SloccountProjectAction(this.build.getParent(), this.numBuildsInGraph));
}
}
35 changes: 14 additions & 21 deletions src/main/java/hudson/plugins/sloccount/SloccountProjectAction.java
@@ -1,36 +1,33 @@
package hudson.plugins.sloccount;

import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Run;
import hudson.model.Job;
import hudson.model.Action;
import hudson.util.ChartUtil;
import java.io.IOException;
import java.io.Serializable;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

/**
*
* @author lordofthepigs
*/
public class SloccountProjectAction implements Action, Serializable {
/** Serial version UID. */
private static final long serialVersionUID = 0L;
public class SloccountProjectAction implements Action {

public static final String URL_NAME = "sloccountResult";

public static final int CHART_WIDTH = 500;
public static final int CHART_HEIGHT = 200;

public AbstractProject<?,?> project;
public transient Job<?,?> project;

/**
* Maximal number of last successful builds displayed in the trend graphs.
* One or less means unlimited.
*/
private final int numBuildsInGraph;

public SloccountProjectAction(final AbstractProject<?, ?> project,
public SloccountProjectAction(final Job<?, ?> project,
int numBuildsInGraph) {
this.project = project;
this.numBuildsInGraph = numBuildsInGraph;
Expand Down Expand Up @@ -60,7 +57,7 @@ public String getUrlName() {
* in case of an error
*/
public void doIndex(final StaplerRequest request, final StaplerResponse response) throws IOException {
AbstractBuild<?, ?> build = getLastFinishedBuild();
Run<?, ?> build = getLastFinishedBuild();
if (build != null) {
response.sendRedirect2(String.format("../%d/%s", build.getNumber(), SloccountBuildAction.URL_NAME));
}else{
Expand All @@ -75,8 +72,8 @@ public void doIndex(final StaplerRequest request, final StaplerResponse response
* @return the last finished build or <code>null</code> if there is no
* such build
*/
public AbstractBuild<?, ?> getLastFinishedBuild() {
AbstractBuild<?, ?> lastBuild = project.getLastBuild();
public Run<?, ?> getLastFinishedBuild() {
Run<?, ?> lastBuild = project.getLastBuild();
while (lastBuild != null && (lastBuild.isBuilding() || lastBuild.getAction(SloccountBuildAction.class) == null)) {
lastBuild = lastBuild.getPreviousBuild();
}
Expand All @@ -89,12 +86,12 @@ public void doIndex(final StaplerRequest request, final StaplerResponse response
* @return the build action or null
*/
public SloccountBuildAction getLastFinishedBuildAction() {
AbstractBuild<?, ?> lastBuild = getLastFinishedBuild();
Run<?, ?> lastBuild = getLastFinishedBuild();
return (lastBuild != null) ? lastBuild.getAction(SloccountBuildAction.class) : null;
}

public final boolean hasValidResults() {
AbstractBuild<?, ?> build = getLastFinishedBuild();
Run<?, ?> build = getLastFinishedBuild();

if (build != null) {
SloccountBuildAction resultAction = build.getAction(SloccountBuildAction.class);
Expand Down Expand Up @@ -130,8 +127,7 @@ public final boolean hasValidResults() {
* in case of an error
*/
public void doTrendMap(final StaplerRequest request, final StaplerResponse response) throws IOException {
AbstractBuild<?,?> lastBuild = this.getLastFinishedBuild();
SloccountBuildAction lastAction = lastBuild.getAction(SloccountBuildAction.class);
SloccountBuildAction lastAction = getLastFinishedBuildAction();

ChartUtil.generateClickableMap(
request,
Expand All @@ -152,8 +148,7 @@ public void doTrendMap(final StaplerRequest request, final StaplerResponse respo
* in case of an error
*/
public void doTrend(final StaplerRequest request, final StaplerResponse response) throws IOException {
AbstractBuild<?,?> lastBuild = this.getLastFinishedBuild();
SloccountBuildAction lastAction = lastBuild.getAction(SloccountBuildAction.class);
SloccountBuildAction lastAction = getLastFinishedBuildAction();

ChartUtil.generateGraph(
request,
Expand All @@ -174,8 +169,7 @@ public void doTrend(final StaplerRequest request, final StaplerResponse response
* in case of an error
*/
public void doTrendDeltaMap(final StaplerRequest request, final StaplerResponse response) throws IOException {
AbstractBuild<?,?> lastBuild = this.getLastFinishedBuild();
SloccountBuildAction lastAction = lastBuild.getAction(SloccountBuildAction.class);
SloccountBuildAction lastAction = getLastFinishedBuildAction();

ChartUtil.generateClickableMap(
request,
Expand All @@ -196,8 +190,7 @@ public void doTrendDeltaMap(final StaplerRequest request, final StaplerResponse
* in case of an error
*/
public void doTrendDelta(final StaplerRequest request, final StaplerResponse response) throws IOException {
AbstractBuild<?,?> lastBuild = this.getLastFinishedBuild();
SloccountBuildAction lastAction = lastBuild.getAction(SloccountBuildAction.class);
SloccountBuildAction lastAction = getLastFinishedBuildAction();

ChartUtil.generateGraph(
request,
Expand Down

0 comments on commit 784fc49

Please sign in to comment.