LUCENE-9333: Add gradle task to compile changes.txt to a html (#1468)

This commit is contained in:
Tomoko Uchida 2020-04-30 17:21:53 +09:00 committed by GitHub
parent ddd8fa9284
commit 5354f7e88e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 129 additions and 0 deletions

View File

@ -131,3 +131,6 @@ apply from: file('gradle/ant-compat/test-classes-cross-deps.gradle')
apply from: file('gradle/ant-compat/artifact-naming.gradle')
apply from: file('gradle/ant-compat/solr-forbidden-apis.gradle')
apply from: file('gradle/ant-compat/forbidden-api-rules-in-sync.gradle')
apply from: file('gradle/documentation/documentation.gradle')
apply from: file('gradle/documentation/changes-to-html.gradle')

View File

@ -0,0 +1,89 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
configure(subprojects.findAll { it.path == ':lucene' || it.path == ':solr' }) {
task changesToHtml(type: ChangesToHtmlTask)
}
// compile changes.txt into an html file
class ChangesToHtmlTask extends DefaultTask {
@Input
File changesFile = project.file("CHANGES.txt")
@Input
File changesDoapFile = project.rootProject.file("dev-tools/doap/${project.name}.rdf")
@InputDirectory
File siteDir = project.rootProject.file("lucene/site/changes")
@OutputDirectory
File targetDir = project.file("${project.docroot}/changes")
def luceneDocUrl = "https://lucene.apache.org/core/${project.version.replace(".", "_")}/".toString()
def loadVersions(File outfile) {
// load version properties from DOAP RDF
def prefix = "doap.${project.name}".toString()
ant.xmlproperty(keeproot: false, file: changesDoapFile, collapseAttributes: false, prefix: "${prefix}")
outfile.withWriter("UTF-8") { writer ->
writer.println(ant.properties["${prefix}.Project.release.Version.revision"])
writer.println(ant.properties["${prefix}.Project.release.Version.created"])
}
}
def toHtml(File versionsFile) {
def output = new ByteArrayOutputStream()
def result = project.exec {
executable "perl"
standardInput changesFile.newInputStream()
standardOutput project.file("${targetDir}/Changes.html").newOutputStream()
errorOutput = output
ignoreExitValue = true
args += [
"-CSD",
project.rootProject.file("${siteDir}/changes2html.pl").toString(),
"${project.name}",
versionsFile.toString(),
luceneDocUrl
]
}
if (result.getExitValue() != 0) {
throw new GradleException("Changes generation failed:\n${output}")
}
}
@TaskAction
def convert() {
project.mkdir targetDir
if (changesFile.exists() && changesDoapFile.exists()) {
File versionsFile = project.file("${project.buildDir}/doap.${project.name}.changes.version.dates.csv")
loadVersions(versionsFile)
toHtml(versionsFile)
project.copy {
from siteDir
into targetDir
include "*.css"
}
versionsFile.delete()
} else {
throw new GradleException("Changes file ${changesFile} or Doap file ${changesDoapFile} not found.")
}
}
}

View File

@ -0,0 +1,37 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
configure(rootProject) {
task documentation() {
group = 'documentation'
description = 'Generate all documentation'
dependsOn allprojects.collect { prj ->
prj.tasks.matching { task -> task.name in [
"changesToHtml"
// TODO: "markdownToHtml"
// TODO: "gatherJavadocs"
]}
}
}
}
configure(subprojects.findAll { it.path == ':lucene' || it.path == ':solr' }) {
ext {
docroot = "${project.buildDir}/documentation"
}
}