Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ openTestReporting-events = { module = "org.opentest4j.reporting:open-test-report
openTestReporting-tooling-core = { module = "org.opentest4j.reporting:open-test-reporting-tooling-core", version.ref = "openTestReporting" }
openTestReporting-tooling-spi = { module = "org.opentest4j.reporting:open-test-reporting-tooling-spi", version.ref = "openTestReporting" }
picocli = { module = "info.picocli:picocli", version = "4.7.7" }
roseau-cli = { module = "io.github.alien-tools:roseau-cli", version = "0.3.0" }
slf4j-julBinding = { module = "org.slf4j:slf4j-jdk14", version = "2.0.17" }
snapshotTests-junit5 = { module = "de.skuzzle.test:snapshot-tests-junit5", version.ref = "snapshotTests" }
snapshotTests-xml = { module = "de.skuzzle.test:snapshot-tests-xml", version.ref = "snapshotTests" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@

import de.undercouch.gradle.tasks.download.Download
import junitbuild.compatibility.BackwardCompatibilityChecksExtension
import junitbuild.compatibility.japicmp.AcceptedViolationSuppressor
import junitbuild.compatibility.japicmp.AcceptedViolationsPostProcessRule
import junitbuild.compatibility.japicmp.BreakingSuperClassChangeRule
import junitbuild.compatibility.japicmp.InternalApiFilter
import junitbuild.compatibility.japicmp.SourceIncompatibleRule
import junitbuild.extensions.dependencyFromLibs
import junitbuild.extensions.javaModuleName
import junitbuild.japicmp.AcceptedViolationSuppressor
import junitbuild.japicmp.AcceptedViolationsPostProcessRule
import junitbuild.japicmp.BreakingSuperClassChangeRule
import junitbuild.japicmp.InternalApiFilter
import junitbuild.japicmp.JApiCmpExtension
import junitbuild.japicmp.SourceIncompatibleRule
import me.champeau.gradle.japicmp.JapicmpTask
import me.champeau.gradle.japicmp.report.stdrules.BinaryIncompatibleRule
import me.champeau.gradle.japicmp.report.stdrules.RecordSeenMembersSetup
Expand All @@ -16,7 +18,15 @@ plugins {
id("me.champeau.gradle.japicmp")
}

val extension = extensions.create<JApiCmpExtension>("japicmp").apply {
val roseauDependencies = configurations.dependencyScope("roseau")
val roseauClasspath = configurations.resolvable("roseauClasspath") {
extendsFrom(roseauDependencies.get())
}
dependencies {
roseauDependencies(dependencyFromLibs("roseau-cli"))
}

val extension = extensions.create<BackwardCompatibilityChecksExtension>("backwardCompatibilityChecks").apply {
enabled.convention(true)
acceptedIncompatibilities.apply {
val acceptedBreakingChangesFile = rootProject.layout.projectDirectory.file("gradle/config/japicmp/accepted-breaking-changes.txt")
Expand Down Expand Up @@ -48,11 +58,58 @@ val downloadPreviousReleaseJar by tasks.registering(Download::class) {
outputs.cacheIf { true }
}

val checkBackwardCompatibility by tasks.registering(JapicmpTask::class) {
val roseauCsvFile = layout.buildDirectory.file("reports/roseau/breaking-changes.csv")

val roseau by tasks.registering(JavaExec::class) {
if (gradle.startParameter.isOffline) {
enabled = false
}
onlyIf { extension.enabled.get() }

mainClass = "io.github.alien.roseau.cli.RoseauCLI"
classpath = files(roseauClasspath)

inputs.files(configurations.compileClasspath)
.withNormalizer(CompileClasspathNormalizer::class)
.withPropertyName("apiClasspath")

val v1Jar = downloadPreviousReleaseJar.map { it.outputFiles.single() }
inputs.file(v1Jar)
.withNormalizer(CompileClasspathNormalizer::class)
.withPropertyName("v1")

val v2Jar = tasks.jar.flatMap { it.archiveFile }.map { it.asFile }
inputs.file(v2Jar)
.withNormalizer(CompileClasspathNormalizer::class)
.withPropertyName("v2")

outputs.file(roseauCsvFile)
.withPropertyName("report")

argumentProviders.add(CommandLineArgumentProvider {
val args = listOf(
"--classpath", configurations.compileClasspath.get().asPath,
"--v1", v1Jar.get().absolutePath,
"--v2", v2Jar.get().absolutePath,
"--diff",
"--report", roseauCsvFile.get().asFile.absolutePath,
)
println(args)
args
})

doFirst {
roseauCsvFile.get().asFile.parentFile.mkdirs()
}
}

val japicmp by tasks.registering(JapicmpTask::class) {
if (gradle.startParameter.isOffline) {
enabled = false
}
onlyIf { extension.enabled.get() }
shouldRunAfter(roseau)

oldClasspath.from(downloadPreviousReleaseJar.map { it.outputFiles })
newClasspath.from(tasks.jar)
onlyModified = true
Expand All @@ -72,6 +129,10 @@ val checkBackwardCompatibility by tasks.registering(JapicmpTask::class) {
}
}

val checkBackwardCompatibility by tasks.registering {
dependsOn(roseau, japicmp)
}

tasks.check {
dependsOn(checkBackwardCompatibility)
}
Expand All @@ -80,7 +141,7 @@ afterEvaluate {
val params = mapOf(
"acceptedIncompatibilities" to extension.acceptedIncompatibilities.get().joinToString(",")
)
checkBackwardCompatibility {
japicmp {
richReport {
addViolationTransformer(AcceptedViolationSuppressor::class.java, params)
addPostProcessRule(AcceptedViolationsPostProcessRule::class.java, params)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package junitbuild.japicmp
package junitbuild.compatibility

import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty

abstract class JApiCmpExtension {
abstract class BackwardCompatibilityChecksExtension {

abstract val enabled: Property<Boolean>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import japicmp.model.JApiBehavior
import japicmp.model.JApiClass
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import me.champeau.gradle.japicmp.report.PostProcessViolationsRule
import me.champeau.gradle.japicmp.report.Severity.accepted
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import japicmp.model.JApiCompatibility
import me.champeau.gradle.japicmp.report.Violation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import japicmp.filter.BehaviorFilter
import japicmp.filter.ClassFilter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import japicmp.model.JApiBehavior
import japicmp.model.JApiClass
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package junitbuild.japicmp
package junitbuild.compatibility.japicmp

import japicmp.model.JApiCompatibility
import me.champeau.gradle.japicmp.report.Violation
Expand Down
2 changes: 1 addition & 1 deletion gradle/plugins/common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
dependencies {
implementation("junitbuild.base:dsl-extensions")
implementation(projects.buildParameters)
implementation(projects.japicmp)
implementation(projects.backwardCompatibility)
implementation(libs.plugins.kotlin.markerCoordinates)
implementation(libs.plugins.bnd.markerCoordinates)
implementation(libs.plugins.commonCustomUserData.markerCoordinates)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import junitbuild.japicmp.JApiCmpExtension
import junitbuild.compatibility.BackwardCompatibilityChecksExtension

plugins {
id("junitbuild.java-library-conventions")
Expand All @@ -10,6 +10,6 @@ tasks.javadoc {
enabled = false
}

the<JApiCmpExtension>().apply {
the<BackwardCompatibilityChecksExtension>().apply {
enabled = false // already checked by individual projects
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ if (project in mavenizedProjects) {
apply(plugin = "junitbuild.javadoc-conventions")
apply(plugin = "junitbuild.publishing-conventions")
apply(plugin = "junitbuild.osgi-conventions")
apply(plugin = "junitbuild.japicmp")
apply(plugin = "junitbuild.backward-compatibility")

java {
withSourcesJar()
Expand Down
2 changes: 1 addition & 1 deletion gradle/plugins/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ dependencyResolutionManagement {

rootProject.name = "plugins"

include("backward-compatibility")
include("build-parameters")
include("common")
include("code-generator")
include("japicmp")
include("publishing")

enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
2 changes: 1 addition & 1 deletion junit-jupiter-api/junit-jupiter-api.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ tasks {
compileJava {
options.compilerArgs.add("-Xlint:-module") // due to qualified exports
}
checkBackwardCompatibility {
japicmp {
classExcludes.addAll($$"*.AssertionsKt$assert*", $$"*.AssertionsKt$evaluate*")
}
jar {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ dependencies {
osgiVerification(libs.openTestReporting.tooling.spi)
}

japicmp {
backwardCompatibilityChecks {
enabled = false // already checked by individual projects
}

Expand Down
Loading