diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87d5af2..1211c2e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,4 +24,4 @@ jobs: java-version: '8' - name: build - run: ./gradlew build -S --no-daemon + run: ./gradlew check -S --no-daemon diff --git a/build.gradle.kts b/build.gradle.kts index f862724..3a57b6b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(kotlin("test-junit")) + testImplementation("com.didiglobal.booster:booster-kotlinx:4.8.0") } gradlePlugin { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index be52383..b7c8c5d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryFunctionalTest.kt b/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryFunctionalTest.kt new file mode 100644 index 0000000..a97d49f --- /dev/null +++ b/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryFunctionalTest.kt @@ -0,0 +1,155 @@ +package io.johnsonlee.gradle.publish + +import com.didiglobal.booster.kotlinx.file +import com.didiglobal.booster.kotlinx.touch +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import java.io.File +import kotlin.test.Test +import kotlin.test.assertTrue + +class KotlinLibraryFunctionalTest { + + private val tmp = File("build", "tmp").also(File::mkdirs) + + @Test + fun `publish kotlin library to maven local with gradle 6_2`() { + val result = publishToMavenLocal("6.2") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_2_1`() { + val result = publishToMavenLocal("6.2.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_2_2`() { + val result = publishToMavenLocal("6.2.2") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_3`() { + val result = publishToMavenLocal("6.3") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_4`() { + val result = publishToMavenLocal("6.4") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_4_1`() { + val result = publishToMavenLocal("6.4.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_5`() { + val result = publishToMavenLocal("6.5") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_5_1`() { + val result = publishToMavenLocal("6.5.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_6`() { + val result = publishToMavenLocal("6.6") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_6_1`() { + val result = publishToMavenLocal("6.6.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_7`() { + val result = publishToMavenLocal("6.7") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_7_1`() { + val result = publishToMavenLocal("6.7.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_8`() { + val result = publishToMavenLocal("6.8") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_8_1`() { + val result = publishToMavenLocal("6.8.1") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_8_2`() { + val result = publishToMavenLocal("6.8.2") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_8_3`() { + val result = publishToMavenLocal("6.8.3") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + + @Test + fun `publish kotlin library to maven local with gradle 6_9`() { + val result = publishToMavenLocal("6.9") + assertTrue(result.tasks.none { it.outcome == TaskOutcome.FAILED }) + } + private fun publishToMavenLocal(gradleVersion: String): BuildResult { + val projectDir = createTempDir(directory = tmp).apply { + file("settings.gradle.kts").writeText("") + file("build.gradle.kts").writeText(""" + plugins { + kotlin("jvm") version embeddedKotlinVersion + id("io.johnsonlee.sonatype-publish-plugin") + } + + repositories { + mavenCentral() + google() + } + + group = "io.johnsonlee.functional-test" + version = "1.0.0" + """.trimIndent()) + file("src", "main", "kotlin", "Library.kt").touch().writeText(""" + object Library { + fun init() { + } + } + """.trimIndent()) + } + + try { + return GradleRunner.create().apply { + forwardOutput() + withGradleVersion(gradleVersion) + withPluginClasspath() + withArguments("publishToMavenLocal", "-S") + withProjectDir(projectDir) + }.build() + } finally { + projectDir.deleteRecursively() + } + } + +} diff --git a/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/NexusPublishPluginFunctionalTest.kt b/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/NexusPublishPluginFunctionalTest.kt deleted file mode 100644 index a3e12a8..0000000 --- a/src/functionalTest/kotlin/io/johnsonlee/gradle/publish/NexusPublishPluginFunctionalTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package io.johnsonlee.gradle.publish - -import org.gradle.testkit.runner.GradleRunner -import java.io.File -import kotlin.test.Test -import kotlin.test.assertTrue - -class NexusPublishPluginFunctionalTest { - - @Test - fun `can run task`() { - val projectDir = File("build/functionalTest") - projectDir.mkdirs() - projectDir.resolve("settings.gradle").writeText("") - projectDir.resolve("build.gradle").writeText(""" - plugins { - id('io.johnsonlee.sonatype-publish-plugin') - } - - tasks.register("greeting") { - println("Hello from plugin 'io.johnsonlee.sonatype-publish-plugin'") - } - - group = "io.johnsonlee.functional-test" - version = "1.0.0" - """) - - val runner = GradleRunner.create() - runner.forwardOutput() - runner.withPluginClasspath() - runner.withArguments("greeting") - runner.withProjectDir(projectDir) - val result = runner.build() - - assertTrue(result.output.contains("Hello from plugin 'io.johnsonlee.sonatype-publish-plugin'")) - } - -} diff --git a/src/main/kotlin/io/johnsonlee/gradle/publish/AndroidLibraryPublishPlugin.kt b/src/main/kotlin/io/johnsonlee/gradle/publish/AndroidLibraryPublishPlugin.kt index 1582569..0e2a06a 100644 --- a/src/main/kotlin/io/johnsonlee/gradle/publish/AndroidLibraryPublishPlugin.kt +++ b/src/main/kotlin/io/johnsonlee/gradle/publish/AndroidLibraryPublishPlugin.kt @@ -7,7 +7,9 @@ import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.register import org.gradle.kotlin.dsl.repositories +import org.gradle.util.GradleVersion class AndroidLibraryPublishPlugin : AbstractLibraryPublishPlugin() { @@ -49,11 +51,16 @@ class AndroidLibraryPublishPlugin : AbstractLibraryPublishPlugin() { from(android.sourceSets["main"].java.srcDirs) } - create(variant.name, MavenPublication::class.java) { + register(variant.name, MavenPublication::class) { configure(project) from(components[variant.name]) - artifact(javadocJar) - artifact(sourcesJar) + if (GradleVersion.current() >= GRADLE_6_6) { + artifact(javadocJar) + artifact(sourcesJar) + } else { + artifact(javadocJar.get()) + artifact(sourcesJar.get()) + } config.invoke(this) } } diff --git a/src/main/kotlin/io/johnsonlee/gradle/publish/Constants.kt b/src/main/kotlin/io/johnsonlee/gradle/publish/Constants.kt new file mode 100644 index 0000000..8676a93 --- /dev/null +++ b/src/main/kotlin/io/johnsonlee/gradle/publish/Constants.kt @@ -0,0 +1,5 @@ +package io.johnsonlee.gradle.publish + +import org.gradle.util.GradleVersion + +internal val GRADLE_6_6 = GradleVersion.version("6.6") \ No newline at end of file diff --git a/src/main/kotlin/io/johnsonlee/gradle/publish/JavaLibraryPublishPlugin.kt b/src/main/kotlin/io/johnsonlee/gradle/publish/JavaLibraryPublishPlugin.kt index 7bb4829..aca0258 100644 --- a/src/main/kotlin/io/johnsonlee/gradle/publish/JavaLibraryPublishPlugin.kt +++ b/src/main/kotlin/io/johnsonlee/gradle/publish/JavaLibraryPublishPlugin.kt @@ -9,6 +9,7 @@ import org.gradle.api.tasks.bundling.Jar import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.register import org.gradle.kotlin.dsl.the +import org.gradle.util.GradleVersion open class JavaLibraryPublishPlugin : AbstractLibraryPublishPlugin() { @@ -32,8 +33,13 @@ open class JavaLibraryPublishPlugin : AbstractLibraryPublishPlugin() { configure(project) from(components["java"]) - artifact(javadocJar) - artifact(sourcesJar) + if (GradleVersion.current() >= GRADLE_6_6) { + artifact(javadocJar) + artifact(sourcesJar) + } else { + artifact(javadocJar.get()) + artifact(sourcesJar.get()) + } config.invoke(this) } } diff --git a/src/main/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryPublishPlugin.kt b/src/main/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryPublishPlugin.kt index 00d160a..89d8edb 100644 --- a/src/main/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryPublishPlugin.kt +++ b/src/main/kotlin/io/johnsonlee/gradle/publish/KotlinLibraryPublishPlugin.kt @@ -9,6 +9,7 @@ import org.gradle.api.tasks.bundling.Jar import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.register import org.gradle.kotlin.dsl.the +import org.gradle.util.GradleVersion open class KotlinLibraryPublishPlugin : AbstractLibraryPublishPlugin() { @@ -31,8 +32,13 @@ open class KotlinLibraryPublishPlugin : AbstractLibraryPublishPlugin() { configure(project) from(components["java"]) - artifact(javadocJar) - artifact(sourcesJar) + if (GradleVersion.current() >= GRADLE_6_6) { + artifact(javadocJar) + artifact(sourcesJar) + } else { + artifact(javadocJar.get()) + artifact(sourcesJar.get()) + } config.invoke(this) } }