Skip to content

Commit 583a8c0

Browse files
committed
⭐ feat: enlarge support platforms
1 parent 8a57a85 commit 583a8c0

File tree

2 files changed

+230
-31
lines changed

2 files changed

+230
-31
lines changed

.github/workflows/gradle-central-depoly.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
strategy:
3232
fail-fast: false
3333
matrix:
34-
platform: [ macos-latest, ubuntu-latest, windows-latest ]
34+
platform: [ macos-latest ]
3535
runs-on: ${{ matrix.platform }}
3636
needs: create_staging_repository
3737
steps:

build.gradle.kts

Lines changed: 229 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
@file:OptIn(ExperimentalWasmDsl::class)
2+
3+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
4+
15
plugins {
2-
kotlin("multiplatform") version "2.0.20"
3-
id("org.jetbrains.dokka") version "1.9.20"
6+
kotlin("multiplatform") version "2.1.0"
7+
id("org.jetbrains.dokka") version "2.0.0"
48
id("io.kotest.multiplatform") version "5.9.1"
59
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
610
`maven-publish`
711
signing
812
}
913

1014
group = "io.github.devngho"
11-
version = "0.2.3"
15+
version = "0.2.4"
1216

1317
repositories {
1418
mavenCentral()
@@ -22,6 +26,23 @@ val javadocJar: TaskProvider<Jar> by tasks.registering(Jar::class) {
2226
from(dokkaHtml.outputDirectory)
2327
}
2428

29+
// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
30+
enum class HostOs {
31+
LINUX, WINDOWS, MAC
32+
}
33+
34+
35+
fun getHostOsName(): HostOs {
36+
val target = System.getProperty("os.name")
37+
if (target == "Linux") return HostOs.LINUX
38+
if (target.startsWith("Windows")) return HostOs.WINDOWS
39+
if (target.startsWith("Mac")) return HostOs.MAC
40+
throw GradleException("Unknown OS: $target")
41+
}
42+
43+
val hostOs = getHostOsName()
44+
// copy end
45+
2546
kotlin {
2647
publishing {
2748
signing {
@@ -92,18 +113,42 @@ kotlin {
92113
}
93114
}
94115

95-
val hostOs = System.getProperty("os.name")
96-
val isMingwX64 = hostOs.startsWith("Windows")
97-
98-
when {
99-
hostOs == "Mac OS X" -> macosX64()
100-
hostOs == "Linux" -> linuxX64()
101-
isMingwX64 -> mingwX64()
102-
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
116+
// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
117+
// removed watchosDeviceArm64 and modified js
118+
js {
119+
nodejs()
120+
browser()
103121
}
122+
linuxX64()
123+
linuxArm64()
124+
androidNativeX64()
125+
androidNativeX86()
126+
androidNativeArm32()
127+
androidNativeArm64()
128+
iosX64()
129+
iosArm64()
130+
iosSimulatorArm64()
131+
macosX64()
132+
macosArm64()
133+
tvosArm64()
134+
tvosSimulatorArm64()
135+
tvosX64()
136+
watchosArm32()
137+
watchosArm64()
138+
watchosX64()
139+
watchosSimulatorArm64()
140+
mingwX64()
141+
// copy end
104142

105143
jvm()
106144

145+
wasmJs {
146+
browser()
147+
nodejs()
148+
d8()
149+
}
150+
wasmWasi()
151+
107152
sourceSets {
108153
val kotestVersion = "5.9.1"
109154

@@ -121,28 +166,182 @@ kotlin {
121166
}
122167

123168
tasks {
124-
getByName("signKotlinMultiplatformPublication") {
125-
dependsOn("publishJvmPublicationToSonatypeRepository", "publishJvmPublicationToMavenLocal")
126-
}
169+
// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
170+
// fixed for correct task dependencies in this project
171+
all {
172+
if (hostOs == HostOs.MAC) {
173+
// macOS task dependencies
174+
// @formatter:off
175+
when (this.name) {
176+
"signAndroidNativeArm32Publication" -> { this.mustRunAfter("signAndroidNativeArm64Publication") }
177+
"signAndroidNativeArm64Publication" -> { this.mustRunAfter("signAndroidNativeX64Publication") }
178+
"signAndroidNativeX64Publication" -> { this.mustRunAfter("signAndroidNativeX86Publication") }
179+
"signAndroidNativeX86Publication" -> { this.mustRunAfter("signJsPublication") }
180+
"signJsPublication" -> { this.mustRunAfter("signJvmPublication") }
181+
"signJvmPublication" -> { this.mustRunAfter("signKotlinMultiplatformPublication") }
182+
"signKotlinMultiplatformPublication" -> { this.mustRunAfter("signLinuxArm64Publication") }
183+
"signLinuxArm64Publication" -> { this.mustRunAfter("signLinuxX64Publication") }
184+
"signLinuxX64Publication" -> { this.mustRunAfter("signWasmJsPublication") }
185+
"signWasmJsPublication" -> { this.mustRunAfter("signWasmWasiPublication") }
186+
"signWasmWasiPublication" -> { this.mustRunAfter("signMingwX64Publication") }
187+
"signMingwX64Publication" -> { this.mustRunAfter("signIosArm64Publication") }
188+
"signIosArm64Publication" -> { this.mustRunAfter("signIosSimulatorArm64Publication") }
189+
"signIosSimulatorArm64Publication" -> { this.mustRunAfter("signIosX64Publication") }
190+
"signIosX64Publication" -> { this.mustRunAfter("signMacosArm64Publication") }
191+
"signMacosArm64Publication" -> { this.mustRunAfter("signMacosX64Publication") }
192+
"signMacosX64Publication" -> { this.mustRunAfter("signTvosArm64Publication") }
193+
"signTvosArm64Publication" -> { this.mustRunAfter("signTvosSimulatorArm64Publication") }
194+
"signTvosSimulatorArm64Publication" -> { this.mustRunAfter("signTvosX64Publication") }
195+
"signTvosX64Publication" -> { this.mustRunAfter("signWatchosArm32Publication") }
196+
"signWatchosArm32Publication" -> { this.mustRunAfter("signWatchosArm64Publication") }
197+
"signWatchosArm64Publication" -> { this.mustRunAfter("signWatchosSimulatorArm64Publication") }
198+
"signWatchosSimulatorArm64Publication" -> { this.mustRunAfter("signWatchosX64Publication") }
199+
}
200+
// @formatter:on
127201

128-
val hostOs = System.getProperty("os.name")
129-
val isMingwX64 = hostOs.startsWith("Windows")
130-
val nativeTargets = mutableListOf<String>()
131-
132-
if (hostOs == "Mac OS X") nativeTargets.add("MacosX64")
133-
if (hostOs == "Linux") nativeTargets.add("LinuxX64")
134-
if (isMingwX64) nativeTargets.add("MingwX64")
135-
136-
nativeTargets.forEach { target ->
137-
getByName("sign${target}Publication") {
138-
dependsOn(
139-
"publishJvmPublicationToSonatypeRepository",
140-
"publishJvmPublicationToMavenLocal",
141-
"publishKotlinMultiplatformPublicationToMavenLocal",
142-
"publishKotlinMultiplatformPublicationToSonatypeRepository"
143-
)
202+
if (this.name.startsWith("publish")) {
203+
this.mustRunAfter("signAndroidNativeArm32Publication")
204+
this.mustRunAfter("signAndroidNativeArm64Publication")
205+
this.mustRunAfter("signAndroidNativeX64Publication")
206+
this.mustRunAfter("signAndroidNativeX86Publication")
207+
this.mustRunAfter("signJsPublication")
208+
this.mustRunAfter("signJvmPublication")
209+
this.mustRunAfter("signKotlinMultiplatformPublication")
210+
this.mustRunAfter("signLinuxArm64Publication")
211+
this.mustRunAfter("signLinuxX64Publication")
212+
this.mustRunAfter("signWasmJsPublication")
213+
this.mustRunAfter("signWasmWasiPublication")
214+
this.mustRunAfter("signMingwX64Publication")
215+
this.mustRunAfter("signIosArm64Publication")
216+
this.mustRunAfter("signIosSimulatorArm64Publication")
217+
this.mustRunAfter("signIosX64Publication")
218+
this.mustRunAfter("signMacosArm64Publication")
219+
this.mustRunAfter("signMacosX64Publication")
220+
this.mustRunAfter("signTvosArm64Publication")
221+
this.mustRunAfter("signTvosSimulatorArm64Publication")
222+
this.mustRunAfter("signTvosX64Publication")
223+
this.mustRunAfter("signWatchosArm32Publication")
224+
this.mustRunAfter("signWatchosArm64Publication")
225+
this.mustRunAfter("signWatchosSimulatorArm64Publication")
226+
this.mustRunAfter("signWatchosX64Publication")
227+
}
228+
229+
if (this.name.startsWith("compileTest")) {
230+
this.mustRunAfter("signAndroidNativeArm32Publication")
231+
this.mustRunAfter("signAndroidNativeArm64Publication")
232+
this.mustRunAfter("signAndroidNativeX64Publication")
233+
this.mustRunAfter("signAndroidNativeX86Publication")
234+
this.mustRunAfter("signJsPublication")
235+
this.mustRunAfter("signJvmPublication")
236+
this.mustRunAfter("signKotlinMultiplatformPublication")
237+
this.mustRunAfter("signLinuxArm64Publication")
238+
this.mustRunAfter("signLinuxX64Publication")
239+
this.mustRunAfter("signWasmJsPublication")
240+
this.mustRunAfter("signWasmWasiPublication")
241+
this.mustRunAfter("signMingwX64Publication")
242+
this.mustRunAfter("signIosArm64Publication")
243+
this.mustRunAfter("signIosSimulatorArm64Publication")
244+
this.mustRunAfter("signIosX64Publication")
245+
this.mustRunAfter("signMacosArm64Publication")
246+
this.mustRunAfter("signMacosX64Publication")
247+
this.mustRunAfter("signTvosArm64Publication")
248+
this.mustRunAfter("signTvosSimulatorArm64Publication")
249+
this.mustRunAfter("signTvosX64Publication")
250+
this.mustRunAfter("signWatchosArm32Publication")
251+
this.mustRunAfter("signWatchosArm64Publication")
252+
this.mustRunAfter("signWatchosSimulatorArm64Publication")
253+
}
254+
if (this.name.startsWith("linkDebugTest")) {
255+
this.mustRunAfter("signAndroidNativeArm32Publication")
256+
this.mustRunAfter("signAndroidNativeArm64Publication")
257+
this.mustRunAfter("signAndroidNativeX64Publication")
258+
this.mustRunAfter("signAndroidNativeX86Publication")
259+
this.mustRunAfter("signJsPublication")
260+
this.mustRunAfter("signJvmPublication")
261+
this.mustRunAfter("signKotlinMultiplatformPublication")
262+
this.mustRunAfter("signLinuxArm64Publication")
263+
this.mustRunAfter("signLinuxX64Publication")
264+
this.mustRunAfter("signWasmJsPublication")
265+
this.mustRunAfter("signWasmWasiPublication")
266+
this.mustRunAfter("signMingwX64Publication")
267+
this.mustRunAfter("signIosArm64Publication")
268+
this.mustRunAfter("signIosSimulatorArm64Publication")
269+
this.mustRunAfter("signIosX64Publication")
270+
this.mustRunAfter("signMacosArm64Publication")
271+
this.mustRunAfter("signMacosX64Publication")
272+
this.mustRunAfter("signTvosArm64Publication")
273+
this.mustRunAfter("signTvosSimulatorArm64Publication")
274+
this.mustRunAfter("signTvosX64Publication")
275+
this.mustRunAfter("signWatchosArm32Publication")
276+
this.mustRunAfter("signWatchosArm64Publication")
277+
this.mustRunAfter("signWatchosSimulatorArm64Publication")
278+
}
279+
} else {
280+
// Windows || linux task dependecies
281+
282+
// @formatter:off
283+
when (this.name) {
284+
"signAndroidNativeArm32Publication" -> { this.mustRunAfter("signAndroidNativeArm64Publication") }
285+
"signAndroidNativeArm64Publication" -> { this.mustRunAfter("signAndroidNativeX64Publication") }
286+
"signAndroidNativeX64Publication" -> { this.mustRunAfter("signAndroidNativeX86Publication") }
287+
"signAndroidNativeX86Publication" -> { this.mustRunAfter("signJsPublication") }
288+
"signJsPublication" -> { this.mustRunAfter("signJvmPublication") }
289+
"signJvmPublication" -> { this.mustRunAfter("signKotlinMultiplatformPublication") }
290+
"signKotlinMultiplatformPublication" -> { this.mustRunAfter("signLinuxArm64Publication") }
291+
"signLinuxArm64Publication" -> { this.mustRunAfter("signLinuxX64Publication") }
292+
"signLinuxX64Publication" -> { this.mustRunAfter("signWasmJsPublication") }
293+
"signWasmJsPublication" -> { this.mustRunAfter("signWasmWasiPublication") }
294+
"signWasmWasiPublication" -> { this.mustRunAfter("signMingwX64Publication") }
295+
}
296+
// @formatter:on
297+
298+
if (this.name.startsWith("publish")) {
299+
this.mustRunAfter("signAndroidNativeArm32Publication")
300+
this.mustRunAfter("signAndroidNativeArm64Publication")
301+
this.mustRunAfter("signAndroidNativeX64Publication")
302+
this.mustRunAfter("signAndroidNativeX86Publication")
303+
this.mustRunAfter("signJsPublication")
304+
this.mustRunAfter("signJvmPublication")
305+
this.mustRunAfter("signKotlinMultiplatformPublication")
306+
this.mustRunAfter("signLinuxArm64Publication")
307+
this.mustRunAfter("signLinuxX64Publication")
308+
this.mustRunAfter("signWasmJsPublication")
309+
this.mustRunAfter("signWasmWasiPublication")
310+
this.mustRunAfter("signMingwX64Publication")
311+
}
312+
313+
if (this.name.startsWith("compileTest")) {
314+
this.mustRunAfter("signAndroidNativeArm32Publication")
315+
this.mustRunAfter("signAndroidNativeArm64Publication")
316+
this.mustRunAfter("signAndroidNativeX64Publication")
317+
this.mustRunAfter("signAndroidNativeX86Publication")
318+
this.mustRunAfter("signJsPublication")
319+
this.mustRunAfter("signJvmPublication")
320+
this.mustRunAfter("signKotlinMultiplatformPublication")
321+
this.mustRunAfter("signLinuxArm64Publication")
322+
this.mustRunAfter("signLinuxX64Publication")
323+
this.mustRunAfter("signWasmJsPublication")
324+
this.mustRunAfter("signWasmWasiPublication")
325+
this.mustRunAfter("signMingwX64Publication")
326+
}
327+
328+
if (this.name.startsWith("linkDebugTest")) {
329+
this.mustRunAfter("signAndroidNativeArm32Publication")
330+
this.mustRunAfter("signAndroidNativeArm64Publication")
331+
this.mustRunAfter("signAndroidNativeX64Publication")
332+
this.mustRunAfter("signAndroidNativeX86Publication")
333+
this.mustRunAfter("signJsPublication")
334+
this.mustRunAfter("signJvmPublication")
335+
this.mustRunAfter("signKotlinMultiplatformPublication")
336+
this.mustRunAfter("signLinuxArm64Publication")
337+
this.mustRunAfter("signLinuxX64Publication")
338+
this.mustRunAfter("signWasmJsPublication")
339+
this.mustRunAfter("signWasmWasiPublication")
340+
this.mustRunAfter("signMingwX64Publication")
341+
}
144342
}
145343
}
344+
// copy end
146345

147346
named<Test>("jvmTest") {
148347
useJUnitPlatform()

0 commit comments

Comments
 (0)