[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.BeforeAll
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import org.junit.jupiter.api.condition.OS
|
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.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.nio.file.Path
|
||||||
|
import java.util.stream.Stream
|
||||||
import java.util.zip.ZipFile
|
import java.util.zip.ZipFile
|
||||||
import kotlin.io.path.*
|
import kotlin.io.path.*
|
||||||
import kotlin.test.assertContains
|
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(
|
private fun TestProject.buildAndFailWithCocoapodsWrapper(
|
||||||
vararg buildArguments: String,
|
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.dsl.KotlinNativeBinaryContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
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.diagnostics.reportDiagnostic
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
@@ -374,4 +373,4 @@ internal abstract class FrameworkCopy : DefaultTask() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisableCachingByDefault(because = "Caching breaks symlinks inside frameworks")
|
@DisableCachingByDefault(because = "Caching breaks symlinks inside frameworks")
|
||||||
internal abstract class EmbedAndSignTask : FrameworkCopy(), UsesKotlinToolingDiagnostics
|
internal abstract class EmbedAndSignTask : FrameworkCopy()
|
||||||
|
|||||||
+6
-9
@@ -813,19 +813,16 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun checkEmbedAndSignNotUsedTogetherWithPodDependencies(project: Project, kotlinExtension: KotlinMultiplatformExtension, cocoapodsExtension: CocoapodsExtension) {
|
private fun checkEmbedAndSignNotUsedTogetherWithPodDependencies(project: Project, cocoapodsExtension: CocoapodsExtension) {
|
||||||
cocoapodsExtension.pods.all {
|
cocoapodsExtension.pods.all {
|
||||||
SingleActionPerProject.run(project, "assertEmbedAndSignNotUsedTogetherWithPodDependencies") {
|
SingleActionPerProject.run(project, "assertEmbedAndSignNotUsedTogetherWithPodDependencies") {
|
||||||
kotlinExtension.targets.withType<KotlinNativeTarget>().all { target ->
|
project.tasks.withType<EmbedAndSignTask>().all { embedAndSignTask ->
|
||||||
target.binaries.withType<Framework>().all {
|
project.gradle.taskGraph.whenReady { taskGraph ->
|
||||||
project.tasks.withType<EmbedAndSignTask>().all { embedAndSignTask ->
|
if (taskGraph.hasTask(embedAndSignTask)) {
|
||||||
embedAndSignTask.doFirst {
|
project.reportDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies())
|
||||||
embedAndSignTask.reportDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -888,7 +885,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
createInterops(project, kotlinExtension, cocoapodsExtension)
|
createInterops(project, kotlinExtension, cocoapodsExtension)
|
||||||
configureLinkingOptions(project, cocoapodsExtension)
|
configureLinkingOptions(project, cocoapodsExtension)
|
||||||
checkLinkOnlyNotUsedWithStaticFramework(project, cocoapodsExtension)
|
checkLinkOnlyNotUsedWithStaticFramework(project, cocoapodsExtension)
|
||||||
checkEmbedAndSignNotUsedTogetherWithPodDependencies(project, kotlinExtension, cocoapodsExtension)
|
checkEmbedAndSignNotUsedTogetherWithPodDependencies(project, cocoapodsExtension)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user