Skip to content

Commit cc3a29f

Browse files
committed
[plugin] disable plugin on non-macOS hosts
1 parent 828d707 commit cc3a29f

File tree

3 files changed

+66
-4
lines changed

3 files changed

+66
-4
lines changed

.github/workflows/Test.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
test:
13+
strategy:
14+
matrix:
15+
os: [macos-latest, ubuntu-latest]
16+
runs-on: ${{ matrix.os }}
17+
if: github.repository == 'ttypic/swift-klib-plugin'
18+
timeout-minutes: 25
19+
20+
steps:
21+
- uses: actions/checkout@v4
22+
- uses: gradle/wrapper-validation-action@v2
23+
- uses: actions/setup-java@v4
24+
with:
25+
distribution: 'zulu'
26+
java-version: '17'
27+
check-latest: true
28+
29+
- name: Run tests
30+
run: ./gradlew test

plugin/src/main/kotlin/io/github/ttypic/swiftklib/gradle/SwiftKlibPlugin.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.gradle.api.Project
77
import org.gradle.api.model.ObjectFactory
88
import org.gradle.configurationcache.extensions.capitalized
99
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
10+
import org.jetbrains.kotlin.konan.target.HostManager
1011

1112
const val EXTENSION_NAME = "swiftklib"
1213

@@ -22,6 +23,11 @@ class SwiftKlibPlugin : Plugin<Project> {
2223

2324
project.extensions.add(EXTENSION_NAME, swiftKlibEntries)
2425

26+
if (!HostManager.hostIsMac) {
27+
logger.warn("Current host OS is not macOS. Disabling SwiftKlib plugin")
28+
return
29+
}
30+
2531
swiftKlibEntries.all { entry ->
2632
val name: String = entry.name
2733

plugin/src/test/kotlin/io/github/ttypic/swiftklib/gradle/CinteropModulesTest.kt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ package io.github.ttypic.swiftklib.gradle
22

33
import io.kotest.matchers.nulls.shouldNotBeNull
44
import io.kotest.matchers.shouldBe
5+
import io.kotest.matchers.string.shouldContain
56
import org.gradle.testkit.runner.BuildResult
67
import org.gradle.testkit.runner.GradleRunner
78
import org.gradle.testkit.runner.TaskOutcome
89
import org.intellij.lang.annotations.Language
10+
import org.junit.jupiter.api.Assumptions.assumeTrue
911
import org.junit.jupiter.api.BeforeEach
1012
import org.junit.jupiter.api.Test
13+
import org.junit.jupiter.api.condition.OS
1114
import org.junit.jupiter.api.io.TempDir
1215
import java.io.File
1316

@@ -35,6 +38,8 @@ class CinteropModulesTest {
3538

3639
@Test
3740
fun `build with imported UIKit framework is successful`() {
41+
assumeMacos()
42+
3843
testBuild(
3944
swiftCode = """
4045
import UIKit
@@ -53,11 +58,28 @@ class CinteropModulesTest {
5358
}
5459
}
5560

61+
62+
@Test
63+
fun `build on linux results in warning about unsupported OS`() {
64+
assumeLinux()
65+
testBuild {
66+
output.shouldContain("Current host OS is not macOS. Disabling SwiftKlib plugin")
67+
}
68+
}
69+
70+
private fun assumeMacos() {
71+
assumeTrue(OS.MAC.isCurrentOs)
72+
}
73+
74+
private fun assumeLinux() {
75+
assumeTrue(OS.LINUX.isCurrentOs)
76+
}
77+
5678
private fun testBuild(
5779
@Language("swift")
58-
swiftCode: String,
80+
swiftCode: String? = null,
5981
@Language("kotlin")
60-
kotlinCode: String = "",
82+
kotlinCode: String? = null,
6183
swiftklibName: String = "test",
6284
swiftklibPackage: String = "test",
6385
asserter: BuildResult.() -> Unit,
@@ -120,8 +142,12 @@ class CinteropModulesTest {
120142
swiftLocation.mkdirs()
121143
kotlinLocation.mkdirs()
122144

123-
swiftCodeFile.writeText(swiftCode)
124-
kotlinCodeFile.writeText(kotlinCode)
145+
if (swiftCode != null) {
146+
swiftCodeFile.writeText(swiftCode)
147+
}
148+
if (kotlinCode != null) {
149+
kotlinCodeFile.writeText(kotlinCode)
150+
}
125151

126152
GradleRunner.create()
127153
.withProjectDir(testProjectDir)

0 commit comments

Comments
 (0)