Created
April 10, 2014 07:00
Revisions
-
lvdaqian created this gist
Apr 10, 2014 .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,481 @@ <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"> <html> <head> <title>${project.name}</title> <style> body table, td, th, p, h1, h2 { margin:0; font:normal normal 100% Georgia, Serif; background-color: #ffffff; } h1, h2 { border-bottom:dotted 1px #999999; padding:5px; margin-top:10px; margin-bottom:10px; color: #000000; font: normal bold 130% Georgia,Serif; background-color:#f0f0f0; } tr.gray { background-color:#f0f0f0; } h2 { padding:5px; margin-top:5px; margin-bottom:5px; font: italic bold 110% Georgia,Serif; } .bg2 { color:black; background-color:#E0E0E0; font-size:110% } th { font-weight: bold; } tr, td, th { padding:2px; } td.test_passed { color:blue; } td.test_failed { color:red; } td.center { text-align: center; } td.test_skipped { color:grey; } .console { font: normal normal 90% Courier New, monotype; padding:0px; margin:0px; } div.content, div.header { background: #ffffff; border: dotted 1px #666; margin: 2px; content: 2px; padding: 2px; } table.border, th.border, td.border { border: 1px solid black; border-collapse:collapse; } </style> </head> <body> <div class="header"> <j:set var="spc" value="&nbsp;&nbsp;" /> <!-- GENERAL INFO --> <table> <tr class="gray"> <td align="right"> <j:choose> <j:when test="${build.result=='SUCCESS'}"> <img src="${rooturl}static/e59dfe28/images/32x32/blue.gif" /> </j:when> <j:when test="${build.result=='FAILURE'}"> <img src="${rooturl}static/e59dfe28/images/32x32/red.gif" /> </j:when> <j:otherwise> <img src="${rooturl}static/e59dfe28/images/32x32/yellow.gif" /> </j:otherwise> </j:choose> </td> <td valign="center"> <b style="font-size: 200%;">BUILD ${build.result}</b> </td> </tr> <tr> <td>Build URL</td> <td> <a href="${rooturl}${build.url}">${rooturl}${build.url}</a> </td> </tr> <tr> <td>Project:</td> <td>${project.name}</td> </tr> <tr> <td>Date of build:</td> <td>${it.timestampString}</td> </tr> <tr> <td>Build duration:</td> <td>${build.durationString}</td> </tr> <tr> <td>Build cause:</td> <td> <j:forEach var="cause" items="${build.causes}">${cause.shortDescription} </j:forEach> </td> </tr> <tr> <td>Build description:</td> <td>${build.description}</td> </tr> <tr> <td>Built on:</td> <td> <j:choose> <j:when test="${build.builtOnStr!=''}">${build.builtOnStr}</j:when> <j:otherwise>master</j:otherwise> </j:choose> </td> </tr> </table> </div> <!-- HEALTH TEMPLATE --> <div class="content"> <j:set var="healthIconSize" value="16x16" /> <j:set var="healthReports" value="${project.buildHealthReports}" /> <j:if test="${healthReports!=null}"> <h1>Health Report</h1> <table> <tr> <th>W</th> <th>Description</th> <th>Score</th> </tr> <j:forEach var="healthReport" items="${healthReports}"> <tr> <td> <img src="${rooturl}${healthReport.getIconUrl(healthIconSize)}" /> </td> <td>${healthReport.description}</td> <td>${healthReport.score}</td> </tr> </j:forEach> </table> <br /> </j:if> </div> <!-- ARTIFACTS --> <j:set var="artifacts" value="${build.artifacts}" /> <j:if test="${artifacts!=null and artifacts.size()>0}"> <div class="content"> <h1>Build Artifacts</h1> <ul> <j:forEach var="f" items="${artifacts}"> <li> <a href="${rooturl}${build.url}artifact/${f}">${f}</a> </li> </j:forEach> </ul> </div> </j:if> <!-- MAVEN ARTIFACTS --> <j:set var="mbuilds" value="${build.moduleBuilds}" /> <j:if test="${mbuilds!=null}"> <div class="content"> <h1>Build Artifacts</h1> <j:forEach var="m" items="${mbuilds}"> <h2>${m.key.displayName}</h2> <j:forEach var="mvnbld" items="${m.value}"> <j:set var="artifacts" value="${mvnbld.artifacts}" /> <j:if test="${artifacts!=null and artifacts.size()>0}"> <ul> <j:forEach var="f" items="${artifacts}"> <li> <a href="${rooturl}${mvnbld.url}artifact/${f}">${f}</a> </li> </j:forEach> </ul> </j:if> </j:forEach> </j:forEach> <br /> </div> </j:if> <!-- JUnit TEMPLATE --> <j:set var="junitResultList" value="${it.JUnitTestResult}" /> <j:if test="${junitResultList.isEmpty()!=true}"> <div class="content"> <a href="${rooturl}${build.url}/testReport"> <h1>Tests Reports</h1> </a> <h2> Test Trend </h2> <img lazymap="${rooturl}${project.url}/test/trendMap?failureOnly=false" alt="[Test result trend chart]" src="${rooturl}${project.url}/test/trend?failureOnly=false" usemap="#map0" /> <h2> JUnit Tests </h2> <table class="border"> <tr> <th class="border">Package</th> <th class="border">Failed</th> <th class="border">Passed</th> <th class="border">Skipped</th> <th class="border">Total</th> </tr> <j:forEach var="junitResult" items="${it.JUnitTestResult}"> <j:forEach var="packageResult" items="${junitResult.getChildren()}"> <tr> <td class="border"> <tt>${packageResult.getName()}</tt> </td> <td class="border test_failed">${packageResult.getFailCount()}</td> <td class="border test_passed">${packageResult.getPassCount()}</td> <td class="border test_skipped">${packageResult.getSkipCount()}</td> <td class="border"> <b>${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()} </b> </td> </tr> <j:forEach var="failed_test" items="${packageResult.getFailedTests()}"> <tr> <td class="test_failed" colspan="5"> <tt>${failed_test.getFullName()}</tt> </td> </tr> </j:forEach> </j:forEach> </j:forEach> </table> <br /> </div> </j:if> <!-- COBERTURA TEMPLATE --> <j:set var="coberturaAction" value="${it.coberturaAction}" /> <j:if test="${coberturaAction!=null}"> <div class="content"> <j:set var="coberturaResult" value="${coberturaAction.result}" /> <j:if test="${coberturaResult!=null}"> <a href="${rooturl}${build.url}/cobertura"> <h1>Cobertura Report</h1> </a> <h2>Project Coverage Summary</h2> <h3>Trend</h3> <img src="${rooturl}${build.url}cobertura/graph" /> <h3>Project Coverage summary</h3> <table class="border"> <tr> <th class="border">Name</th> <j:forEach var="metric" items="${coberturaResult.metrics}"> <th class="border">${metric.name}</th> </j:forEach> </tr> <tr> <td class="border">${coberturaResult.name}</td> <j:forEach var="metric" items="${coberturaResult.metrics}"> <td class="border" data="${coberturaResult.getCoverage(metric).percentageFloat}">${coberturaResult.getCoverage(metric).percentage}% (${coberturaResult.getCoverage(metric)}) </td> </j:forEach> </tr> </table> <j:if test="${coberturaResult.sourceCodeLevel}"> <h2>Source</h2> <j:choose> <j:when test="${coberturaResult.sourceFileAvailable}"> <div style="overflow-x:scroll;"> <table class="source"> <thead> <tr> <th colspan="3">${coberturaResult.relativeSourcePath} </th> </tr> </thead> ${coberturaResult.sourceFileContent} </table> </div> </j:when> <j:otherwise> <p> <i>Source code is unavailable</i> </p> </j:otherwise> </j:choose> </j:if> <j:forEach var="element" items="${coberturaResult.childElements}"> <j:set var="childMetrics" value="${coberturaResult.getChildMetrics(element)}" /> <h2>Coverage Breakdown by ${element.displayName}</h2> <table class="border"> <tr> <th class="border">Name</th> <j:forEach var="metric" items="${childMetrics}"> <th class="border">${metric.name}</th> </j:forEach> </tr> <j:forEach var="c" items="${coberturaResult.children}"> <j:set var="child" value="${coberturaResult.getChild(c)}" /> <tr> <td class="border"> ${child.xmlTransform(child.name)} </td> <j:forEach var="metric" items="${childMetrics}"> <j:set var="childResult" value="${child.getCoverage(metric)}" /> <j:choose> <j:when test="${childResult!=null}"> <td class="border" data="${childResult.percentageFloat}">${childResult.percentage}% (${childResult}) </td> </j:when> <j:otherwise> <td class="border" data="101">N/A</td> </j:otherwise> </j:choose> </j:forEach> </tr> </j:forEach> </table> </j:forEach> </j:if> <br /> </div> </j:if> <!-- Static Analysis --> <j:set var="actions" value="${it.staticAnalysisActions}" /> <j:if test="${!actions.isEmpty()}"> <div class="content"> <h1>Static Analysis Results</h1> <table> <tr> <th></th> <th>Name</th> <th>Result</th> <th>Total</th> <th>High</th> <th>Normal</th> <th>Low</th> </tr> <j:forEach var="action" items="${actions}"> <tr> <td> <img src="${rooturl}${action.smallImageName}" /> </td> <td> <a href="${rooturl}${build.url}/${action.urlName}">${action.displayName}</a> </td> <td class="center"> <j:choose> <j:when test="${action.result.pluginResult=='SUCCESS'}"> <img src="${rooturl}static/e59dfe28/images/16x16/blue.gif" /> </j:when> <j:when test="${action.result.pluginResult=='FAILURE'}"> <img src="${rooturl}static/e59dfe28/images/16x16/red.gif" /> </j:when> <j:otherwise> <img src="${rooturl}static/e59dfe28/images/16x16/yellow.gif" /> </j:otherwise> </j:choose> </td> <td class="center">${action.result.numberOfAnnotations} </td> <td class="center">${action.result.getNumberOfAnnotations('HIGH')} </td> <td class="center">${action.result.getNumberOfAnnotations('NORMAL')} </td> <td class="center">${action.result.getNumberOfAnnotations('LOW')} </td> </tr> </j:forEach> </table> </div> </j:if> <!-- clangScan Analysis --> <j:set var="clangScanAction" value='${it.getAction("jenkins.plugins.clangscanbuild.actions.ClangScanBuildAction")}' /> <j:if test="${clangScanAction!=null}"> <div class="content"> <a href="${rooturl}${build.url}clangScanBuildBugs"> <h1>Clang Scan Static Analysis Results</h1> </a> <h2> Trend </h2> <img lazymap="${rooturl}${project.url}clangScanBuildTrend/graph" alt="[Clang Scan Static Analysis Results trend chart]" src="${rooturl}${project.url}clangScanBuildTrend/graph" usemap="#map0" /> <h2> Result </h2> <j:set var="summary" value="${clangScanAction.loadBugSummary()}" /> <p> There are ${summary.getBugCount()} clang Scan bugs </p> <j:if test="${summary.getBugCount() !=0 }"> <table border="1px" class="pane"> <tr> <th> </th> <th>File</th> <th>Bug Type</th> <th>Category</th> <th>Description</th> <th>Details </th> </tr> <j:forEach var="clangBug" items="${summary.getBugs()}"> <j:choose> <j:when test="${clangBug.isNewBug()}"> <j:set var="isNew" value="new" /> </j:when> <j:otherwise> <j:set var="isNew" value="" /> </j:otherwise> </j:choose> <tr> <td>${isNew}</td> <td>${clangBug.getSourceFile()}</td> <td>${clangBug.getBugType()}</td> <td>${clangBug.getBugCategory()}</td> <td>${clangBug.getBugDescription()}</td> <td> <a href="${rooturl}${build.url}/clangScanBuildBugs/browse/${clangBug.getReportFile()}#EndPath"> detail </a> </td> </tr> </j:forEach> </table> </j:if> </div> </j:if> <!-- CHANGE SET --> <div class="content"> <j:set var="changeSet" value="${build.changeSet}" /> <j:if test="${changeSet!=null}"> <j:set var="hadChanges" value="false" /> <a href="${rooturl}${build.url}/changes"> <h1>Changes</h1> </a> <j:forEach var="cs" items="${changeSet.logs}" varStatus="loop"> <j:set var="hadChanges" value="true" /> <h2>${cs.msgAnnotated}</h2> <p> by <em>${cs.author}</em> </p> <table> <j:forEach var="p" items="${cs.affectedFiles}"> <tr> <td width="10%">${spc}${p.editType.name}</td> <td> <tt>${p.path}</tt> </td> </tr> </j:forEach> </table> </j:forEach> <j:if test="${!hadChanges}"> <p>No Changes</p> </j:if> <br /> </j:if> </div> </body> </html> </j:jelly>