Skip to content

Commit a73556a

Browse files
committed
Add isAndroid and add test workflow
1 parent 910bbcd commit a73556a

5 files changed

Lines changed: 159 additions & 41 deletions

File tree

.github/workflows/build.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
branches: main
6+
7+
# This allows a subsequently queued workflow run to interrupt previous runs
8+
concurrency:
9+
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
10+
cancel-in-progress: true
11+
12+
jobs:
13+
analyze:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v3
17+
- name: Setup JDK
18+
uses: actions/setup-java@v3
19+
with:
20+
java-version: 21
21+
distribution: 'zulu'
22+
23+
- name: Setup gradle
24+
uses: gradle/actions/setup-gradle@v4
25+
26+
- name: Check spotless
27+
run: ./gradlew spotlessCheck
28+
29+
build:
30+
strategy:
31+
matrix:
32+
config: [
33+
{ target: android, os: ubuntu-latest, tasks: testDebugUnitTest testReleaseUnitTest, continueOnError: false },
34+
{ target: ios, os: macos-latest, tasks: iosX64Test iosSimulatorArm64Test, continueOnError: false },
35+
{ target: macos, os: macos-latest, tasks: macosX64Test macosArm64Test, continueOnError: false },
36+
{ target: tvos, os: macos-latest, tasks: tvosX64Test tvosSimulatorArm64Test, continueOnError: false },
37+
{ target: watchos, os: macos-latest, tasks: watchosX64Test watchosSimulatorArm64Test, continueOnError: false },
38+
{ target: linux, os: ubuntu-latest, tasks: linuxTest, continueOnError: false },
39+
{ target: js, os: ubuntu-latest, tasks: jsTest, continueOnError: false },
40+
{ target: wasm, os: ubuntu-latest, tasks: wasmJsTest, continueOnError: false },
41+
]
42+
runs-on: ${{ matrix.config.os }}
43+
name: Build ${{ matrix.config.target }}
44+
needs: check
45+
steps:
46+
- uses: actions/checkout@v3
47+
- name: Setup JDK
48+
uses: actions/setup-java@v3
49+
with:
50+
java-version: 21
51+
distribution: 'zulu'
52+
53+
- name: Setup gradle
54+
uses: gradle/actions/setup-gradle@v4
55+
56+
- name: Test ${{ matrix.config.target }} targets
57+
continue-on-error: ${{ matrix.config.continueOnError }}
58+
env:
59+
OS_NAME: ${{ matrix.config.os }}
60+
TARGET_NAME: ${{ matrix.config.target }}
61+
run: ./gradlew ${{ matrix.config.tasks }}

kplatform/build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ kotlin {
1717
explicitApi()
1818

1919
androidTarget {
20-
publishAllLibraryVariants()
20+
publishLibraryVariants("release")
2121
compilations.all {
22-
compileTaskProvider.configure { compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) } }
22+
compileTaskProvider.configure { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) } }
2323
}
2424
}
2525

@@ -53,8 +53,8 @@ android {
5353
compileSdk = 35
5454
defaultConfig { minSdk = 24 }
5555
compileOptions {
56-
sourceCompatibility = JavaVersion.VERSION_1_8
57-
targetCompatibility = JavaVersion.VERSION_1_8
56+
sourceCompatibility = JavaVersion.VERSION_11
57+
targetCompatibility = JavaVersion.VERSION_11
5858
}
5959
buildFeatures { buildConfig = true }
6060
}

kplatform/src/commonMain/kotlin/com/giancarlobuenaflor/kplatform/Platform.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ public enum class CompilationTarget(public val targetName: String) {
8686
WATCHOSARM64("watchosArm64"),
8787
WATCHOSSIMULATORARM64("watchosSimulatorArm64");
8888

89+
/** Returns true if this compilation target is an Android target. */
90+
public val isAndroid: Boolean
91+
get() = this == ANDROID
92+
8993
/** Returns true if this compilation target is a web target. */
9094
public val isWeb: Boolean
9195
get() = this == JS || this == WASMJS

kplatform/src/commonTest/kotlin/com/giancarlobuenaflor/kplatform/OperatingSystemTest.kt

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import com.giancarlobuenaflor.kplatform.KPlatform
2+
import com.giancarlobuenaflor.kplatform.OperatingSystem
3+
import kotlin.test.BeforeTest
4+
import kotlin.test.Test
5+
import kotlin.test.assertIs
6+
import kotlin.test.assertTrue
7+
8+
class PlatformTest {
9+
private lateinit var platform: KPlatform
10+
11+
@BeforeTest
12+
fun setUp() {
13+
platform = KPlatform()
14+
}
15+
16+
@Test
17+
fun `isDebug returns true by default in tests`() {
18+
assertTrue(platform.isDebug)
19+
}
20+
21+
@Test
22+
fun `operatingSystem returns correct values`() {
23+
// TODO: these are primitive tests
24+
val operatingSystem = platform.operatingSystem
25+
val environment = platform.environment
26+
val osName = environment["OS_NAME"]
27+
// This is the workflow config target, not the compilation target
28+
val targetName = environment["TARGET_NAME"]
29+
30+
val simulatorDeviceName = environment["SIMULATOR_DEVICE_NAME"]
31+
if (simulatorDeviceName != null) {
32+
if (simulatorDeviceName.contains("iPhone")) {
33+
assertIs<OperatingSystem.Ios>(operatingSystem)
34+
}
35+
if (simulatorDeviceName.contains("Apple TV")) {
36+
assertIs<OperatingSystem.TvOs>(operatingSystem)
37+
}
38+
if (simulatorDeviceName.contains("Apple Watch")) {
39+
assertIs<OperatingSystem.WatchOs>(operatingSystem)
40+
}
41+
}
42+
43+
if (osName == null || targetName == null) {
44+
return
45+
}
46+
47+
if (targetName == "android") {
48+
assertIs<OperatingSystem.Android>(operatingSystem)
49+
} else {
50+
if (osName.contains("ubuntu")) {
51+
assertIs<OperatingSystem.Linux>(operatingSystem)
52+
}
53+
if (osName.contains("macos")) {
54+
assertIs<OperatingSystem.MacOs>(operatingSystem)
55+
}
56+
}
57+
}
58+
59+
@Test
60+
fun `compilationTarget returns correct values`() {
61+
// TODO: these are primitive tests
62+
val environment = platform.environment
63+
val osName = environment["OS_NAME"]
64+
// This is the workflow config target, not the compilation target
65+
val targetName = environment["TARGET_NAME"]
66+
67+
val simulatorDeviceName = environment["SIMULATOR_DEVICE_NAME"]
68+
if (simulatorDeviceName != null) {
69+
if (simulatorDeviceName.contains("iPhone")) {
70+
assertTrue(platform.compilationTarget.isIOS)
71+
assertTrue(platform.compilationTarget.isMobile)
72+
}
73+
if (simulatorDeviceName.contains("Apple TV")) {
74+
assertTrue(platform.compilationTarget.isTvOS)
75+
}
76+
if (simulatorDeviceName.contains("Apple Watch")) {
77+
assertTrue(platform.compilationTarget.isWatchOS)
78+
}
79+
}
80+
81+
if (osName == null || targetName == null) {
82+
return
83+
}
84+
85+
if (targetName == "android") {
86+
assertTrue(platform.compilationTarget.isAndroid)
87+
assertTrue(platform.compilationTarget.isMobile)
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)