Skip to content

Commit 56bcf38

Browse files
committed
Fix Gradle Configuration Cache support.
# Conflicts: # SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt
1 parent ca6fedb commit 56bcf38

File tree

6 files changed

+62
-17
lines changed

6 files changed

+62
-17
lines changed

SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/configuration/CreateSkieConfigurationTask.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ internal abstract class CreateSkieConfigurationTask : DefaultTask() {
4545

4646
fun registerTask(target: SkieTarget) {
4747
val createConfiguration = target.registerSkieTargetBasedTask<CreateSkieConfigurationTask>("createConfiguration") {
48+
val skieExtension = project.skieExtension
4849
configurationFile.set(target.skieBuildDirectory.skieConfiguration)
49-
configuration.set(project.provider { project.skieExtension.buildConfiguration() })
50+
configuration.set(project.provider { skieExtension.buildConfiguration() })
5051

5152
dependsOn(target.createSkieBuildDirectoryTask)
5253
}

SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/fatframework/FatFrameworkConfigurator.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,17 @@ import org.gradle.api.Project
66
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask
77
import org.jetbrains.kotlin.gradle.tasks.FrameworkLayout
88
import org.jetbrains.kotlin.konan.target.Architecture
9-
import org.jetbrains.kotlin.konan.target.Family
109
import java.io.File
1110

1211
internal object FatFrameworkConfigurator {
13-
1412
fun configureSkieForFatFrameworks(project: Project) {
15-
project.fixFatFrameworkNameForCocoaPodsPlugin()
16-
project.configureFatFrameworkPatching()
13+
fixFatFrameworkNameForCocoaPodsPlugin(project)
14+
configureFatFrameworkPatching(project)
1715
}
1816

19-
private fun Project.fixFatFrameworkNameForCocoaPodsPlugin() {
20-
pluginManager.withPlugin("kotlin-native-cocoapods") {
21-
tasks.withType<FatFrameworkTask>().matching { it.name == "fatFramework" }.configureEach {
17+
private fun fixFatFrameworkNameForCocoaPodsPlugin(project: Project) {
18+
project.pluginManager.withPlugin("kotlin-native-cocoapods") {
19+
project.tasks.withType<FatFrameworkTask>().matching { it.name == "fatFramework" }.configureEach {
2220
// Unfortunately has to be done in `doFirst` to make sure the task is already configured by the plugin when we run our code
2321
doFirstOptimized {
2422
val commonFrameworkName = frameworks.map { it.name }.distinct().singleOrNull() ?: return@doFirstOptimized
@@ -28,8 +26,9 @@ internal object FatFrameworkConfigurator {
2826
}
2927
}
3028

31-
private fun Project.configureFatFrameworkPatching() {
32-
tasks.withType<FatFrameworkTask>().configureEach {
29+
private fun configureFatFrameworkPatching(project: Project) {
30+
val injectedFileSystemOperations = project.objects.newInstance<InjectedFileSystemOperations>()
31+
project.tasks.withType<FatFrameworkTask>().configureEach {
3332
doLastOptimized {
3433
// There shouldn't be any real difference between the frameworks except for architecture, so we consider the first one "primary"
3534
val primaryFramework = frameworks.first()
@@ -38,7 +37,7 @@ internal object FatFrameworkConfigurator {
3837
isMacosFramework = primaryFramework.files.isMacosFramework,
3938
)
4039

41-
// FatFramewrokTask writes its own
40+
// FatFrameworkTask writes its own
4241
target.moduleFile.writeText(
4342
primaryFramework.files.moduleFile.readText()
4443
)
@@ -74,12 +73,12 @@ internal object FatFrameworkConfigurator {
7473
target.swiftModuleDir.mkdirs()
7574

7675
frameworksByArchs.toList().forEach { (_, framework) ->
77-
project.copy {
76+
injectedFileSystemOperations.fileSystemOperations.copy {
7877
from(framework.files.apiNotes)
7978
into(target.headerDir)
8079
}
8180
framework.files.swiftModuleFiles(framework.darwinTarget.targetTriple).forEach { swiftmoduleFile ->
82-
project.copy {
81+
injectedFileSystemOperations.fileSystemOperations.copy {
8382
from(swiftmoduleFile)
8483
into(target.swiftModuleDir)
8584
}

SKIE/skie-gradle/plugin/src/main/kotlin/co/touchlab/skie/plugin/util/DarwinTarget.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ internal data class DarwinTarget(
3333
DarwinTarget(KonanTarget.TVOS_SIMULATOR_ARM64, "arm64-apple-tvos-simulator", "appletvsimulator"),
3434
DarwinTarget(KonanTarget.MACOS_X64, "x86_64-apple-macos", "macosx"),
3535
DarwinTarget(KonanTarget.MACOS_ARM64, "arm64-apple-macos", "macosx"),
36-
).associateBy { it.konanTarget }
36+
).associateBy { it.konanTarget.name }
3737
}
3838
}
3939

4040
internal val FrameworkDescriptor.darwinTarget: DarwinTarget
4141
get() = target.darwinTarget
4242

4343
internal val KonanTarget.darwinTarget: DarwinTarget
44-
get() = DarwinTarget.allTargets[this] ?: error("Unknown konan target: $this")
44+
// We can't use `KotlinTarget` directly as the instance can differ when Gradle Configuration Cache is used
45+
get() = DarwinTarget.allTargets[name] ?: error("Unknown konan target: $this")
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package co.touchlab.skie.plugin.util
2+
3+
import org.gradle.api.file.FileSystemOperations
4+
import javax.inject.Inject
5+
6+
interface InjectedFileSystemOperations {
7+
@get:Inject
8+
val fileSystemOperations: FileSystemOperations
9+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="Test Gradle Configuration Cache" type="GradleRunConfiguration" factoryName="Gradle">
3+
<ExternalSystemSettings>
4+
<option name="executionName" />
5+
<option name="externalProjectPath" value="$PROJECT_DIR$" />
6+
<option name="externalSystemIdString" value="GRADLE" />
7+
<option name="scriptParameters" value="-Pmatrix.linkModes=static,dynamic -Pmatrix.targets=macosArm64 -PtestLevel=smoke -Pmatrix.configurations=debug -PtestType=gradle" />
8+
<option name="taskDescriptions">
9+
<list />
10+
</option>
11+
<option name="taskNames">
12+
<list>
13+
<option value=":test" />
14+
<option value="--tests" />
15+
<option value="&quot;co.touchlab.skie.test.suite.gradle.configurationcache.GradleConfigurationCacheTests&quot;" />
16+
</list>
17+
</option>
18+
<option name="vmOptions" />
19+
</ExternalSystemSettings>
20+
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
21+
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
22+
<DebugAllEnabled>false</DebugAllEnabled>
23+
<RunAsTest>false</RunAsTest>
24+
<method v="2" />
25+
</configuration>
26+
</component>

test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/configurationcache/GradleConfigurationCacheTests.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import co.touchlab.skie.test.annotation.filter.Smoke
66
import co.touchlab.skie.test.annotation.type.GradleTests
77
import co.touchlab.skie.test.base.BaseGradleTests
88
import co.touchlab.skie.test.runner.BuildConfiguration
9+
import co.touchlab.skie.test.template.Templates
910
import co.touchlab.skie.test.util.KotlinTarget
1011
import co.touchlab.skie.test.util.KotlinVersion
1112
import co.touchlab.skie.test.util.LinkMode
@@ -21,9 +22,9 @@ import kotlin.test.assertEquals
2122
class GradleConfigurationCacheTests: BaseGradleTests() {
2223

2324
// We don't need to run the whole build to check configuration cache
24-
private val gradleArguments = arrayOf("dependencies")
25+
private val gradleArguments = arrayOf("assemble")
2526
private val assertGradleResult = { result: BuildResult ->
26-
assertEquals(TaskOutcome.SUCCESS, result.task(":dependencies")?.outcome)
27+
assertEquals(TaskOutcome.SUCCESS, result.task(":assemble")?.outcome)
2728
}
2829

2930
@MatrixTest
@@ -36,6 +37,8 @@ class GradleConfigurationCacheTests: BaseGradleTests() {
3637
}
3738
}
3839

40+
copyToCommonMain(Templates.basic)
41+
3942
runGradle(
4043
arguments = gradleArguments,
4144
assertResult = assertGradleResult,
@@ -60,6 +63,8 @@ class GradleConfigurationCacheTests: BaseGradleTests() {
6063
}
6164
}
6265

66+
copyToCommonMain(Templates.basic)
67+
6368
runGradle(
6469
arguments = gradleArguments,
6570
assertResult = assertGradleResult,
@@ -89,6 +94,8 @@ class GradleConfigurationCacheTests: BaseGradleTests() {
8994
}
9095
}
9196

97+
copyToCommonMain(Templates.basic)
98+
9299
runGradle(
93100
arguments = gradleArguments,
94101
assertResult = assertGradleResult,
@@ -116,6 +123,8 @@ class GradleConfigurationCacheTests: BaseGradleTests() {
116123
}
117124
}
118125

126+
copyToCommonMain(Templates.basic)
127+
119128
runGradle(
120129
arguments = gradleArguments,
121130
assertResult = assertGradleResult,

0 commit comments

Comments
 (0)