Created
August 26, 2013 07:59
Revisions
-
languitar created this gist
Aug 26, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,90 @@ import jenkins.model.Jenkins build = Jenkins.instance.items[0].builds[0] println build println("Available actions on the build: " + build.actions) def analysisCoreActions = [] // All static analysis actions based on static analysis core can be handled uniformly analysisCoreActions.addAll(build.actions.findAll{it.class.name =~ "hudson.plugins.checkstyle.CheckStyle.*ResultAction"}) analysisCoreActions.addAll(build.actions.findAll{it.class.name =~ "hudson.plugins.findbugs.FindBugs.*ResultAction"}) analysisCoreActions.addAll(build.actions.findAll{it.class.name =~ "hudson.plugins.pmd.Pmd.*ResultAction"}) analysisCoreActions.addAll(build.actions.findAll{it.class.name =~ "hudson.plugins.dry.Dry.*ResultAction"}) analysisCoreActions.addAll(build.actions.findAll{it.class.name =~ "hudson.plugins.warnings.*ResultAction"}) analysisCoreActions.removeAll([null]) println "Found analysis core actions: " + analysisCoreActions def newViolations = analysisCoreActions.sum{it.result.numberOfNewWarnings} println "Found " + newViolations + " new violations in analysis core plugins" // Specifically handle new tasks as we probably want to send something different in this case def tasksAction = build.actions.find{it.class.name =~ "hudson.plugins.tasks.*ResultAction"} def newTasks = 0 if (tasksAction != null) { newTasks = tasksAction.result.numberOfNewWarnings println "Found " + newTasks + " new tasks" } // now there are some special rules for plugins that do not use analysis core // violations plugin def violationsStatus(build) { def violationsAction = build.actions.find{it.class.name =~ "hudson.plugins.violations.ViolationsBuildAction"} if (violationsAction == null) { return false } def previousBuild = build.previousBuild if (previousBuild == null) { return false } def previousViolationsAction = previousBuild.actions.find{it.class.name =~ "hudson.plugins.violations.ViolationsBuildAction"} if (previousViolationsAction == null) { return false } for (currentViolationState in violationsAction.report.violations) { println currentViolationState.key + ": " + currentViolationState.value def previousState = previousViolationsAction.report.violations[currentViolationState.key] if (previousState == null) { continue } println "Previous: " + previousState if (currentViolationState.value > previousState && previousState >= 0) { return true } } return false } def violationsAdded = violationsStatus(build) println "Added violations: " + violationsAdded // cppcheck def cppcheckStatus(build) { def cppcheckAction = build.actions.find{it.class.name =~ "org.jenkinsci.plugins.cppcheck.CppcheckBuildAction"} if (cppcheckAction == null) { return false } def previousBuild = build.previousBuild println "Previous cppcheck build: " + previousBuild if (previousBuild == null) { return false } def previousCppcheckAction = previousBuild.actions.find{it.class.name =~ "org.jenkinsci.plugins.cppcheck.CppcheckBuildAction"} println "Previous cppcheck action: " + previousCppcheckAction if (previousCppcheckAction == null) { return false } return cppcheckAction.result.report.allErrors.size() > previousCppcheckAction.result.report.allErrors.size() } def cppcheckAdded = cppcheckStatus(build) println "Added cppcheck errors: " + cppcheckAdded // send email if we have new warnings newViolations > 0 || newTasks > 0 || violationsAdded || cppcheckAdded