From c3650fa5382f20228e8e009d0f9c7d2c23c1eaa5 Mon Sep 17 00:00:00 2001 From: Tony Robalik Date: Sat, 18 Apr 2026 22:35:40 -0700 Subject: [PATCH] chore: publishing doesn't trip over configuration cache. Can only test it during publication. --- .../com/autonomousapps/convention/DagpExtension.kt | 6 +++--- .../convention/PluginConventionPlugin.kt | 13 +++++++++++++ build.gradle.kts | 14 +++++++++----- testkit/gradle-testkit-plugin/build.gradle.kts | 12 ++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/DagpExtension.kt b/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/DagpExtension.kt index 6803e1752..13e32c0f4 100644 --- a/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/DagpExtension.kt +++ b/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/DagpExtension.kt @@ -70,11 +70,11 @@ public abstract class DagpExtension( } project.tasks.named("publishToMavenCentral") { t -> - t.notCompatibleWithConfigurationCache("Cannot serialize object of type DefaultProject") - t.inputs.property("is-snapshot", isSnapshot) + val key = "is-snapshot" + t.inputs.property(key, isSnapshot) t.doLast { - if (isSnapshot.get()) { + if ((t.inputs.properties[key] as Boolean)) { t.logger.quiet("Browse files at https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/com/autonomousapps/") } else { t.logger.quiet( diff --git a/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/PluginConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/PluginConventionPlugin.kt index b4ba6fcdf..679658dd4 100644 --- a/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/PluginConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/com/autonomousapps/convention/PluginConventionPlugin.kt @@ -3,6 +3,7 @@ package com.autonomousapps.convention import com.autonomousapps.convention.internal.kotlin.KotlinConfigurer +import com.gradle.publish.PublishTask import com.vanniktech.maven.publish.GradlePublishPlugin import com.vanniktech.maven.publish.MavenPublishBaseExtension import org.gradle.api.Plugin @@ -28,6 +29,9 @@ public abstract class PluginConventionPlugin : Plugin { configureKotlin() configurePlugins() configurePublishing() + + // TODO(tsr): figure out this CC issue. +// disableConfigurationCache() } private fun Project.configureGroovy(versionCatalog: VersionCatalog) { @@ -58,4 +62,13 @@ public abstract class PluginConventionPlugin : Plugin { configure(GradlePublishPlugin()) } } + + private fun Project.disableConfigurationCache() { + tasks.withType(PublishTask::class.java).configureEach { t -> + t.notCompatibleWithConfigurationCache("cannot serialize Gradle script object references as these are not supported with the configuration cache.") + } +// tasks.withType(org.gradle.api.publish.maven.tasks.AbstractPublishToMaven::class.java) { t -> +// t.notCompatibleWithConfigurationCache("Various problems") +// } + } } diff --git a/build.gradle.kts b/build.gradle.kts index f07d10dc2..a66c4ae91 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ -import org.gradle.plugin.compatibility.compatibility - // Copyright (c) 2026. Tony Robalik. // SPDX-License-Identifier: Apache-2.0 +import org.gradle.plugin.compatibility.compatibility + plugins { id("build-logic.plugin") id("groovy") @@ -15,7 +15,7 @@ plugins { val VERSION: String by project version = VERSION -val isSnapshot: Boolean = project.version.toString().endsWith("SNAPSHOT") +val isSnapshot: Boolean = version.toString().endsWith("SNAPSHOT") val isRelease: Boolean = !isSnapshot dagp { @@ -319,10 +319,14 @@ val publishToMavenCentral = tasks.named("publishToMavenCentral") { } val publishToPluginPortal = tasks.named("publishPlugins") { + val key = "is-release" + inputs.property(key, isRelease) // Can't publish snapshots to the portal - onlyIf("only publish releases to the plugin portal") { isRelease } - shouldRunAfter(publishToMavenCentral) + onlyIf("only publish releases to the plugin portal") { + inputs.properties[key] as Boolean + } + shouldRunAfter(publishToMavenCentral) configureForRelease() } diff --git a/testkit/gradle-testkit-plugin/build.gradle.kts b/testkit/gradle-testkit-plugin/build.gradle.kts index 7052f5707..2e9f15542 100644 --- a/testkit/gradle-testkit-plugin/build.gradle.kts +++ b/testkit/gradle-testkit-plugin/build.gradle.kts @@ -1,8 +1,7 @@ -import org.gradle.kotlin.dsl.assign -import org.gradle.plugin.compatibility.compatibility - // Copyright (c) 2026. Tony Robalik. // SPDX-License-Identifier: Apache-2.0 +import org.gradle.plugin.compatibility.compatibility + plugins { id("build-logic.plugin") id("com.github.gmazzo.buildconfig") @@ -80,8 +79,13 @@ val publishToMavenCentral = tasks.named("publishToMavenCentral") { } val publishToPluginPortal = tasks.named("publishPlugins") { + val key = "is-release" + inputs.property(key, isRelease) // Can't publish snapshots to the portal - onlyIf { isRelease } + onlyIf("only publish releases to the plugin portal") { + inputs.properties[key] as Boolean + } + shouldRunAfter(publishToMavenCentral) // Note that publishing a release requires a successful smokeTest