From 87f77543e2fb3525acdfa397b5d8c483e4db1599 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 5 Nov 2023 13:39:52 +0600 Subject: [PATCH] fix of sign script generation --- .../core/export/GpgSignMavenConfig.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/core/src/commonMain/kotlin/dev/inmo/kmppscriptbuilder/core/export/GpgSignMavenConfig.kt b/core/src/commonMain/kotlin/dev/inmo/kmppscriptbuilder/core/export/GpgSignMavenConfig.kt index 908773d..7622dbf 100644 --- a/core/src/commonMain/kotlin/dev/inmo/kmppscriptbuilder/core/export/GpgSignMavenConfig.kt +++ b/core/src/commonMain/kotlin/dev/inmo/kmppscriptbuilder/core/export/GpgSignMavenConfig.kt @@ -26,6 +26,23 @@ if (project.hasProperty("signing.gnupg.keyName")) { def signingTasks = project.getTasks().withType(Sign.class) mustRunAfter(signingTasks) } + // Workaround to make test tasks use sign + project.getTasks().withType(Sign.class).configureEach { signTask -> + def withoutSign = (signTask.name.startsWith("sign") ? signTask.name.minus("sign") : signTask.name) + def pubName = withoutSign.endsWith("Publication") ? withoutSign.substring(0, withoutSign.length() - "Publication".length()) : withoutSign + // These tasks only exist for native targets, hence findByName() to avoid trying to find them for other targets + + // Task ':linkDebugTest' uses this output of task ':signPublication' without declaring an explicit or implicit dependency + def debugTestTask = tasks.findByName("linkDebugTest${'$'}pubName") + if (debugTestTask != null) { + signTask.mustRunAfter(debugTestTask) + } + // Task ':compileTestKotlin' uses this output of task ':signPublication' without declaring an explicit or implicit dependency + def testTask = tasks.findByName("compileTestKotlin${'$'}pubName") + if (testTask != null) { + signTask.mustRunAfter(testTask) + } + } } """ GpgSigning.Enabled -> @@ -43,5 +60,28 @@ task signAll { dependsOn(it) } } + +// Workaround to make android sign operations depend on signing tasks +project.getTasks().withType(AbstractPublishToMaven.class).configureEach { + def signingTasks = project.getTasks().withType(Sign.class) + mustRunAfter(signingTasks) +} +// Workaround to make test tasks use sign +project.getTasks().withType(Sign.class).configureEach { signTask -> + def withoutSign = (signTask.name.startsWith("sign") ? signTask.name.minus("sign") : signTask.name) + def pubName = withoutSign.endsWith("Publication") ? withoutSign.substring(0, withoutSign.length() - "Publication".length()) : withoutSign + // These tasks only exist for native targets, hence findByName() to avoid trying to find them for other targets + + // Task ':linkDebugTest' uses this output of task ':signPublication' without declaring an explicit or implicit dependency + def debugTestTask = tasks.findByName("linkDebugTest${'$'}pubName") + if (debugTestTask != null) { + signTask.mustRunAfter(debugTestTask) + } + // Task ':compileTestKotlin' uses this output of task ':signPublication' without declaring an explicit or implicit dependency + def testTask = tasks.findByName("compileTestKotlin${'$'}pubName") + if (testTask != null) { + signTask.mustRunAfter(testTask) + } +} """ }