From ff85024bf987a1dadf6183b41909c547ffe1e9a0 Mon Sep 17 00:00:00 2001
From: prashant
Date: Fri, 3 Mar 2017 20:20:22 +0000
Subject: [PATCH] Regression notification implemented.
---
.../jenkins/plugins/slack/ActiveNotifier.java | 44 +++++++++++++++++++
.../jenkins/plugins/slack/SlackListener.java | 4 +-
.../jenkins/plugins/slack/SlackNotifier.java | 24 +++++++++-
.../config/AbstractProjectConfigMigrator.java | 1 +
.../plugins/slack/SlackNotifier/config.jelly | 5 +++
.../plugins/slack/SlackNotifierStub.java | 4 +-
...wordsCompatible_1_8_SlackNotifierTest.java | 4 ++
.../jobs/Test_Slack_Plugin/config.xml | 1 +
.../jobs/Test_Slack_Plugin/config.xml | 1 +
.../jobs/Test_Slack_Plugin/config.xml | 1 +
.../jobs/Test_02/config.xml | 1 +
.../jobs/Test_01/config.xml | 1 +
12 files changed, 85 insertions(+), 6 deletions(-)
diff --git a/src/main/java/jenkins/plugins/slack/ActiveNotifier.java b/src/main/java/jenkins/plugins/slack/ActiveNotifier.java
index 9cd9a688..0018aef8 100755
--- a/src/main/java/jenkins/plugins/slack/ActiveNotifier.java
+++ b/src/main/java/jenkins/plugins/slack/ActiveNotifier.java
@@ -13,6 +13,7 @@
import hudson.scm.ChangeLogSet;
import hudson.scm.ChangeLogSet.AffectedFile;
import hudson.scm.ChangeLogSet.Entry;
+import hudson.tasks.junit.TestResultAction;
import hudson.tasks.test.AbstractTestResultAction;
import hudson.tasks.test.TestResult;
import hudson.triggers.SCMTrigger;
@@ -96,6 +97,20 @@ private void notifyStart(AbstractBuild build, String message) {
}
public void finalized(AbstractBuild r) {
+ AbstractProject, ?> project = r.getProject();
+ Result result = r.getResult();
+ AbstractBuild, ?> previousBuild = project.getLastBuild();
+ do {
+ previousBuild = previousBuild.getPreviousCompletedBuild();
+ } while (previousBuild != null && previousBuild.getResult() == Result.ABORTED);
+ Result previousResult = (previousBuild != null) ? previousBuild.getResult() : Result.SUCCESS;
+ if((result.isWorseThan(previousResult) || moreTestFailuresThanPreviousBuild(r, previousBuild)) && notifier.getNotifyRegression()) {
+ getSlack(r).publish(getBuildStatusMessage(r, notifier.includeTestSummary(),
+ notifier.includeFailedTests(), notifier.includeCustomMessage()), getBuildColor(r));
+ if (notifier.getCommitInfoChoice().showAnything()) {
+ getSlack(r).publish(getCommitList(r), getBuildColor(r));
+ }
+ }
}
public void completed(AbstractBuild r) {
@@ -127,6 +142,31 @@ public void completed(AbstractBuild r) {
}
}
+ private boolean moreTestFailuresThanPreviousBuild(AbstractBuild currentBuild, AbstractBuild, ?> previousBuild) {
+ if (getTestResult(currentBuild) != null && getTestResult(previousBuild) != null) {
+ if (getTestResult(currentBuild).getFailCount() > getTestResult(previousBuild).getFailCount())
+ return true;
+
+ // test if different tests failed.
+ return !getFailedTestIds(currentBuild).equals(getFailedTestIds(previousBuild));
+ }
+ return false;
+ }
+
+ private TestResultAction getTestResult(AbstractBuild build) {
+ return build.getAction(TestResultAction.class);
+ }
+
+ private Set getFailedTestIds(AbstractBuild currentBuild) {
+ Set failedTestIds = new HashSet();
+ List extends TestResult> failedTests = getTestResult(currentBuild).getFailedTests();
+ for(TestResult result : failedTests) {
+ failedTestIds.add(result.getId());
+ }
+
+ return failedTestIds;
+ }
+
String getChanges(AbstractBuild r, boolean includeCustomMessage) {
if (!r.hasChangeSetComputed()) {
logger.info("No change set computed...");
@@ -242,6 +282,7 @@ public static class MessageBuilder {
ABORTED_STATUS_MESSAGE = "Aborted",
NOT_BUILT_STATUS_MESSAGE = "Not built",
UNSTABLE_STATUS_MESSAGE = "Unstable",
+ REGRESSION_STATUS_MESSAGE = "Regression",
UNKNOWN_STATUS_MESSAGE = "Unknown";
private StringBuffer message;
@@ -318,6 +359,9 @@ private String getStatusMessage(AbstractBuild r) {
if (result == Result.UNSTABLE) {
return UNSTABLE_STATUS_MESSAGE;
}
+ if (lastNonAbortedBuild != null && result.isWorseThan(previousResult)) {
+ return REGRESSION_STATUS_MESSAGE;
+ }
return UNKNOWN_STATUS_MESSAGE;
}
diff --git a/src/main/java/jenkins/plugins/slack/SlackListener.java b/src/main/java/jenkins/plugins/slack/SlackListener.java
index 1aa2ad6d..a0ba6d54 100755
--- a/src/main/java/jenkins/plugins/slack/SlackListener.java
+++ b/src/main/java/jenkins/plugins/slack/SlackListener.java
@@ -42,8 +42,8 @@ public void onDeleted(AbstractBuild r) {
@Override
public void onFinalized(AbstractBuild r) {
- // getNotifier(r.getProject()).finalized(r);
- // super.onFinalized(r);
+ getNotifier(r.getProject(), null).finalized(r);
+ super.onFinalized(r);
}
@SuppressWarnings("unchecked")
diff --git a/src/main/java/jenkins/plugins/slack/SlackNotifier.java b/src/main/java/jenkins/plugins/slack/SlackNotifier.java
index 4c708a2d..dd35cc5b 100755
--- a/src/main/java/jenkins/plugins/slack/SlackNotifier.java
+++ b/src/main/java/jenkins/plugins/slack/SlackNotifier.java
@@ -53,6 +53,7 @@ public class SlackNotifier extends Notifier {
private boolean notifyAborted;
private boolean notifyNotBuilt;
private boolean notifyUnstable;
+ private boolean notifyRegression;
private boolean notifyFailure;
private boolean notifyBackToNormal;
private boolean notifyRepeatedFailure;
@@ -153,6 +154,10 @@ public boolean getNotifyUnstable() {
return notifyUnstable;
}
+ public boolean getNotifyRegression() {
+ return notifyRegression;
+ }
+
public boolean getNotifyBackToNormal() {
return notifyBackToNormal;
}
@@ -212,6 +217,11 @@ public void setNotifyUnstable(boolean notifyUnstable) {
this.notifyUnstable = notifyUnstable;
}
+ @DataBoundSetter
+ public void setNotifyRegression(boolean notifyRegression) {
+ this.notifyRegression = notifyRegression;
+ }
+
@DataBoundSetter
public void setNotifyBackToNormal(boolean notifyBackToNormal) {
this.notifyBackToNormal = notifyBackToNormal;
@@ -244,7 +254,7 @@ public SlackNotifier() {
public SlackNotifier(final String baseUrl, final String teamDomain, final String authToken, final boolean botUser, final String room, final String authTokenCredentialId,
final String sendAs, final boolean startNotification, final boolean notifyAborted, final boolean notifyFailure,
- final boolean notifyNotBuilt, final boolean notifySuccess, final boolean notifyUnstable, final boolean notifyBackToNormal,
+ final boolean notifyNotBuilt, final boolean notifySuccess, final boolean notifyUnstable, final boolean notifyRegression, final boolean notifyBackToNormal,
final boolean notifyRepeatedFailure, final boolean includeTestSummary, final boolean includeFailedTests,
CommitInfoChoice commitInfoChoice, boolean includeCustomMessage, String customMessage) {
super();
@@ -264,6 +274,7 @@ public SlackNotifier(final String baseUrl, final String teamDomain, final String
this.notifyNotBuilt = notifyNotBuilt;
this.notifySuccess = notifySuccess;
this.notifyUnstable = notifyUnstable;
+ this.notifyRegression = notifyRegression;
this.notifyBackToNormal = notifyBackToNormal;
this.notifyRepeatedFailure = notifyRepeatedFailure;
this.includeTestSummary = includeTestSummary;
@@ -423,6 +434,7 @@ public SlackNotifier newInstance(StaplerRequest sr, JSONObject json) {
boolean notifyAborted = "true".equals(sr.getParameter("slackNotifyAborted"));
boolean notifyNotBuilt = "true".equals(sr.getParameter("slackNotifyNotBuilt"));
boolean notifyUnstable = "true".equals(sr.getParameter("slackNotifyUnstable"));
+ boolean notifyRegression = "true".equals(sr.getParameter("slackNotifyRegression"));
boolean notifyFailure = "true".equals(sr.getParameter("slackNotifyFailure"));
boolean notifyBackToNormal = "true".equals(sr.getParameter("slackNotifyBackToNormal"));
boolean notifyRepeatedFailure = "true".equals(sr.getParameter("slackNotifyRepeatedFailure"));
@@ -432,7 +444,7 @@ public SlackNotifier newInstance(StaplerRequest sr, JSONObject json) {
boolean includeCustomMessage = "on".equals(sr.getParameter("includeCustomMessage"));
String customMessage = sr.getParameter("customMessage");
return new SlackNotifier(baseUrl, teamDomain, token, botUser, room, tokenCredentialId, sendAs, startNotification, notifyAborted,
- notifyFailure, notifyNotBuilt, notifySuccess, notifyUnstable, notifyBackToNormal, notifyRepeatedFailure,
+ notifyFailure, notifyNotBuilt, notifySuccess, notifyUnstable, notifyRegression, notifyBackToNormal, notifyRepeatedFailure,
includeTestSummary, includeFailedTests, commitInfoChoice, includeCustomMessage, customMessage);
}
@@ -515,6 +527,7 @@ public static class SlackJobProperty extends hudson.model.JobProperty
+
+
+
+
+
diff --git a/src/test/java/jenkins/plugins/slack/SlackNotifierStub.java b/src/test/java/jenkins/plugins/slack/SlackNotifierStub.java
index c2ed563f..84150762 100644
--- a/src/test/java/jenkins/plugins/slack/SlackNotifierStub.java
+++ b/src/test/java/jenkins/plugins/slack/SlackNotifierStub.java
@@ -4,11 +4,11 @@ public class SlackNotifierStub extends SlackNotifier {
public SlackNotifierStub(String baseUrl, String teamDomain, String authToken, boolean botUser, String room, String authTokenCredentialId,
String sendAs, boolean startNotification, boolean notifyAborted, boolean notifyFailure,
- boolean notifyNotBuilt, boolean notifySuccess, boolean notifyUnstable, boolean notifyBackToNormal,
+ boolean notifyNotBuilt, boolean notifySuccess, boolean notifyUnstable, boolean notifyRegression, boolean notifyBackToNormal,
boolean notifyRepeatedFailure, boolean includeTestSummary, boolean includeFailedTests,
CommitInfoChoice commitInfoChoice, boolean includeCustomMessage, String customMessage) {
super(baseUrl, teamDomain, authToken, botUser, room, authTokenCredentialId, sendAs, startNotification, notifyAborted, notifyFailure,
- notifyNotBuilt, notifySuccess, notifyUnstable, notifyBackToNormal, notifyRepeatedFailure,
+ notifyNotBuilt, notifySuccess, notifyUnstable, notifyRegression, notifyBackToNormal, notifyRepeatedFailure,
includeTestSummary, includeFailedTests, commitInfoChoice, includeCustomMessage, customMessage);
}
diff --git a/src/test/java/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest.java b/src/test/java/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest.java
index c474200d..e84b4f48 100644
--- a/src/test/java/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest.java
+++ b/src/test/java/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest.java
@@ -50,6 +50,7 @@ public void testBasicMigration() {
assertFalse(notifier.getNotifyAborted());
assertFalse(notifier.getNotifyNotBuilt());
assertFalse(notifier.getNotifyUnstable());
+ assertFalse(notifier.getNotifyRegression());
assertTrue(notifier.getNotifyFailure());
assertFalse(notifier.getNotifyBackToNormal());
assertFalse(notifier.getNotifyRepeatedFailure());
@@ -77,6 +78,7 @@ public void testGlobalSettingsOverriden() {
assertFalse(notifier.getNotifyAborted());
assertFalse(notifier.getNotifyNotBuilt());
assertFalse(notifier.getNotifyUnstable());
+ assertFalse(notifier.getNotifyRegression());
assertTrue(notifier.getNotifyFailure());
assertFalse(notifier.getNotifyBackToNormal());
assertFalse(notifier.getNotifyRepeatedFailure());
@@ -104,6 +106,7 @@ public void testGlobalSettingsNotOverridden() throws IOException {
assertFalse(notifier.getNotifyAborted());
assertFalse(notifier.getNotifyNotBuilt());
assertFalse(notifier.getNotifyUnstable());
+ assertFalse(notifier.getNotifyRegression());
assertTrue(notifier.getNotifyFailure());
assertFalse(notifier.getNotifyBackToNormal());
assertFalse(notifier.getNotifyRepeatedFailure());
@@ -159,6 +162,7 @@ public void testMigrationOfSomeJobs() throws IOException {
assertTrue(notifier.getNotifyAborted());
assertTrue(notifier.getNotifyNotBuilt());
assertTrue(notifier.getNotifyUnstable());
+ assertTrue(notifier.getNotifyRegression());
assertTrue(notifier.getNotifyFailure());
assertTrue(notifier.getNotifyBackToNormal());
assertTrue(notifier.getNotifyRepeatedFailure());
diff --git a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testBasicMigration/jobs/Test_Slack_Plugin/config.xml b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testBasicMigration/jobs/Test_Slack_Plugin/config.xml
index b5c573f8..567cae21 100644
--- a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testBasicMigration/jobs/Test_Slack_Plugin/config.xml
+++ b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testBasicMigration/jobs/Test_Slack_Plugin/config.xml
@@ -13,6 +13,7 @@
false
false
false
+ false
true
false
false
diff --git a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsNotOverridden/jobs/Test_Slack_Plugin/config.xml b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsNotOverridden/jobs/Test_Slack_Plugin/config.xml
index 7b976eaf..38b5e660 100644
--- a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsNotOverridden/jobs/Test_Slack_Plugin/config.xml
+++ b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsNotOverridden/jobs/Test_Slack_Plugin/config.xml
@@ -13,6 +13,7 @@
false
false
false
+ false
true
false
false
diff --git a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsOverriden/jobs/Test_Slack_Plugin/config.xml b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsOverriden/jobs/Test_Slack_Plugin/config.xml
index b5c573f8..567cae21 100644
--- a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsOverriden/jobs/Test_Slack_Plugin/config.xml
+++ b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testGlobalSettingsOverriden/jobs/Test_Slack_Plugin/config.xml
@@ -13,6 +13,7 @@
false
false
false
+ false
true
false
false
diff --git a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationOfSomeJobs/jobs/Test_02/config.xml b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationOfSomeJobs/jobs/Test_02/config.xml
index 40ff1817..ac64d54e 100644
--- a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationOfSomeJobs/jobs/Test_02/config.xml
+++ b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationOfSomeJobs/jobs/Test_02/config.xml
@@ -13,6 +13,7 @@
true
true
true
+ true
true
true
true
diff --git a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationWithNoNotifier/jobs/Test_01/config.xml b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationWithNoNotifier/jobs/Test_01/config.xml
index 477394d2..208bb67b 100644
--- a/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationWithNoNotifier/jobs/Test_01/config.xml
+++ b/src/test/resources/jenkins/plugins/slack/config/BackwordsCompatible_1_8_SlackNotifierTest/testMigrationWithNoNotifier/jobs/Test_01/config.xml
@@ -13,6 +13,7 @@
false
false
false
+ false
false
false
false