Gradle build occasionally fails. And I do not know how to reproduce it. The next build usually goes OK.
if (!System.properties['skipJSLint']){
war.dependsOn jslint
}
jslint {
haltOnFailure = true
inputDirs = ["${project.projectDir.absolutePath}/devkit", "${project.projectDir.absolutePath}/test/qunit/tests", "${project.projectDir.absolutePath}/devkit/3rdparty/browser-i18n/"]
includes = "**/*.js"
excludes = "**/3rdparty/**, **/qunit.js, **/qunit/devkit/**"
formatterType = 'html'
options = ''
}
jslint.doFirst {
def reportDir = new File("$buildDir/reports/i18n")
if (!reportDir.exists()){
reportDir.mkdirs();
}
def reportFile = new File(reportDir, 'index.html')
reportFile.delete()
// check JSON i18n files
def i18nDir = new File("${project.projectDir.absolutePath}/devkit/i18n")
def i18nFiles = i18nDir.listFiles({d, f-> f ==~ /.*.json/ } as FilenameFilter)
def builder = new groovy.xml.MarkupBuilder(new FileWriter(reportFile))
builder.html {
head {
title "Internationalisation(i81n) Report"
link (rel : 'stylesheet', type: 'text/css', href: 'i18n.css')
}
body {
h1 "Mutual I18n File Analysis"
table(class: 'i18n') {
tr {
td "File A"
td "File B"
td "Keys Missing in File B"
}
for (int f1 = 0; f1 <= i18nFiles.length - 2; f1++) {
def file1 = i18nFiles[f1]
def convertJsonToProperties = { file ->
println "Parsing file ${file.absolutePath}"
def flattenMap
flattenMap = { map, result = [:], prefix = '' ->
def addPrefix = { suffix ->
prefix ? prefix + '.' + suffix : suffix
}
map.each { k, v ->
switch (v) {
case String:
result[addPrefix(k)] = v
break
case Map:
flattenMap(v, result, addPrefix(k))
break
default:
throw new org.gradle.api.InvalidUserDataException("Error: uknown type: ${v.class}")
break
}
}
return result
}
def m = flattenMap(new groovy.json.JsonSlurper().parseText(file.text))
//println "parsed properties: $m"
return m
}
def i118n1 = convertJsonToProperties(file1)
for (int f2 = f1 + 1; f2 <= i18nFiles.length - 1; f2++) {
def file2 = i18nFiles[f2]
def i118n2 = convertJsonToProperties(file2)
def diff1 = i118n1.keySet() - i118n2.keySet(), diff2 = i118n2.keySet() - i118n1.keySet()
def reportMissing = { diff, fName1, fName2 ->
if (diff) {
if (!reportFile.exists()) {
reportFile.parentFile.mkdirs()
}
tr {
td fName1
td fName2
td {
ul {
diff.each {
li it
}
}
}
}
//"Keys present in '$fName1', but not in '$fName2':".toString()
}
}
reportMissing(diff1, file1.name, file2.name)
reportMissing(diff2, file2.name, file1.name)
}
}
}
}
}
}
jslint.doFirst {
// clean out reports, as otherwise we get an XSLT error, if we have a report from previous build
if (buildDir.exists()) {
ant.delete { fileset(dir: buildDir, includes: "reports/*") }
}
}
task i18n(type: Copy){
from "${project.projectDir.absolutePath}/test/css/jenkins/i18n.css"
from("${project.projectDir.absolutePath}/test/") {
include 'images/**/*'
}
into "$buildDir/reports/i18n/"
}
jslint << {
i18n.execute()
}
I have added --stacktrace option to the build, when it fails again I will provide you with the stack trace.