From 34cd158043ef810f423681209868b93e31f574a4 Mon Sep 17 00:00:00 2001 From: hfhbd <22521688+hfhbd@users.noreply.github.com> Date: Mon, 20 Jul 2026 12:59:04 +0200 Subject: [PATCH 1/2] Support Isolated Projects: BuildServicesRegistry.getRegistrations.getByName is not allowed (anymore) Signed-off-by: hfhbd <22521688+hfhbd@users.noreply.github.com> --- .../kotlin/dev.sigstore.sign-base.gradle.kts | 19 +++++++-- .../sigstore/sign/SigstoreSignExtension.kt | 8 +--- .../sign/services/SigstoreSigningService.kt | 3 +- .../sign/tasks/SigstoreSignFilesTask.kt | 41 +++---------------- 4 files changed, 24 insertions(+), 47 deletions(-) diff --git a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts index 6bd71e952..a7b190f86 100644 --- a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts +++ b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts @@ -16,14 +16,15 @@ */ import dev.sigstore.sign.SigstoreSignExtension import dev.sigstore.sign.services.SigstoreSigningService +import dev.sigstore.sign.tasks.SigstoreSignFilesTask // https://github.com/gradle/gradle/pull/16627 inline fun AttributeContainer.attribute(attr: Attribute, value: String) = attribute(attr, objects.named(value)) -val sigstoreSign = extensions.create("sigstoreSign", SigstoreSignExtension::class, project) +val sigstoreSign = extensions.create("sigstoreSign", SigstoreSignExtension::class) -gradle.sharedServices.registerIfAbsent(SigstoreSigningService.SERVICE_NAME, SigstoreSigningService::class) { +val service = gradle.sharedServices.registerIfAbsent(SigstoreSigningService.SERVICE_NAME, SigstoreSigningService::class) { parameters { // Prevents concurrent execution of tasks that use the service, so we ensure there's only one signing task active at a time maxParallelUsages.set(1) @@ -41,7 +42,7 @@ val sigstoreClient = configurations.create("sigstoreClient") { } } -val sigstoreClientClasspath = configurations.create("sigstoreClientClasspath") { +val sigstoreClientClasspathConf = configurations.register("sigstoreClientClasspath") { description = "Resolves Sigstore dependencies" isCanBeResolved = true isCanBeConsumed = false @@ -54,3 +55,15 @@ val sigstoreClientClasspath = configurations.create("sigstoreClientClasspath") { attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, JavaVersion.current().majorVersion.toInt()) } } + +private val PROPERTY_SET_PROVIDER = Property::class.java.getMethod("set", Provider::class.java) + +tasks.withType().configureEach { + // Use reflection to resolve set(Provider) vs set(Object) ambiguity + // Needed, because Type is `Any` to workaround https://github.com/gradle/gradle/issues/17559 + PROPERTY_SET_PROVIDER.invoke(signingService, service) + // See https://docs.gradle.org/current/userguide/build_services.html + usesService(service) + + sigstoreClientClasspath.from(sigstoreClientClasspathConf) +} diff --git a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/SigstoreSignExtension.kt b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/SigstoreSignExtension.kt index 389357be6..11da31997 100644 --- a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/SigstoreSignExtension.kt +++ b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/SigstoreSignExtension.kt @@ -17,29 +17,25 @@ package dev.sigstore.sign import dev.sigstore.sign.tasks.SigstoreSignFilesTask -import org.gradle.api.Action import org.gradle.api.DefaultTask import org.gradle.api.DomainObjectCollection import org.gradle.api.Project -import org.gradle.api.plugins.ExtensionAware import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.publish.Publication import org.gradle.api.publish.PublicationArtifact import org.gradle.api.publish.internal.PublicationInternal -import org.gradle.api.publish.maven.MavenArtifact import org.gradle.api.publish.maven.internal.artifact.AbstractMavenArtifact import org.gradle.api.publish.maven.internal.artifact.DerivedMavenArtifact -import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.named import org.gradle.kotlin.dsl.register -import org.gradle.kotlin.dsl.the import org.gradle.kotlin.dsl.withType import org.gradle.plugins.signing.Sign import org.gradle.util.GradleVersion +import javax.inject.Inject import kotlin.collections.set -abstract class SigstoreSignExtension(private val project: Project) { +abstract class SigstoreSignExtension @Inject constructor (private val project: Project) { private val Publication.signingTaskName: String get() = "sigstoreSign${name.titlecase()}Publication" diff --git a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/services/SigstoreSigningService.kt b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/services/SigstoreSigningService.kt index 648ff9977..89c5bbaea 100644 --- a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/services/SigstoreSigningService.kt +++ b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev/sigstore/sign/services/SigstoreSigningService.kt @@ -28,6 +28,5 @@ abstract class SigstoreSigningService: BuildService = - project.gradle.sharedServices.registrations[SigstoreSigningService.SERVICE_NAME].service as Provider - - // Use reflection to resolve set(Provider) vs set(Object) ambiguity - @Suppress("LeakingThis") - PROPERTY_SET_PROVIDER.invoke(signingService, service) - // See https://docs.gradle.org/current/userguide/build_services.html - @Suppress("LeakingThis") - usesService(service) - } /** * Signing service is there so none of the signing tasks execute concurrently. @@ -67,20 +47,13 @@ abstract class SigstoreSignFilesTask : DefaultTask() { * Type is `Any` to workaround https://github.com/gradle/gradle/issues/17559 */ @get:Internal - protected abstract val signingService: Property - - @Nested - val signatures: NamedDomainObjectContainer = - objects.domainObjectContainer(SigstoreSignature::class.java) { - objects.newInstance( - SigstoreSignature::class.java, - it, - ) - } + internal abstract val signingService: Property + + @get:Nested + abstract val signatures: NamedDomainObjectContainer @get:Classpath - @get:InputFiles - protected abstract val sigstoreClientClasspath: ConfigurableFileCollection + abstract val sigstoreClientClasspath: ConfigurableFileCollection @get:Internal abstract val signatureDirectory: DirectoryProperty @@ -95,9 +68,6 @@ abstract class SigstoreSignFilesTask : DefaultTask() { @get:Inject protected abstract val providers: ProviderFactory - @get:Inject - protected abstract val objects: ObjectFactory - @get:Inject protected abstract val layout: ProjectLayout @@ -109,7 +79,6 @@ abstract class SigstoreSignFilesTask : DefaultTask() { outputs.cacheIf("Sigstore signatures are true-timestamp dependent, so we should not cache signatures") { false } - sigstoreClientClasspath.from(project.configurations["sigstoreClientClasspath"]) signatureDirectory.convention( layout.buildDirectory.dir("sigstore/$name") ) From b4b7c37d505e96ffa2a319f35b3ccf448668cec6 Mon Sep 17 00:00:00 2001 From: hfhbd <22521688+hfhbd@users.noreply.github.com> Date: Mon, 20 Jul 2026 13:48:27 +0200 Subject: [PATCH 2/2] Support Isolated Projects: BuildServicesRegistry.getRegistrations.getByName is not allowed (anymore) Signed-off-by: hfhbd <22521688+hfhbd@users.noreply.github.com> --- .../src/main/kotlin/dev.sigstore.sign-base.gradle.kts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts index a7b190f86..8b27669db 100644 --- a/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts +++ b/sigstore-gradle/sigstore-gradle-sign-base-plugin/src/main/kotlin/dev.sigstore.sign-base.gradle.kts @@ -56,13 +56,9 @@ val sigstoreClientClasspathConf = configurations.register("sigstoreClientClasspa } } -private val PROPERTY_SET_PROVIDER = Property::class.java.getMethod("set", Provider::class.java) - tasks.withType().configureEach { - // Use reflection to resolve set(Provider) vs set(Object) ambiguity - // Needed, because Type is `Any` to workaround https://github.com/gradle/gradle/issues/17559 - PROPERTY_SET_PROVIDER.invoke(signingService, service) // See https://docs.gradle.org/current/userguide/build_services.html + signingService.set(service) usesService(service) sigstoreClientClasspath.from(sigstoreClientClasspathConf)