1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/vars/checksPublishResults.groovy

153 lines
4.9 KiB
Groovy
Raw Normal View History

2018-01-29 17:47:22 +02:00
import com.cloudbees.groovy.cps.NonCPS
2018-02-01 13:57:25 +02:00
import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger
2018-02-08 11:21:38 +02:00
import com.sap.piper.MapUtils
2018-01-29 17:47:22 +02:00
2018-02-01 13:57:25 +02:00
import groovy.transform.Field
2018-02-02 15:50:26 +02:00
@Field def STEP_NAME = 'checksPublishResults'
2018-02-16 11:08:48 +02:00
@Field List TOOLS = [
'aggregation', 'tasks', 'pmd', 'cpd', 'findbugs', 'checkstyle', 'eslint', 'pylint'
]
2018-01-31 17:56:18 +02:00
2018-01-29 17:47:22 +02:00
/**
2018-02-02 15:50:26 +02:00
* checksPublishResults
2018-01-29 17:47:22 +02:00
*
* @param others document all parameters
*/
2018-01-30 14:15:08 +02:00
def call(Map parameters = [:]) {
2018-02-01 13:57:25 +02:00
handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters) {
def script = parameters.script
if (script == null)
script = [commonPipelineEnvironment: commonPipelineEnvironment]
prepareDefaultValues script: script
2018-02-08 11:53:48 +02:00
prepare(parameters)
2018-02-16 11:08:48 +02:00
List configKeys = TOOLS.plus('archive')
2018-02-08 11:53:48 +02:00
2018-02-01 13:57:25 +02:00
final Map stepDefaults = ConfigurationLoader.defaultStepConfiguration(script, STEP_NAME)
final Map stepConfiguration = ConfigurationLoader.stepConfiguration(script, STEP_NAME)
2018-02-08 10:52:21 +02:00
Map configuration = ConfigurationMerger.merge(
2018-02-16 11:08:48 +02:00
parameters, configKeys,
stepConfiguration, configKeys,
2018-02-08 10:52:21 +02:00
stepDefaults)
2018-02-01 13:57:25 +02:00
def doArchive = configuration.get('archive')
2018-01-29 17:29:00 +02:00
// JAVA
2018-02-01 13:57:25 +02:00
report('PmdPublisher', configuration.get('pmd'), doArchive)
report('DryPublisher', configuration.get('cpd'), doArchive)
report('FindBugsPublisher', configuration.get('findbugs'), doArchive)
report('CheckStylePublisher', configuration.get('checkstyle'), doArchive)
2018-01-29 17:29:00 +02:00
// JAVA SCRIPT
2018-02-01 13:57:25 +02:00
reportWarnings('JSLint', configuration.get('eslint'), doArchive)
2018-01-29 17:29:00 +02:00
// PYTHON
2018-02-01 13:57:25 +02:00
reportWarnings('PyLint', configuration.get('pylint'), doArchive)
// GENERAL
reportTasks(configuration.get('tasks'))
2018-02-08 11:52:10 +02:00
aggregateReports(configuration.get('aggregation'))
2018-01-29 17:29:00 +02:00
}
}
2018-02-08 11:52:10 +02:00
def aggregateReports(settings){
2018-02-01 13:57:25 +02:00
if (settings.active) {
2018-01-29 17:29:00 +02:00
def options = createCommonOptionsMap('AnalysisPublisher', settings)
// publish
step(options)
}
}
2018-02-01 13:57:25 +02:00
def reportTasks(settings){
if (settings.active) {
def options = createCommonOptionsMap('TasksPublisher', settings)
options.put('pattern', settings.get('pattern'))
options.put('high', settings.get('high'))
options.put('normal', settings.get('normal'))
options.put('low', settings.get('low'))
// publish
step(options)
}
}
def report(publisherName, settings, doArchive){
if (settings.active) {
def pattern = settings.get('pattern')
2018-02-01 09:22:12 +02:00
def options = createCommonOptionsMap(publisherName, settings)
2018-01-30 14:14:05 +02:00
options.put('pattern', pattern)
2018-01-29 17:29:00 +02:00
// publish
step(options)
// archive check results
2018-02-01 13:57:25 +02:00
archiveResults(doArchive && settings.get('archive'), pattern, true)
2018-01-29 17:29:00 +02:00
}
}
2018-02-01 13:57:25 +02:00
def reportWarnings(parserName, settings, doArchive){
if (settings.active) {
def pattern = settings.get('pattern')
2018-01-29 17:29:00 +02:00
def options = createCommonOptionsMap('WarningsPublisher', settings)
options.put('parserConfigurations', [[
parserName: parserName,
2018-01-30 14:14:05 +02:00
pattern: pattern
2018-01-29 17:29:00 +02:00
]])
// publish
step(options)
// archive check results
2018-02-01 13:57:25 +02:00
archiveResults(doArchive && settings.get('archive'), pattern, true)
2018-01-29 17:29:00 +02:00
}
}
def archiveResults(archive, pattern, allowEmpty){
if(archive){
2018-02-01 13:57:25 +02:00
echo "[${STEP_NAME}] archive ${pattern}"
2018-01-29 17:29:00 +02:00
archiveArtifacts artifacts: pattern, allowEmptyArchive: allowEmpty
}
}
2018-01-30 14:15:49 +02:00
@NonCPS
2018-01-30 11:06:35 +02:00
def createCommonOptionsMap(publisherName, settings){
2018-01-30 14:15:49 +02:00
Map result = [:]
2018-02-08 10:58:58 +02:00
def thresholds = settings.get('thresholds', [:])
def fail = thresholds.get('fail', [:])
def unstable = thresholds.get('unstable', [:])
2018-01-29 17:29:00 +02:00
2018-01-30 11:06:35 +02:00
result.put('$class', publisherName)
2018-02-01 13:57:25 +02:00
result.put('healthy', settings.get('healthy'))
result.put('unHealthy', settings.get('unHealthy'))
2018-01-29 17:29:00 +02:00
result.put('canRunOnFailed', true)
2018-02-08 10:58:58 +02:00
result.put('failedTotalAll', fail.get('all'))
result.put('failedTotalHigh', fail.get('high'))
result.put('failedTotalNormal', fail.get('normal'))
result.put('failedTotalLow', fail.get('low'))
result.put('unstableTotalAll', unstable.get('all'))
result.put('unstableTotalHigh', unstable.get('high'))
result.put('unstableTotalNormal', unstable.get('normal'))
result.put('unstableTotalLow', unstable.get('low'))
2018-02-08 11:43:24 +02:00
// filter empty values
result = result.findAll {
return it.value != null && it.value != ''
}
2018-01-29 17:29:00 +02:00
return result
}
2018-02-01 13:57:25 +02:00
@NonCPS
def prepare(parameters){
2018-02-08 11:51:39 +02:00
// ensure tool maps are initialized correctly
2018-02-16 11:08:48 +02:00
for(String tool : TOOLS){
2018-02-08 11:51:39 +02:00
parameters[tool] = toMap(parameters[tool])
}
2018-02-01 13:57:25 +02:00
return parameters
}
2018-02-08 11:50:11 +02:00
@NonCPS
def toMap(parameter){
if(MapUtils.isMap(parameter))
parameter.put('active', parameter.active == null?true:parameter.active)
else if(Boolean.TRUE.equals(parameter))
parameter = [active: true]
else if(Boolean.FALSE.equals(parameter))
parameter = [active: false]
else
parameter = [:]
return parameter
}