Skip to content

Commit

Permalink
JENKINS-36536: Trend graph on pipeline project page
Browse files Browse the repository at this point in the history
  • Loading branch information
mheinzerling committed Jan 5, 2017
1 parent 6016b2e commit 22ea8a4
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 19 deletions.
28 changes: 23 additions & 5 deletions src/main/java/hudson/plugins/jacoco/JacocoBuildAction.java
Expand Up @@ -5,19 +5,22 @@
import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import hudson.model.Action;
import hudson.model.Run;
import hudson.model.TaskListener;
import jenkins.model.RunAction2;
import jenkins.tasks.SimpleBuildStep.LastBuildAction;
import org.jacoco.core.analysis.IBundleCoverage;
import org.jvnet.localizer.Localizable;
import org.kohsuke.stapler.StaplerProxy;

import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.HealthReport;
import hudson.model.HealthReportingAction;
import hudson.model.Result;
Expand All @@ -36,9 +39,9 @@
* @author Jonathan Fuerth
* @author Ognjen Bubalo
*/
public final class JacocoBuildAction extends CoverageObject<JacocoBuildAction> implements HealthReportingAction, StaplerProxy, Serializable, RunAction2 {
public final class JacocoBuildAction extends CoverageObject<JacocoBuildAction> implements HealthReportingAction, StaplerProxy, Serializable, RunAction2, LastBuildAction {

public transient Run<?,?> owner;
private transient Run<?,?> owner;

@Deprecated public transient AbstractBuild<?,?> build;

Expand All @@ -53,6 +56,7 @@ public final class JacocoBuildAction extends CoverageObject<JacocoBuildAction> i
* TODO: add ability to trend thresholds on the graph
*/
private final JacocoHealthReportThresholds thresholds;
private transient List<JacocoProjectAction> jacocoProjectActions=Collections.emptyList();

/**
*
Expand Down Expand Up @@ -355,13 +359,27 @@ public final PrintStream getLogger() {
return System.out;
}

public Run<?, ?> getOwner() {
return owner;
}

private void setOwner(Run<?, ?> owner) {
jacocoProjectActions = Collections.singletonList(new JacocoProjectAction(owner.getParent()));
this.owner = owner;
}

@Override
public void onAttached(Run<?, ?> run) {
this.owner = run;
setOwner(run);
}

@Override
public void onLoad(Run<?, ?> run) {
this.owner = run;
setOwner(run);
}

@Override
public Collection<? extends Action> getProjectActions() {
return jacocoProjectActions;
}
}
8 changes: 5 additions & 3 deletions src/main/java/hudson/plugins/jacoco/JacocoProjectAction.java
@@ -1,9 +1,11 @@
package hudson.plugins.jacoco;

import hudson.model.Action;
import hudson.model.Job;
import hudson.model.Result;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Run;

import java.io.IOException;

Expand All @@ -16,9 +18,9 @@
* @author Kohsuke Kawaguchi
*/
public final class JacocoProjectAction implements Action {
public final AbstractProject<?,?> project;
public final Job<?,?> project;

public JacocoProjectAction(AbstractProject<?,?> project) {
public JacocoProjectAction(Job<?,?> project) {
this.project = project;
}

Expand All @@ -38,7 +40,7 @@ public String getUrlName() {
* Gets the most recent {@link JacocoBuildAction} object.
*/
public JacocoBuildAction getLastResult() {
for (AbstractBuild<?, ?> b = project.getLastBuild(); b != null; b = b.getPreviousBuild()) {
for (Run<?, ?> b = project.getLastBuild(); b != null; b = b.getPreviousBuild()) {
if (b.isBuilding() || b.getResult() == Result.FAILURE || b.getResult() == Result.ABORTED)
continue;
JacocoBuildAction r = b.getAction(JacocoBuildAction.class);
Expand Down
6 changes: 0 additions & 6 deletions src/main/java/hudson/plugins/jacoco/JacocoPublisher.java
Expand Up @@ -533,11 +533,6 @@ public static Result checkResult(JacocoBuildAction action) {
return Result.SUCCESS;
}

@Override
public Action getProjectAction(AbstractProject<?, ?> project) {
return new JacocoProjectAction(project);
}

public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.NONE;
}
Expand All @@ -547,7 +542,6 @@ public BuildStepDescriptor<Publisher> getDescriptor() {
return DESCRIPTOR;
}


@Extension
public static final BuildStepDescriptor<Publisher> DESCRIPTOR = new DescriptorImpl();

Expand Down
Expand Up @@ -220,7 +220,7 @@ public CoverageReport getPreviousResult() {

@Override
public Run<?,?> getBuild() {
return action.owner;
return action.getOwner();
}

/**
Expand Down
17 changes: 13 additions & 4 deletions src/test/java/hudson/plugins/jacoco/JacocoPublisherTest.java
Expand Up @@ -7,15 +7,23 @@
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import org.easymock.IAnswer;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;

import static org.easymock.EasyMock.*;
import org.easymock.IAnswer;
import org.junit.Before;
import org.junit.Test;

import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.getCurrentArguments;
import static org.easymock.EasyMock.mock;
import static org.easymock.EasyMock.niceMock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
Expand Down Expand Up @@ -89,6 +97,7 @@ public void testPerformWithDefaultSettings() throws IOException, InterruptedExce
final Run run = mock(Run.class);
expect(run.getResult()).andReturn(Result.SUCCESS).anyTimes();
expect(run.getEnvironment(taskListener)).andReturn(new EnvVars()).anyTimes();
expect(run.getParent()).andReturn(null).anyTimes();
Action action = anyObject();
run.addAction(action);
final AtomicReference<JacocoBuildAction> buildAction = new AtomicReference<JacocoBuildAction>();
Expand Down

0 comments on commit 22ea8a4

Please sign in to comment.