Skip to content

Commit

Permalink
fix(#235): spm should support custom tools version and platforms
Browse files Browse the repository at this point in the history
 improvement - use dsl make it's more readable
  • Loading branch information
hanrw committed Jan 31, 2024
1 parent 3e2f643 commit 82e07fa
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class SpmDependencyManager(
) : DependencyManager, LocalDevManager {
private fun Project.swiftPackageFolder(): String = _swiftPackageFolder ?: this.findRepoRoot()
private fun Project.swiftPackageFilePath(): String = "${stripEndSlash(swiftPackageFolder())}/Package.swift"
private fun Project.swiftPackageToolsVersion(): String = spmConfig.swiftToolsVersion ?: "5.3"
private fun Project.swiftPackagePlatforms(): List<String> = spmConfig.platforms ?: listOf("iOS(.v13)")
private fun Project.swiftPackageToolsVersion(): String = spmConfig.swiftToolsVersion
private fun Project.swiftPackagePlatforms(): String = spmConfig.getPlatformsAsFormattedText()

override fun configure(project: Project, uploadTask: TaskProvider<Task>, publishRemoteTask: TaskProvider<Task>) {
if (useCustomPackageFile && !project.hasKmmbridgeVariablesSection()) {
Expand Down Expand Up @@ -177,7 +177,7 @@ internal fun stripEndSlash(path: String): String {
private fun makeLocalDevPackageFileText(
swiftPackageFolder: String,
swiftPackageToolsVersion: String,
swiftPackagePlatforms: List<String>,
swiftPackagePlatforms: String,
frameworkName: String,
project: Project,
): String {
Expand All @@ -195,7 +195,7 @@ let packageName = "$frameworkName"
let package = Package(
name: packageName,
platforms: [
${swiftPackagePlatforms.joinToString(",\n ")}
$swiftPackagePlatforms
],
products: [
.library(
Expand Down Expand Up @@ -258,7 +258,7 @@ internal fun getModifiedPackageFileText(
private fun makePackageFileText(
packageName: String,
swiftPackageToolsVersion: String,
swiftPackagePlatforms: List<String>,
swiftPackagePlatforms: String,
url: String, checksum: String,
): String = """
// swift-tools-version:$swiftPackageToolsVersion
Expand All @@ -273,7 +273,7 @@ $KMMBRIDGE_END
let package = Package(
name: packageName,
platforms: [
${swiftPackagePlatforms.joinToString(",\n ")}
${swiftPackagePlatforms}
],
products: [
.library(
Expand Down Expand Up @@ -314,7 +314,57 @@ private val CUSTOM_PACKAGE_FILE_ERROR =
""".trimIndent()


data class SpmConfig(
var swiftToolsVersion: String? = null,
var platforms: List<String>? = null,
)

class SpmConfig {
var swiftToolsVersion: String = "5.9"
var platforms = mutableListOf<Platform>()

fun platforms(block: List<Platform>.() -> Unit) {
platforms.apply(block)
}

fun iOS(block: PlatformVersion.() -> Unit) {
platforms.add(Platform(PlatformName.IOS, PlatformVersion().apply(block)))
}

fun macOS(block: PlatformVersion.() -> Unit) {
platforms.add(Platform(PlatformName.MacOS, PlatformVersion().apply(block)))
}

fun tvOS(block: PlatformVersion.() -> Unit) {
platforms.add(Platform(PlatformName.TvOS, PlatformVersion().apply(block)))
}

fun watchOS(block: PlatformVersion.() -> Unit) {
platforms.add(Platform(PlatformName.WatchOS, PlatformVersion().apply(block)))
}

fun getPlatformsAsFormattedText(): String {
val formattedPlatforms = platforms.joinToString(",\n") { platform ->
" .${platform.name.value}(.v${platform.version.version})"
}
return formattedPlatforms
}

}

data class Platform(
val name: PlatformName,
val version: PlatformVersion,
)

enum class PlatformName(val value: String) {
IOS("iOS"),
MacOS("macOS"),
TvOS("tvOS"),
WatchOS("watchOS"),
}

class PlatformVersion {
var version: String? = null

fun v(version: String) {
this.version = version
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package co.touchlab.faktory.dependencyManager

import co.touchlab.faktory.dependencymanager.SpmConfig
import org.junit.Test
import kotlin.test.assertEquals

class SpmConfigTest {

@Test
fun addMultiplePlatforms() {
val config = SpmConfig().apply(fun SpmConfig.() {
platforms {
iOS {
v("14")
}
macOS {
v("13")
}
watchOS {
v("7")
}
tvOS {
v("14")
}
}
})

assertEquals("""
.iOS(.v14),
.macOS(.v13),
.watchOS(.v7),
.tvOS(.v14)""".trimMargin(), config.getPlatformsAsFormattedText())
}


@Test
fun addWatchOSToPlatforms() {
val config = SpmConfig().apply(fun SpmConfig.() {
platforms {
watchOS {
v("7")
}
}
})

assertEquals(".watchOS(.v7)", config.getPlatformsAsFormattedText().trimIndent())
}

@Test
fun addTvOSToPlatforms() {
val config = SpmConfig().apply(fun SpmConfig.() {
platforms {
tvOS {
v("14")
}
}
})

assertEquals(".tvOS(.v14)", config.getPlatformsAsFormattedText().trimIndent())
}

@Test
fun addMacOSToPlatforms() {
val config = SpmConfig().apply(fun SpmConfig.() {
platforms {
macOS {
v("13")
}
}
})

assertEquals(".macOS(.v13)", config.getPlatformsAsFormattedText().trimIndent())
}

@Test
fun addIOSToPlatforms() {
val config = SpmConfig().apply(fun SpmConfig.() {
platforms {
iOS {
v("14")
}
}
})

assertEquals(".iOS(.v14)", config.getPlatformsAsFormattedText().trimIndent())
}
}

0 comments on commit 82e07fa

Please sign in to comment.