Skip to content
This repository was archived by the owner on Feb 13, 2020. It is now read-only.

Commit

Permalink
Use previous COMPLETED build to decide whether notify or note, and re…
Browse files Browse the repository at this point in the history
…factor
  • Loading branch information
ikikko committed Jan 22, 2017
1 parent 88d2724 commit 6ab08e3
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public NotifyDelegate(String name, Long topicId, TaskListener listener, Run run)

public void notifyResult() throws IOException {
ResultSupport resultSupport = new ResultSupport();
if (resultSupport.successFromPreviousBuild(run)) {
if (resultSupport.isSuccessFromSuccess(run)) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,9 @@

public class ResultSupport {

public boolean successFromPreviousBuild(Run build) {
if (build.getPreviousBuild() == null) {
return (inProgressPipeline(build) || build.getResult().equals(Result.SUCCESS));
} else {
return (inProgressPipeline(build) || build.getResult().equals(Result.SUCCESS))
&& build.getPreviousBuild().getResult().equals(Result.SUCCESS);
}
}

public TypetalkMessage convertBuildToMessage(Run build) {
if (inProgressPipeline(build) || build.getResult().equals(Result.SUCCESS)) {
if (recoverSuccess(build)) {
if (isSuccessCurrentBuild(build)) {
if (isSuccessFromFailure(build)) {
return new TypetalkMessage(Emoji.SMILEY, "Build recovery");
} else {
return new TypetalkMessage(Emoji.SMILEY, "Build success");
Expand All @@ -36,17 +27,25 @@ public TypetalkMessage convertBuildToMessage(Run build) {
throw new IllegalArgumentException("Unknown build result.");
}

public boolean recoverSuccess(Run build) {
if (build.getPreviousBuild() == null) {
return false;
} else {
return (inProgressPipeline(build) || build.getResult().equals(Result.SUCCESS))
&& build.getPreviousBuild().getResult().isWorseThan(Result.SUCCESS);
}
public boolean isSuccessFromSuccess(Run build) {
return isSuccessCurrentBuild(build) && isSuccessPreviousBuild(build) ;
}

private boolean isSuccessFromFailure(Run build) {
return isSuccessCurrentBuild(build) && !isSuccessPreviousBuild(build);
}

private boolean isSuccessCurrentBuild(Run build) {
return build instanceof WorkflowRun ? build.getResult() == null : build.getResult().equals(Result.SUCCESS);
}

private boolean inProgressPipeline(Run build) {
return build instanceof WorkflowRun && build.getResult() == null;
private boolean isSuccessPreviousBuild(Run build) {
if (build.getPreviousCompletedBuild() == null) {
// as success when this build is 1st build
return true;
}

return build.getPreviousCompletedBuild().getResult().equals(Result.SUCCESS);
}

public Emoji convertProjectToEmoji(Job project) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import org.jenkinsci.plugins.typetalk.support.ResultSupport
import spock.lang.Specification
import spock.lang.Unroll

class TypetalkMessageSpec extends Specification {
class ResultSupportSpec extends Specification {

@Unroll
def convertFromResult() {
def "convertBuildToMessage : #previousResult to #result"() {
setup:
def build = makeMockBuild(result, previousResult)

Expand Down Expand Up @@ -49,4 +49,39 @@ class TypetalkMessageSpec extends Specification {

return build
}

def "convertBuildToMessage : previousBuildIsBuilding"() {
setup:
def build = makeMockBuild_previousBuildIsBuilding()

when:
def typetalkResult = new ResultSupport().convertBuildToMessage(build)

then:
true // NPE is not thrown
typetalkResult.emoji == Emoji.SMILEY
typetalkResult.message.contains('success')
}

def makeMockBuild_previousBuildIsBuilding() {
def build = Mock(AbstractBuild)

build.result >> Result.SUCCESS
build.previousBuild >> {
def previousBuild = Mock(AbstractBuild)

previousBuild.building >> true
previousBuild.previousBuild >> {
def morePreviousBuild = Mock(AbstractBuild)
morePreviousBuild.result >> Result.SUCCESS

return morePreviousBuild
}

return previousBuild
}

return build
}

}

0 comments on commit 6ab08e3

Please sign in to comment.