Index: src/main/java/join/JoinTrigger.java =================================================================== --- src/main/java/join/JoinTrigger.java (revision 28791) +++ src/main/java/join/JoinTrigger.java (working copy) @@ -107,16 +107,17 @@ private DescribableList> joinPublishers = new DescribableList>((Saveable)null); - private boolean evenIfDownstreamUnstable; + private transient boolean evenIfDownstreamUnstable; + private String resultsAtLeast; public JoinTrigger() { - this(new DescribableList>((Saveable)null), "", false); + this(new DescribableList>((Saveable)null), "", "SUCCESS"); } - public JoinTrigger(DescribableList> publishers,String string, boolean b) { + public JoinTrigger(DescribableList> publishers,String string, String resultsAtLeast) { this.joinProjects = string; - this.evenIfDownstreamUnstable = b; this.joinPublishers = publishers; + this.resultsAtLeast = resultsAtLeast; } public static class DescriptorImpl extends BuildStepDescriptor { @@ -158,7 +159,7 @@ LOGGER.finer("Parsed " + publishers.size() + " publishers"); return new JoinTrigger(publishers, formData.getString("joinProjectsValue"), - formData.has("evenIfDownstreamUnstable") && formData.getBoolean("evenIfDownstreamUnstable")); + formData.getString("resultsAtLeast")); } @Override @@ -334,8 +335,8 @@ return joinPublishers; } - public boolean getEvenIfDownstreamUnstable() { - return this.evenIfDownstreamUnstable; + public String getResultsAtLeast() { + return this.resultsAtLeast; } private Object readResolve() { Index: src/main/java/join/JoinAction.java =================================================================== --- src/main/java/join/JoinAction.java (revision 28791) +++ src/main/java/join/JoinAction.java (working copy) @@ -26,7 +26,8 @@ private List completedDownstreamProjects; private transient String joinProjects; private DescribableList> joinPublishers; - private boolean evenIfDownstreamUnstable; + private transient boolean evenIfDownstreamUnstable; + private String resultsAtLeast; private Result overallResult; public JoinAction(JoinTrigger joinTrigger, BuildTrigger buildTrigger, ArrayList otherDownstream) { @@ -41,7 +42,7 @@ } this.joinProjects = joinTrigger.getJoinProjectsValue(); this.joinPublishers = joinTrigger.getJoinPublishers(); - this.evenIfDownstreamUnstable = joinTrigger.getEvenIfDownstreamUnstable(); + this.resultsAtLeast = joinTrigger.getResultsAtLeast(); this.completedDownstreamProjects = new LinkedList(); this.overallResult = Result.SUCCESS; } @@ -73,10 +74,10 @@ public void checkPendingDownstream(AbstractBuild owner, TaskListener listener) { if(pendingDownstreamProjects.isEmpty()) { listener.getLogger().println("All downstream projects complete!"); - Result threshold = this.evenIfDownstreamUnstable ? Result.UNSTABLE : Result.SUCCESS; - if(this.overallResult.isWorseThan(threshold)) { - listener.getLogger().println("Minimum result threshold not met for join project"); - } else { + Result threshold = Result.fromString(this.resultsAtLeast); + boolean doJoinBuild = (this.resultsAtLeast.equals("any") + || this.overallResult.isBetterOrEqualTo(threshold)); + if(doJoinBuild) { for(Publisher pub : this.joinPublishers) { try { pub.perform(owner, null, (BuildListener)listener); @@ -92,6 +93,8 @@ listener.getLogger().println("Scheduling join project: " + project.getName()); project.scheduleBuild(new JoinCause(owner)); } + } else { + listener.getLogger().println("Minimum result threshold not met for join project"); } } else { listener.getLogger().println("Project " + owner.getProject().getName() + " still waiting for " + pendingDownstreamProjects.size() + " builds to complete"); Index: src/main/resources/join/JoinTrigger/config.jelly =================================================================== --- src/main/resources/join/JoinTrigger/config.jelly (revision 28791) +++ src/main/resources/join/JoinTrigger/config.jelly (working copy) @@ -1,8 +1,12 @@ - - - + + -When checked, the join projects will be started even if some downstream projects finish as 'unstable' +You can force join projects to start even if some downstream projects finish as 'UNSTABLE' or worse. Choose 'any status' to always run the join projects. \ No newline at end of file