From 465a06fc7970ef3baae428c187bfa8cadc328b27 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Fri, 11 Jul 2025 13:17:21 +0200 Subject: [PATCH 1/2] Try out roseau to analyze API changes between versions --- gradle/libs.versions.toml | 2 + gradle/plugins/common/build.gradle.kts | 1 + ...tbuild.java-library-conventions.gradle.kts | 1 + gradle/plugins/roseau/build.gradle.kts | 22 +++++++++ .../main/kotlin/junitbuild.roseau.gradle.kts | 46 +++++++++++++++++++ gradle/plugins/settings.gradle.kts | 1 + 6 files changed, 73 insertions(+) create mode 100644 gradle/plugins/roseau/build.gradle.kts create mode 100644 gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8ead394f36f6..abe67079ac48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -67,6 +67,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.1.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" } @@ -97,6 +98,7 @@ bnd = { id = "biz.aQute.bnd", version.ref = "bnd" } buildParameters = { id = "org.gradlex.build-parameters", version = "1.4.4" } commonCustomUserData = { id = "com.gradle.common-custom-user-data-gradle-plugin", version = "2.3" } develocity = { id = "com.gradle.develocity", version = "4.0.2" } +download = { id = "de.undercouch.download", version = "5.6.0" } errorProne = { id = "net.ltgt.errorprone", version = "4.3.0" } foojayResolver = { id = "org.gradle.toolchains.foojay-resolver", version = "1.0.0" } gitPublish = { id = "org.ajoberstar.git-publish", version = "5.1.1" } diff --git a/gradle/plugins/common/build.gradle.kts b/gradle/plugins/common/build.gradle.kts index 4b4ed22250a6..aa8211444374 100644 --- a/gradle/plugins/common/build.gradle.kts +++ b/gradle/plugins/common/build.gradle.kts @@ -8,6 +8,7 @@ plugins { dependencies { implementation("junitbuild.base:dsl-extensions") implementation(projects.buildParameters) + implementation(projects.roseau) implementation(libs.plugins.kotlin.markerCoordinates) implementation(libs.plugins.bnd.markerCoordinates) implementation(libs.plugins.commonCustomUserData.markerCoordinates) diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts index 4b5960dafc3a..64462738b5f4 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts @@ -67,6 +67,7 @@ if (project in mavenizedProjects) { apply(plugin = "junitbuild.publishing-conventions") apply(plugin = "junitbuild.osgi-conventions") + apply(plugin = "junitbuild.roseau") java { withJavadocJar() diff --git a/gradle/plugins/roseau/build.gradle.kts b/gradle/plugins/roseau/build.gradle.kts new file mode 100644 index 000000000000..fc57f7fa9f7e --- /dev/null +++ b/gradle/plugins/roseau/build.gradle.kts @@ -0,0 +1,22 @@ +import junitbuild.extensions.markerCoordinates +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 + +plugins { + `kotlin-dsl` +} + +tasks.compileJava { + options.release = 21 +} + +kotlin { + compilerOptions { + jvmTarget = JVM_21 + freeCompilerArgs.add("-Xjdk-release=21") + } +} + +dependencies { + implementation("junitbuild.base:dsl-extensions") + implementation(libs.plugins.download.markerCoordinates) +} diff --git a/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts b/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts new file mode 100644 index 000000000000..c3e8992dce64 --- /dev/null +++ b/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts @@ -0,0 +1,46 @@ +import de.undercouch.gradle.tasks.download.Download +import junitbuild.extensions.dependencyFromLibs + +plugins { + id("de.undercouch.download") + `java-library` +} + +// TODO make configurable +val previousVersion = if (group == "org.junit.platform") "1.13.3" else "5.13.3" + +val roseauDependencies = configurations.dependencyScope("roseau") +val roseauClasspath = configurations.resolvable("roseauClasspath") { + extendsFrom(roseauDependencies.get()) +} +dependencies { + roseauDependencies(dependencyFromLibs("roseau-cli")) +} + +val outputDir = layout.buildDirectory.dir("roseau") + +val downloadPreviousReleaseJar by tasks.registering(Download::class) { + src("https://repo1.maven.org/maven2/${project.group.toString().replace(".", "/")}/${project.name}/${previousVersion}/${project.name}-${previousVersion}.jar") + dest(outputDir) + overwrite(false) +} + +val roseauDiff by tasks.registering(JavaExec::class) { + dependsOn(downloadPreviousReleaseJar, tasks.jar) + javaLauncher = project.javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(21) // version required by roseau + } + mainClass = "io.github.alien.roseau.Roseau" + classpath = files(roseauClasspath) + argumentProviders.add(CommandLineArgumentProvider { + listOf( + "--classpath", configurations.compileClasspath.get().files.joinToString(":") { file -> file.absolutePath }, +// "--extractor", "SPOON", + "--v1", outputDir.get().file("${project.name}-${previousVersion}.jar").asFile.absolutePath, + "--v2", tasks.jar.get().archiveFile.get().asFile.absolutePath, + "--verbose", + "--diff", + "--report", outputDir.get().file("breaking-changes.csv").asFile.absolutePath, + ) + }) +} diff --git a/gradle/plugins/settings.gradle.kts b/gradle/plugins/settings.gradle.kts index bb41fd436361..bdee48b22509 100644 --- a/gradle/plugins/settings.gradle.kts +++ b/gradle/plugins/settings.gradle.kts @@ -23,5 +23,6 @@ include("build-parameters") include("common") include("code-generator") include("publishing") +include("roseau") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") From f629cbc9186c7d90876d5f60e5dfadd4fa177849 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Fri, 11 Jul 2025 20:08:04 +0200 Subject: [PATCH 2/2] Use version from Jitpack --- gradle/libs.versions.toml | 2 +- .../roseau/src/main/kotlin/junitbuild.roseau.gradle.kts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index abe67079ac48..35b3256ec20f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -67,7 +67,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.1.0" } +roseau-cli = { module = "com.github.alien-tools.roseau:roseau-cli", version = "aeff62a750" } 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" } diff --git a/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts b/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts index c3e8992dce64..1396b6b30194 100644 --- a/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts +++ b/gradle/plugins/roseau/src/main/kotlin/junitbuild.roseau.gradle.kts @@ -13,10 +13,16 @@ val roseauDependencies = configurations.dependencyScope("roseau") val roseauClasspath = configurations.resolvable("roseauClasspath") { extendsFrom(roseauDependencies.get()) } + dependencies { roseauDependencies(dependencyFromLibs("roseau-cli")) } +repositories { + mavenCentral() + maven(url = "https://jitpack.io") +} + val outputDir = layout.buildDirectory.dir("roseau") val downloadPreviousReleaseJar by tasks.registering(Download::class) { @@ -30,7 +36,7 @@ val roseauDiff by tasks.registering(JavaExec::class) { javaLauncher = project.javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(21) // version required by roseau } - mainClass = "io.github.alien.roseau.Roseau" + mainClass = "io.github.alien.roseau.cli.RoseauCLI" classpath = files(roseauClasspath) argumentProviders.add(CommandLineArgumentProvider { listOf(