blob: 03916b1e603d83db4dbefd52092c21a4e9941aed [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.
*/
import japicmp.model.JApiChangeStatus
import org.apache.maven.artifact.versioning.ComparableVersion
import org.apache.maven.artifact.versioning.DefaultArtifactVersion
import org.apache.geode.gradle.japicmp.AllowMajorBreakingChanges
import org.apache.geode.gradle.japicmp.ParentIsExperimental
import org.apache.geode.gradle.japicmp.GeodeApiRegressionRule
def mostRecentReleaseProj = project(':geode-old-versions').subprojects.max(){ v -> new ComparableVersion(v.name)}
def newest = mostRecentReleaseProj.name
tasks.register('japicmp', me.champeau.gradle.japicmp.JapicmpTask) {
inputs.files { configurations.geodeArchives }
def ourUnpackTaskProvider = project(":geode-old-versions:${newest}").tasks.named('downloadAndUnzipFile')
inputs.files { ourUnpackTaskProvider }
def d = java.nio.file.Paths.get(project(":geode-old-versions:${newest}").buildDir.path.toString(), "apache-geode-${newest}", 'lib')
// Dirty hack, to set the value as requied in configuration,
// but then reset to the acutal unpacked jars on runtime.
oldClasspath = files()
oldArchives = files()
doFirst {
oldClasspath = files(file(d).listFiles())
oldArchives = files(file(d).listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().startsWith("geode-") && name.toLowerCase().endsWith(".jar");
};
}))
}
newClasspath = configurations.geodeArchives
newArchives = configurations.geodeArchives.filter { File f ->
f.toString().contains("geode-") && f.toString().endsWith(".jar")
}
ignoreMissingClasses = true
onlyModified = true
accessModifier = "protected"
def allowMajorBreaking = false
if (new DefaultArtifactVersion(version).majorVersion > new DefaultArtifactVersion(newest).majorVersion) {
logger.error("japicmp will always pass when comparing across major versions.")
allowMajorBreaking = true
}
// failOnModification = !allowMajorBreaking
// failOnSourceIncompatibility = !allowMajorBreaking
// onlyBinaryIncompatibleModified = true
// includeSynthetic = true
def reportFileName = "japi-v${newest}-${version}"
txtOutputFile = file("$buildDir/reports/${reportFileName}.txt")
htmlOutputFile = file("$buildDir/reports/${reportFileName}.html")
packageExcludes = ['*internal*']
packageIncludes = ['org.apache.geode.*']
annotationExcludes = ['@org.apache.geode.annotations.Experimental']
richReport {
title = "Geode API Compatibility Report"
description = "Comparing current ${version} against downloaded v${newest}."
reportName = "rich-report-${reportFileName}.html"
outputs.files {
reportName
}
if (allowMajorBreaking) {
addRule(AllowMajorBreakingChanges)
} else {
addRule(JApiChangeStatus.REMOVED, ParentIsExperimental)
addRule(JApiChangeStatus.MODIFIED, ParentIsExperimental)
addRule(GeodeApiRegressionRule)
}
addDefaultRules = true
}
}