@@ -6,6 +6,7 @@ import junitbuild.compatibility.japicmp.AcceptedViolationsPostProcessRule
66import junitbuild.compatibility.japicmp.BreakingSuperClassChangeRule
77import junitbuild.compatibility.japicmp.InternalApiFilter
88import junitbuild.compatibility.japicmp.SourceIncompatibleRule
9+ import junitbuild.extensions.dependencyFromLibs
910import junitbuild.extensions.javaModuleName
1011import me.champeau.gradle.japicmp.JapicmpTask
1112import me.champeau.gradle.japicmp.report.stdrules.BinaryIncompatibleRule
@@ -17,6 +18,14 @@ plugins {
1718 id(" me.champeau.gradle.japicmp" )
1819}
1920
21+ val roseauDependencies = configurations.dependencyScope(" roseau" )
22+ val roseauClasspath = configurations.resolvable(" roseauClasspath" ) {
23+ extendsFrom(roseauDependencies.get())
24+ }
25+ dependencies {
26+ roseauDependencies(dependencyFromLibs(" roseau-cli" ))
27+ }
28+
2029val extension = extensions.create<BackwardCompatibilityChecksExtension >(" backwardCompatibilityChecks" ).apply {
2130 enabled.convention(true )
2231 acceptedIncompatibilities.apply {
@@ -49,11 +58,56 @@ val downloadPreviousReleaseJar by tasks.registering(Download::class) {
4958 outputs.cacheIf { true }
5059}
5160
52- val checkBackwardCompatibility by tasks.registering(JapicmpTask ::class ) {
61+ val roseauCsvFile = layout.buildDirectory.file(" reports/roseau/breaking-changes.csv" )
62+
63+ val roseau by tasks.registering(JavaExec ::class ) {
5364 if (gradle.startParameter.isOffline) {
5465 enabled = false
5566 }
5667 onlyIf { extension.enabled.get() }
68+
69+ mainClass = " io.github.alien.roseau.cli.RoseauCLI"
70+ classpath = files(roseauClasspath)
71+
72+ inputs.files(configurations.compileClasspath)
73+ .withNormalizer(CompileClasspathNormalizer ::class )
74+ .withPropertyName(" apiClasspath" )
75+
76+ val v1Jar = downloadPreviousReleaseJar.map { it.outputFiles.single() }
77+ inputs.file(v1Jar)
78+ .withNormalizer(CompileClasspathNormalizer ::class )
79+ .withPropertyName(" v1" )
80+
81+ val v2Jar = tasks.jar.flatMap { it.archiveFile }.map { it.asFile }
82+ inputs.file(v2Jar)
83+ .withNormalizer(CompileClasspathNormalizer ::class )
84+ .withPropertyName(" v2" )
85+
86+ outputs.file(roseauCsvFile)
87+ .withPropertyName(" report" )
88+
89+ argumentProviders.add(CommandLineArgumentProvider {
90+ listOf (
91+ " --classpath" , configurations.compileClasspath.get().asPath,
92+ " --v1" , v1Jar.get().absolutePath,
93+ " --v2" , v2Jar.get().absolutePath,
94+ " --diff" ,
95+ " --report" , roseauCsvFile.get().asFile.absolutePath,
96+ )
97+ })
98+
99+ doFirst {
100+ roseauCsvFile.get().asFile.parentFile.mkdirs()
101+ }
102+ }
103+
104+ val japicmp by tasks.registering(JapicmpTask ::class ) {
105+ if (gradle.startParameter.isOffline) {
106+ enabled = false
107+ }
108+ onlyIf { extension.enabled.get() }
109+ shouldRunAfter(roseau)
110+
57111 oldClasspath.from(downloadPreviousReleaseJar.map { it.outputFiles })
58112 newClasspath.from(tasks.jar)
59113 onlyModified = true
@@ -73,6 +127,10 @@ val checkBackwardCompatibility by tasks.registering(JapicmpTask::class) {
73127 }
74128}
75129
130+ val checkBackwardCompatibility by tasks.registering {
131+ dependsOn(roseau, japicmp)
132+ }
133+
76134tasks.check {
77135 dependsOn(checkBackwardCompatibility)
78136}
@@ -81,7 +139,7 @@ afterEvaluate {
81139 val params = mapOf (
82140 " acceptedIncompatibilities" to extension.acceptedIncompatibilities.get().joinToString(" ," )
83141 )
84- checkBackwardCompatibility {
142+ japicmp {
85143 richReport {
86144 addViolationTransformer(AcceptedViolationSuppressor ::class .java, params)
87145 addPostProcessRule(AcceptedViolationsPostProcessRule ::class .java, params)
0 commit comments