Skip to content

use a complicated arrangement of feature-variants, compiledWith, and … #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package buildsrc.conventions

plugins {
id("org.gradle.kotlin.kotlin-dsl")
}

val java = extensions.getByType<JavaPluginExtension>()

extensions.configure<SourceSetContainer> {
//sourceSets {
val mainBuildPlugin by creating {
kotlin { srcDir("src/mainBuildPlugin/kotlin") }
java { srcDirs(emptyList<File>()) }
}
java.registerFeature(mainBuildPlugin.name) {
usingSourceSet(mainBuildPlugin)
withJavadocJar()
withSourcesJar()
project.run {
capability(group.toString(), name.replace("-plugin", "-build-plugin"), version.toString())
}
}
val mainSettingsPlugin by creating {
kotlin { srcDir("src/mainSettingsPlugin/kotlin") }
java { srcDirs(emptyList<File>()) }
}
java.registerFeature(mainSettingsPlugin.name) {
usingSourceSet(mainSettingsPlugin)
withJavadocJar()
withSourcesJar()
project.run {
capability(group.toString(), name.replace("-plugin", "-settings-plugin"), version.toString())
}
}
}

////extensions.configure<org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension> {
//kotlin {
// target {
// val mainCompilation = compilations.named("main")
// compilations
// .matching {
// it.name == "mainBuildPlugin" || it.name == "mainSettingsPlugin"
// }
// .configureEach {
// associateWith(mainCompilation.get())
// }
// }
//}

plugins.withType<MavenPublishPlugin>().configureEach {
extensions.configure<PublishingExtension> {
publications.withType<MavenPublication>().configureEach {
// disable warning because this project doesn't need to be resolvable by Maven
// > Maven publication 'pluginMaven' pom metadata warnings (silence with 'suppressPomMetadataWarningsFor(variant)'):
// > - Variant mainBuildPluginApiElements:
// > - Declares capability dev.adamko.kotlin.binary_compatibility_validator:bcv-gradle-build-plugin:main-SNAPSHOT which cannot be mapped to Maven
suppressPomMetadataWarningsFor("pluginMaven")
suppressPomMetadataWarningsFor("mainBuildPlugin")
suppressPomMetadataWarningsFor("mainSettingsPlugin")

suppressPomMetadataWarningsFor("mainBuildPluginApiElements")
suppressPomMetadataWarningsFor("mainBuildPluginJavadocElements")
suppressPomMetadataWarningsFor("mainBuildPluginRuntimeElements")
suppressPomMetadataWarningsFor("mainBuildPluginSourcesElements")
suppressPomMetadataWarningsFor("mainSettingsPluginApiElements")
suppressPomMetadataWarningsFor("mainSettingsPluginJavadocElements")
suppressPomMetadataWarningsFor("mainSettingsPluginRuntimeElements")
suppressPomMetadataWarningsFor("mainSettingsPluginSourcesElements")
}
}
}
9 changes: 2 additions & 7 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx4g -XX:+HeapDumpOnOutOfMemoryError

org.gradle.caching=true

org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache-problems=warn

org.gradle.configuration-cache=true
org.gradle.configuration-cache-problems=warn
org.gradle.parallel=true
org.gradle.welcome=never

# https://github.com/gradle/gradle/issues/9268#issuecomment-1397116301
systemProp.org.gradle.unsafe.kotlin.assignment=true
8 changes: 4 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]

kotlinGradle = "1.6.0"
kotlinGradle = "1.9.21"

javaDiffUtils = "4.12"
junit = "5.9.3"
Expand All @@ -10,7 +10,7 @@ kotlinx-bcv = "0.13.2"
gradlePluginPublishPlugin = "1.2.1"
shadowPlugin = "8.1.1"
devPublish = "0.2.0"
bcvMu = "0.0.3"
bcvMu = "0.1.0"
#bcvMu = "0.2.0-SNAPSHOT"

supportedGradleVersion = "7.6" # the minimal supported Gradle plugin version, used in functional tests
Expand All @@ -19,8 +19,8 @@ supportedGradleVersion = "7.6" # the minimal supported Gradle plugin version, us

javaDiffUtils = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "javaDiffUtils" }
kotlinx-bcv = { module = "org.jetbrains.kotlinx:binary-compatibility-validator", version.ref = "kotlinx-bcv" }
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlinGradle" }
kotlin-gradlePluginApi = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api", version.ref = "kotlinGradle" }
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin" }
kotlin-gradlePluginApi = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api" }

## region Test Libraries
kotest-bom = { module = "io.kotest:kotest-bom", version.ref = "kotest" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ private fun kotlinMultiplatformProjectWithBcvSettingsPlugin() =
private val settingsGradleKtsWithBcvPlugin = """
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.7.20")
//classpath("org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.7.20")
}
}

Expand Down Expand Up @@ -176,7 +176,7 @@ binaryCompatibilityValidator {
@Language("kts")
private val buildGradleKtsWithKotlinJvmAndBcvConfig = """
plugins {
kotlin("jvm") version "1.7.20"
kotlin("jvm") version "1.9.21"
}

// check that the DSL is available:
Expand All @@ -190,7 +190,7 @@ binaryCompatibilityValidator { }
@Language("kts")
private val buildGradleKtsWithKotlinMultiplatformJvmAndBcvConfig = """
plugins {
kotlin("multiplatform") version "1.7.20"
kotlin("multiplatform") version "1.9.21"
}

kotlin {
Expand Down
32 changes: 3 additions & 29 deletions modules/bcv-gradle-plugin/api/bcv-gradle-plugin.api
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVPlugin
public static final field API_DIR Ljava/lang/String;
public static final field API_DUMP_TASK_NAME Ljava/lang/String;
public static final field API_GENERATE_TASK_NAME Ljava/lang/String;
public static final field BCV_PROJECT_PLUGIN_ID Ljava/lang/String;
public static final field BCV_SETTINGS_PLUGIN_ID Ljava/lang/String;
public static final field Companion Ldev/adamko/kotlin/binary_compatibility_validator/BCVPlugin$Companion;
public static final field EXTENSION_NAME Ljava/lang/String;
public static final field RUNTIME_CLASSPATH_CONFIGURATION_NAME Ljava/lang/String;
Expand Down Expand Up @@ -30,30 +32,7 @@ public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVProjec
public final fun getTargets ()Lorg/gradle/api/NamedDomainObjectContainer;
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVProjectPlugin : org/gradle/api/Plugin {
public static final field Companion Ldev/adamko/kotlin/binary_compatibility_validator/BCVProjectPlugin$Companion;
public synthetic fun apply (Ljava/lang/Object;)V
public fun apply (Lorg/gradle/api/Project;)V
}

public final class dev/adamko/kotlin/binary_compatibility_validator/BCVProjectPlugin$Companion {
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin : org/gradle/api/Plugin {
public synthetic fun apply (Ljava/lang/Object;)V
public fun apply (Lorg/gradle/api/initialization/Settings;)V
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$Extension {
public fun <init> (Ldev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec;)V
public final fun defaultTargetValues (Lkotlin/jvm/functions/Function1;)V
public final fun getDefaultTargetValues ()Ldev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec;
public abstract fun getIgnoredProjects ()Lorg/gradle/api/provider/SetProperty;
}

public final class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$apply$1$inlined$sam$i$org_gradle_api_Action$0 : org/gradle/api/Action {
public fun <init> (Lkotlin/jvm/functions/Function1;)V
public final synthetic fun execute (Ljava/lang/Object;)V
public abstract interface annotation class dev/adamko/kotlin/binary_compatibility_validator/internal/BCVInternalApi : java/lang/annotation/Annotation {
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTarget : dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec, java/io/Serializable, org/gradle/api/Named {
Expand Down Expand Up @@ -112,8 +91,3 @@ public abstract class dev/adamko/kotlin/binary_compatibility_validator/tasks/BCV
public final class dev/adamko/kotlin/binary_compatibility_validator/workers/BCVSignaturesWorker$Companion {
}

public final class org/gradle/kotlin/dsl/BcvGradleDslAccessorsKt {
public static final fun binaryCompatibilityValidator (Lorg/gradle/api/initialization/Settings;Lkotlin/jvm/functions/Function1;)V
public static final fun getBinaryCompatibilityValidator (Lorg/gradle/api/initialization/Settings;)Ldev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$Extension;
}

54 changes: 53 additions & 1 deletion modules/bcv-gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask

plugins {
buildsrc.conventions.`kotlin-gradle-plugin`
buildsrc.conventions.`gradle-plugin-bcv-features`
id("dev.adamko.dev-publish")
`java-test-fixtures`
//com.github.johnrengelman.shadow
Expand All @@ -15,10 +16,40 @@ plugins {
dependencies {
implementation(libs.javaDiffUtils)

runtimeOnly(projects.modules.bcvGradlePlugin) {
capabilities {
requireCapability("${project.group}:${project.name.replace("-plugin", "-build-plugin")}")
}
}
runtimeOnly(projects.modules.bcvGradlePlugin) {
capabilities {
requireCapability("${project.group}:${project.name.replace("-plugin", "-settings-plugin")}")
}
}

compileOnly(libs.kotlinx.bcv)
// compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.kotlin.gradlePluginApi)

mainBuildPluginCompileOnly(gradleApi())
mainBuildPluginCompileOnly(libs.kotlin.gradlePluginApi) {
version {
prefer(embeddedKotlinVersion)
// prefer(libs.versions.kotlinGradle.get())
}
}
mainBuildPluginCompileOnly(gradleKotlinDsl())
mainBuildPluginImplementation(project)

mainSettingsPluginCompileOnly(gradleApi())
mainSettingsPluginCompileOnly(gradleKotlinDsl())
mainSettingsPluginImplementation(project)
mainSettingsPluginImplementation(libs.kotlin.gradlePluginApi) {
version {
prefer(embeddedKotlinVersion)
// prefer(libs.versions.kotlinGradle.get())
}
}

testFixturesApi(gradleTestKit())

testFixturesApi(platform(libs.junit.bom))
Expand All @@ -30,6 +61,27 @@ dependencies {
testFixturesApi(libs.kotest.property)
}

//configurations.mainBuildPluginRuntimeClasspath {
// extendsFrom(configurations.runtimeClasspath.get())
//}
//
//configurations.mainSettingsPluginRuntimeClasspath {
// extendsFrom(configurations.runtimeClasspath.get())
//}

kotlin {
target {
val mainCompilation = compilations.named("main")
compilations
.matching {
it.name == "mainBuildPlugin" || it.name == "mainSettingsPlugin"
}
.configureEach {
associateWith(mainCompilation.get())
}
}
}

@Suppress("UnstableApiUsage")
gradlePlugin {
website = "https://github.com/adamko-dev/kotlin-binary-compatibility-validator-mu"
Expand Down
7 changes: 5 additions & 2 deletions modules/bcv-gradle-plugin/src/main/kotlin/BCVPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ abstract class BCVPlugin
constructor() : Plugin<PluginAware> {
override fun apply(target: PluginAware) {
when (target) {
is Project -> target.pluginManager.apply(BCVProjectPlugin::class)
is Settings -> target.pluginManager.apply(BCVSettingsPlugin::class)
is Project -> target.pluginManager.apply(BCV_PROJECT_PLUGIN_ID)
is Settings -> target.pluginManager.apply(BCV_SETTINGS_PLUGIN_ID)
else -> error("cannot apply BCVPlugin to ${target::class}")
}
}
Expand All @@ -29,5 +29,8 @@ constructor() : Plugin<PluginAware> {
const val API_CHECK_TASK_NAME = "apiCheck"
const val API_DUMP_TASK_NAME = "apiDump"
const val API_GENERATE_TASK_NAME = "apiGenerate"

const val BCV_PROJECT_PLUGIN_ID = "dev.adamko.kotlin.binary-compatibility-validator.project"
const val BCV_SETTINGS_PLUGIN_ID = "dev.adamko.kotlin.binary-compatibility-validator.settings"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ import kotlin.annotation.AnnotationTarget.*
CONSTRUCTOR,
)
@MustBeDocumented
internal annotation class BCVInternalApi
annotation class BCVInternalApi
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
package dev.adamko.kotlin.binary_compatibility_validator.internal

import org.gradle.api.Project
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.kotlin.dsl.*


internal val Project.sourceSets: SourceSetContainer
get() = extensions.getByType()
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.adamko.kotlin.binary_compatibility_validator.internal

import org.gradle.api.Project
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.kotlin.dsl.*


internal val Project.sourceSets: SourceSetContainer
get() = extensions.getByType()
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.adamko.kotlin.binary_compatibility_validator

import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.BCV_PROJECT_PLUGIN_ID
import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import dev.adamko.kotlin.binary_compatibility_validator.internal.globToRegex
import dev.adamko.kotlin.binary_compatibility_validator.targets.BCVTargetSpec
Expand Down Expand Up @@ -39,12 +40,14 @@ constructor(
globToRegex(it, Project.PATH_SEPARATOR).matches(project.path)
}
) {
project.pluginManager.apply(BCVProjectPlugin::class)
project.extensions.configure<BCVProjectExtension> {
enabled.convention(extension.defaultTargetValues.enabled)
ignoredClasses.convention(extension.defaultTargetValues.ignoredClasses)
ignoredMarkers.convention(extension.defaultTargetValues.ignoredMarkers)
ignoredPackages.convention(extension.defaultTargetValues.ignoredPackages)
project.pluginManager.apply(BCV_PROJECT_PLUGIN_ID)
project.pluginManager.withPlugin(BCV_PROJECT_PLUGIN_ID) {
project.extensions.configure<BCVProjectExtension> {
enabled.convention(extension.defaultTargetValues.enabled)
ignoredClasses.convention(extension.defaultTargetValues.ignoredClasses)
ignoredMarkers.convention(extension.defaultTargetValues.ignoredMarkers)
ignoredPackages.convention(extension.defaultTargetValues.ignoredPackages)
}
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ val gitVersion: Provider<String> =

if (!detached) {
"$branch-SNAPSHOT"
// control chars and slashes aren't allowed in Maven Versions
.map { c -> if (c.isISOControl() || c == '/' || c == '\\') "_" else c }
.joinToString("")
} else {
val descriptions = described.split("-")
val head = descriptions.singleOrNull() ?: ""
Expand Down