Skip to content

Commit

Permalink
JENKINS-20756 Fixed support for folders plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
patbos committed Nov 25, 2013
1 parent 162ecef commit 2669c2c
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 46 deletions.
9 changes: 2 additions & 7 deletions pom.xml
Expand Up @@ -137,11 +137,6 @@
</build>

<dependencies>
<!-- dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency -->

<!-- Test Dependencies -->
<dependency>
Expand Down Expand Up @@ -179,7 +174,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>token-macro</artifactId>
<version>1.8.1</version>
<version>1.9</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand All @@ -189,7 +184,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>parameterized-trigger</artifactId>
<version>2.17</version>
<version>2.21</version>
</dependency>

</dependencies>
Expand Down
Expand Up @@ -192,12 +192,12 @@ public List<Component> getPipelines() {
LOG.fine("Getting pipelines!");
List<Component> components = new ArrayList<Component>();
for (ComponentSpec componentSpec : componentSpecs) {
AbstractProject firstJob = ProjectUtil.getProject(componentSpec.getFirstJob());
AbstractProject firstJob = ProjectUtil.getProject(componentSpec.getFirstJob(), getOwnerItemGroup());
Pipeline prototype = PipelineFactory.extractPipeline(componentSpec.getName(), firstJob);
List<Pipeline> pipelines = new ArrayList<Pipeline>();
if (showAggregatedPipeline)
pipelines.add(PipelineFactory.createPipelineAggregated(prototype));
pipelines.addAll(PipelineFactory.createPipelineLatest(prototype, noOfPipelines));
pipelines.add(PipelineFactory.createPipelineAggregated(prototype, getOwnerItemGroup()));
pipelines.addAll(PipelineFactory.createPipelineLatest(prototype, noOfPipelines, getOwnerItemGroup()));
components.add(new Component(componentSpec.getName(), pipelines));
}
if (getSorting() != null && !getSorting().equals(NONE_SORTER)) {
Expand All @@ -215,7 +215,7 @@ public Collection<TopLevelItem> getItems() {
List<TopLevelItem> result = new ArrayList<TopLevelItem>();
for (ComponentSpec componentSpec : componentSpecs) {

AbstractProject project = ProjectUtil.getProject(componentSpec.getFirstJob());
AbstractProject project = ProjectUtil.getProject(componentSpec.getFirstJob(), getOwnerItemGroup());
Collection<AbstractProject<?, ?>> projects = ProjectUtil.getAllDownstreamProjects(project).values();
for (AbstractProject<?, ?> abstractProject : projects) {
result.add(getItem(abstractProject.getName()));
Expand Down
34 changes: 17 additions & 17 deletions src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java
Expand Up @@ -79,31 +79,31 @@ private static Task getPrototypeTask(AbstractProject project) {
/**
* Helper method
*
* @see PipelineFactory#createPipelineLatest(se.diabol.jenkins.pipeline.model.Pipeline, int)
* @see PipelineFactory#createPipelineLatest(se.diabol.jenkins.pipeline.model.Pipeline, int, ItemGroup)
*/

public static Pipeline createPipelineLatest(Pipeline pipeline) {
List<Pipeline> pipelines = createPipelineLatest(pipeline, 1);
public static Pipeline createPipelineLatest(Pipeline pipeline, ItemGroup context) {
List<Pipeline> pipelines = createPipelineLatest(pipeline, 1, context);
return pipelines.size() > 0 ? pipelines.get(0) : null;
}

public static Pipeline createPipelineAggregated(Pipeline pipeline) {
public static Pipeline createPipelineAggregated(Pipeline pipeline, ItemGroup context) {

AbstractProject firstProject = getProject(pipeline.getStages().get(0).getTasks().get(0));
AbstractProject firstProject = getProject(pipeline.getStages().get(0).getTasks().get(0), context);
List<Stage> stages = new ArrayList<Stage>();
for (Stage stage : pipeline.getStages()) {

List<Task> tasks = new ArrayList<Task>();

//The version build for this stage is the highest first task build
AbstractBuild versionBuild = getHighestBuild(stage.getTasks(), firstProject);
AbstractBuild versionBuild = getHighestBuild(stage.getTasks(), firstProject, context);

String version = null;
if (versionBuild != null) {
version = versionBuild.getDisplayName();
}
for (Task task : stage.getTasks()) {
AbstractProject<?, ?> taskProject = getProject(task);
AbstractProject<?, ?> taskProject = getProject(task, context);
AbstractBuild currentBuild = match(taskProject.getBuilds(), versionBuild);

if (currentBuild != null) {
Expand All @@ -120,10 +120,10 @@ public static Pipeline createPipelineAggregated(Pipeline pipeline) {
return new Pipeline(pipeline.getName(), null, null, null, null, stages, true);
}

private static AbstractBuild getHighestBuild(List<Task> tasks, AbstractProject firstProject) {
private static AbstractBuild getHighestBuild(List<Task> tasks, AbstractProject firstProject, ItemGroup context) {
int highest = -1;
for (Task task : tasks) {
AbstractProject project = getProject(task);
AbstractProject project = getProject(task, context);
AbstractBuild firstBuild = getFirstUpstreamBuild(project, firstProject);
if (firstBuild != null && firstBuild.getNumber() > highest) {
highest = firstBuild.getNumber();
Expand All @@ -144,9 +144,9 @@ private static AbstractBuild getHighestBuild(List<Task> tasks, AbstractProject f
* @param pipeline the pipeline prototype
* @param noOfPipelines number of pipeline instances
*/
public static List<Pipeline> createPipelineLatest(Pipeline pipeline, int noOfPipelines) {
public static List<Pipeline> createPipelineLatest(Pipeline pipeline, int noOfPipelines, ItemGroup context) {
Task firstTask = pipeline.getStages().get(0).getTasks().get(0);
AbstractProject firstProject = getProject(firstTask);
AbstractProject firstProject = getProject(firstTask, context);

List<Pipeline> result = new ArrayList<Pipeline>();

Expand All @@ -159,9 +159,9 @@ public static List<Pipeline> createPipelineLatest(Pipeline pipeline, int noOfPip
for (Stage stage : pipeline.getStages()) {
List<Task> tasks = new ArrayList<Task>();
for (Task task : stage.getTasks()) {
AbstractProject<?, ?> taskProject = getProject(task);
AbstractProject<?, ?> taskProject = getProject(task, context);
AbstractBuild currentBuild = match(taskProject.getBuilds(), firstBuild);
tasks.add(getTask(task, currentBuild));
tasks.add(getTask(task, currentBuild, context));
}
stages.add(new Stage(stage.getName(), tasks));
}
Expand Down Expand Up @@ -194,8 +194,8 @@ protected static List<Change> getChanges(AbstractBuild<?, ?> build) {
}


private static Task getTask(Task task, AbstractBuild build) {
AbstractProject project = getProject(task);
private static Task getTask(Task task, AbstractBuild build, ItemGroup context) {
AbstractProject project = getProject(task, context);
Status status = resolveStatus(project, build);
String link = build == null || status.isIdle() || status.isQueued() ? task.getLink() : build.getUrl();
String buildId = build == null || status.isIdle() || status.isQueued() ? null : String.valueOf(build.getNumber());
Expand Down Expand Up @@ -259,8 +259,8 @@ private static AbstractBuild match(RunList<? extends AbstractBuild> runList, Abs
return null;
}

private static AbstractProject getProject(Task task) {
return Jenkins.getInstance().getItem(task.getId(), Jenkins.getInstance().getItemGroup(), AbstractProject.class);
private static AbstractProject getProject(Task task, ItemGroup context) {
return ProjectUtil.getProject(task.getId(), context);
}

protected static Status resolveStatus(AbstractProject project, AbstractBuild build) {
Expand Down
Expand Up @@ -81,8 +81,8 @@ protected static List<AbstractProject> getSubProjects(AbstractProject project) {
return result;
}

public static AbstractProject<?, ?> getProject(String name) {
return Jenkins.getInstance().getItem(name, Jenkins.getInstance(), AbstractProject.class);
public static AbstractProject<?, ?> getProject(String name, ItemGroup context) {
return Jenkins.getInstance().getItem(name, context, AbstractProject.class);
}


Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.MockFolder;
import org.jvnet.hudson.test.WithoutJenkins;
import se.diabol.jenkins.pipeline.model.Component;
import se.diabol.jenkins.pipeline.model.Pipeline;
Expand Down Expand Up @@ -123,6 +124,37 @@ public void testGetItemsAndContains() throws Exception {

}

@Test
public void testGetItemsAndContainsWithFolders() throws Exception {
MockFolder folder = jenkins.createFolder("folder");
FreeStyleProject build = folder.createProject(FreeStyleProject.class, "build");
FreeStyleProject sonar = folder.createProject(FreeStyleProject.class, "sonar");
FreeStyleProject packaging = folder.createProject(FreeStyleProject.class,"packaging");


//FreeStyleProject build = jenkins.createFreeStyleProject("build");
//FreeStyleProject sonar = jenkins.createFreeStyleProject("sonar");
build.getPublishersList().add(new BuildTrigger("sonar", false));
build.getPublishersList().add(new BuildTrigger("packaging", false));

jenkins.getInstance().rebuildDependencyGraph();


List<DeliveryPipelineView.ComponentSpec> specs = new ArrayList<DeliveryPipelineView.ComponentSpec>();
specs.add(new DeliveryPipelineView.ComponentSpec("Comp", "build"));
DeliveryPipelineView view = new DeliveryPipelineView("name", specs);
folder.addView(view);

assertTrue(view.contains(build));
assertTrue(view.contains(sonar));
assertTrue(view.contains(packaging));

Collection<TopLevelItem> items = view.getItems();
assertEquals(3, items.size());

}


@Test
public void testGetPipelines() throws Exception {
FreeStyleProject build = jenkins.createFreeStyleProject("build");
Expand Down
28 changes: 14 additions & 14 deletions src/test/java/se/diabol/jenkins/pipeline/PipelineFactoryTest.java
Expand Up @@ -150,8 +150,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception {
final Pipeline pipe1 = PipelineFactory.extractPipeline("pipe1", build1);
final Pipeline pipe2 = PipelineFactory.extractPipeline("pipe2", build2);

Pipeline aggregated1 = PipelineFactory.createPipelineAggregated(pipe1);
Pipeline aggregated2 = PipelineFactory.createPipelineAggregated(pipe2);
Pipeline aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance());
Pipeline aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance());

assertNull(aggregated1.getStages().get(0).getVersion());
assertNull(aggregated2.getStages().get(0).getVersion());
Expand All @@ -171,8 +171,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception {
assertEquals(2, pipe2.getStages().size());
assertNotNull(sonar.getBuild("1"));

aggregated1 = PipelineFactory.createPipelineAggregated(pipe1);
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2);
aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance());
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance());

assertEquals("#1", aggregated1.getStages().get(1).getVersion());
assertEquals("job/sonar1/1/", aggregated1.getStages().get(1).getTasks().get(0).getLink());
Expand All @@ -190,8 +190,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception {
jenkins.buildAndAssertSuccess(build2);
jenkins.waitUntilNoActivity();

aggregated1 = PipelineFactory.createPipelineAggregated(pipe1);
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2);
aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance());
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance());

assertEquals("#1", aggregated1.getStages().get(1).getVersion());
assertEquals("#1", aggregated2.getStages().get(1).getVersion());
Expand All @@ -203,8 +203,8 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception {
jenkins.buildAndAssertSuccess(build1);
jenkins.waitUntilNoActivity();

aggregated1 = PipelineFactory.createPipelineAggregated(pipe1);
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2);
aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance());
aggregated2 = PipelineFactory.createPipelineAggregated(pipe2, jenkins.getInstance());


assertEquals("#2", aggregated1.getStages().get(1).getVersion());
Expand All @@ -229,7 +229,7 @@ public void testCreatePipelineAggregatedSharedTask() throws Exception {
BuildPipelineView view = new BuildPipelineView("", "", new DownstreamProjectGridBuilder("build1"), "1", false, null);
view.triggerManualBuild(1, "prod", "test");
jenkins.waitUntilNoActivity();
aggregated1 = PipelineFactory.createPipelineAggregated(pipe1);
aggregated1 = PipelineFactory.createPipelineAggregated(pipe1, jenkins.getInstance());
assertTrue(aggregated1.getStages().get(3).getTasks().get(0).getStatus().isSuccess());
assertEquals("#1", aggregated1.getStages().get(3).getVersion());

Expand Down Expand Up @@ -261,7 +261,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception {
assertNull(ci2.getLastBuild());

Pipeline pipeline = PipelineFactory.extractPipeline("test", build);
Pipeline aggregated = PipelineFactory.createPipelineAggregated(pipeline);
Pipeline aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance());
assertNotNull(aggregated);
assertEquals("ci1", aggregated.getStages().get(1).getTasks().get(0).getName());
assertEquals("ci2", aggregated.getStages().get(1).getTasks().get(1).getName());
Expand All @@ -272,7 +272,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception {
jenkins.buildAndAssertSuccess(build);
jenkins.waitUntilNoActivity();

aggregated = PipelineFactory.createPipelineAggregated(pipeline);
aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance());
assertNotNull(aggregated);
assertEquals("#2", build.getLastBuild().getDisplayName());
assertEquals("SUCCESS", aggregated.getStages().get(1).getTasks().get(0).getStatus().toString());
Expand All @@ -281,7 +281,7 @@ public void testAggregatedStageWithTwoManualTasks() throws Exception {

view.triggerManualBuild(2, "ci2", "build");
jenkins.waitUntilNoActivity();
aggregated = PipelineFactory.createPipelineAggregated(pipeline);
aggregated = PipelineFactory.createPipelineAggregated(pipeline, jenkins.getInstance());
assertNotNull(aggregated);
assertEquals("IDLE", aggregated.getStages().get(1).getTasks().get(0).getStatus().toString());
assertEquals("SUCCESS", aggregated.getStages().get(1).getTasks().get(1).getStatus().toString());
Expand Down Expand Up @@ -318,7 +318,7 @@ public void testCreatePipelineLatest() throws Exception {
jenkins.buildAndAssertSuccess(build);
jenkins.waitUntilNoActivity();

Pipeline latest = PipelineFactory.createPipelineLatest(pipeline);
Pipeline latest = PipelineFactory.createPipelineLatest(pipeline, jenkins.getInstance());

assertNotNull(latest);

Expand All @@ -339,7 +339,7 @@ public void testPipelineLatestDownstreamIsDisabled() throws Exception {
jenkins.buildAndAssertSuccess(build);
jenkins.waitUntilNoActivity();
Pipeline pipeline = PipelineFactory.extractPipeline("Pipeline", build);
Pipeline latest = PipelineFactory.createPipelineLatest(pipeline);
Pipeline latest = PipelineFactory.createPipelineLatest(pipeline, jenkins.getInstance());
assertNotNull(latest);
assertEquals(2, latest.getStages().size());
assertEquals("SUCCESS", latest.getStages().get(0).getTasks().get(0).getStatus().toString());
Expand Down
Expand Up @@ -22,6 +22,8 @@
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.MockFolder;
import org.mortbay.jetty.security.UserRealm;
import se.diabol.jenkins.pipeline.PipelineProperty;

import java.util.Set;
Expand All @@ -36,8 +38,9 @@ public class ProjectUtilTest {

@Test
public void testGetStageNames() throws Exception {
FreeStyleProject build1 = jenkins.createFreeStyleProject("build1");
FreeStyleProject build2 = jenkins.createFreeStyleProject("build2");
MockFolder folder = jenkins.createFolder("folder");
FreeStyleProject build1 = folder.createProject(FreeStyleProject.class, "build1");
FreeStyleProject build2 = folder.createProject(FreeStyleProject.class, "build2");

Set<String> stageNames = ProjectUtil.getStageNames();
assertNotNull(stageNames);
Expand Down

0 comments on commit 2669c2c

Please sign in to comment.