[Gradle] Fix issues with EmbedAndSignUsedWithPodDependencies diagnostic
Emit diagnostic right after task graph had been formed instead of waiting for embedAndSign execution (^KT-66445,^KT-66446) Verification Pending
This commit is contained in:
committed by
Space Team
parent
9851ff1905
commit
06960394b7
+50
@@ -21,8 +21,13 @@ import org.jetbrains.kotlin.gradle.util.runProcess
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.condition.OS
|
||||
import org.junit.jupiter.api.extension.ExtensionContext
|
||||
import org.junit.jupiter.api.io.TempDir
|
||||
import org.junit.jupiter.params.ParameterizedTest
|
||||
import org.junit.jupiter.params.provider.Arguments
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource
|
||||
import java.nio.file.Path
|
||||
import java.util.stream.Stream
|
||||
import java.util.zip.ZipFile
|
||||
import kotlin.io.path.*
|
||||
import kotlin.test.assertContains
|
||||
@@ -1059,6 +1064,51 @@ class CocoaPodsIT : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
internal class GradleAndIsStaticArgumentsProvider : GradleArgumentsProvider() {
|
||||
override fun provideArguments(context: ExtensionContext): Stream<out Arguments> {
|
||||
return super.provideArguments(context).flatMap { arguments ->
|
||||
val gradleVersion = arguments.get().first()
|
||||
Stream.of(true, false).map { isStatic ->
|
||||
Arguments.of(gradleVersion, isStatic)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Build fails when embedAndSign with non-pod framework is used with pod-dependencies")
|
||||
@ParameterizedTest(name = "{displayName} with {0} and isStatic={1}")
|
||||
@ArgumentsSource(GradleAndIsStaticArgumentsProvider::class)
|
||||
fun testEmbedAndSignOtherFrameworkNotUsedWithPodDepsDiagnostic(gradleVersion: GradleVersion, isStatic: Boolean, @TempDir tmp: Path) {
|
||||
nativeProjectWithCocoapodsAndIosAppPodFile(
|
||||
gradleVersion = gradleVersion,
|
||||
environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to tmp.absolutePathString(),
|
||||
"FRAMEWORKS_FOLDER_PATH" to "frameworks",
|
||||
"BUILT_PRODUCTS_DIR" to tmp.absolutePathString(),
|
||||
)
|
||||
) {
|
||||
|
||||
buildGradleKts.addKotlinBlock("""
|
||||
iosArm64()
|
||||
|
||||
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget>().configureEach {
|
||||
binaries.framework {
|
||||
isStatic = $isStatic
|
||||
}
|
||||
}
|
||||
""".trimIndent())
|
||||
|
||||
buildGradleKts.addCocoapodsBlock("""pod("Base64", version="1.1.2")""")
|
||||
|
||||
buildAndFail(":embedAndSignAppleFrameworkForXcode") {
|
||||
assertHasDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun TestProject.buildAndFailWithCocoapodsWrapper(
|
||||
vararg buildArguments: String,
|
||||
|
||||
+1
-2
@@ -17,7 +17,6 @@ import org.gradle.work.DisableCachingByDefault
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.UsesKotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||
@@ -374,4 +373,4 @@ internal abstract class FrameworkCopy : DefaultTask() {
|
||||
}
|
||||
|
||||
@DisableCachingByDefault(because = "Caching breaks symlinks inside frameworks")
|
||||
internal abstract class EmbedAndSignTask : FrameworkCopy(), UsesKotlinToolingDiagnostics
|
||||
internal abstract class EmbedAndSignTask : FrameworkCopy()
|
||||
|
||||
+5
-8
@@ -813,20 +813,17 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
}
|
||||
|
||||
|
||||
private fun checkEmbedAndSignNotUsedTogetherWithPodDependencies(project: Project, kotlinExtension: KotlinMultiplatformExtension, cocoapodsExtension: CocoapodsExtension) {
|
||||
private fun checkEmbedAndSignNotUsedTogetherWithPodDependencies(project: Project, cocoapodsExtension: CocoapodsExtension) {
|
||||
cocoapodsExtension.pods.all {
|
||||
SingleActionPerProject.run(project, "assertEmbedAndSignNotUsedTogetherWithPodDependencies") {
|
||||
kotlinExtension.targets.withType<KotlinNativeTarget>().all { target ->
|
||||
target.binaries.withType<Framework>().all {
|
||||
project.tasks.withType<EmbedAndSignTask>().all { embedAndSignTask ->
|
||||
embedAndSignTask.doFirst {
|
||||
embedAndSignTask.reportDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies())
|
||||
project.gradle.taskGraph.whenReady { taskGraph ->
|
||||
if (taskGraph.hasTask(embedAndSignTask)) {
|
||||
project.reportDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -888,7 +885,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
createInterops(project, kotlinExtension, cocoapodsExtension)
|
||||
configureLinkingOptions(project, cocoapodsExtension)
|
||||
checkLinkOnlyNotUsedWithStaticFramework(project, cocoapodsExtension)
|
||||
checkEmbedAndSignNotUsedTogetherWithPodDependencies(project, kotlinExtension, cocoapodsExtension)
|
||||
checkEmbedAndSignNotUsedTogetherWithPodDependencies(project, cocoapodsExtension)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user