blob: 109c9cce5fe9cc2016e490763f5d46f5627ec6d9 [file] [log] [blame]
/*
* 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.
*/
/**
* Replace property values (defined in pom.xml files) in Antora yaml config
*/
import java.nio.file.Path
import java.nio.file.Paths
import java.nio.file.Files
import java.util.stream.Stream
import java.util.stream.Collectors
import java.util.regex.Pattern
import java.util.regex.Matcher
final Path treeRootDir = Paths.get(properties['maven.multiModuleProjectDirectory'])
final List<Path> replaceInFiles = [
treeRootDir.resolve('docs/antora.yml')
] as List
final List<Path> missingFiles = replaceInFiles.stream()
.filter {path -> !Files.isRegularFile(path)}
.collect(Collectors.toList())
if (!missingFiles.isEmpty()) {
throw new IllegalStateException("Files expected to exist: " + missingFiles)
}
final Pattern replacementPattern = ~'([\\-\\:]) *([^ ]+) *# * replace \\$\\{([^}]+)\\}'
replaceInFiles.each { path ->
println 'Updating ' + path
final String content = path.getText('UTF-8')
final Matcher m = replacementPattern.matcher(content)
final StringBuffer newContent = new StringBuffer(content.length())
while (m.find()) {
final String property = m.group(3)
final String newValue = project.properties.get(property)
println " - replacing ${property} '" + m.group(2) +"' -> '${newValue}'"
m.appendReplacement(newContent, '$1 ' + Matcher.quoteReplacement(newValue) + ' # replace ' + Matcher.quoteReplacement('${' + property + '}'))
}
m.appendTail(newContent)
String newContentString = newContent.toString()
if (!newContentString.equals(content)) {
println 'Updated ' + path
Files.write(path, newContentString.getBytes('UTF-8'))
} else {
println 'No change in ' + path
}
}