diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 93d73598..3ac6f6dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: java_version: [11, 17] - test_config_method: ["DSL", "PROPERTIES"] + test_config_method: ["DSL", "PROPERTIES", "BASE"] steps: - name: Checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fc3248a..909c3308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Updated docs can be found on [the new website](https://vanniktech.github.io/grad please use the new `coordinates` method instead. - The `GROUP` and `VERSION_NAME` Gradle properties will not be explicitly set as `project.group` and `project.version` anymore. +- Fix publishing Kotlin/JS project with the base plugin. - The minimum supported Gradle version has been increased to 7.3. Version 0.22.0 *(2022-09-09)* diff --git a/plugin/src/integrationTest/fixtures/common/expected/test-artifact-1.0.0.pom b/plugin/src/integrationTest/fixtures/common/expected/test-artifact-1.0.0.pom deleted file mode 100644 index 504cd663..00000000 --- a/plugin/src/integrationTest/fixtures/common/expected/test-artifact-1.0.0.pom +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - 4.0.0 - com.example - test-artifact - 1.0.0 - Gradle Maven Publish Plugin Test Artifact - Testing the Gradle Maven Publish Plugin - https://github.com/vanniktech/gradle-maven-publish-plugin/ - 2018 - - - The Apache Software License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - vanniktech - Niklas Baudy - https://github.com/vanniktech/ - - - - scm:git:git://github.com/vanniktech/gradle-maven-publish-plugin.git - scm:git:ssh://git@github.com/vanniktech/gradle-maven-publish-plugin.git - https://github.com/vanniktech/gradle-maven-publish-plugin/ - - diff --git a/plugin/src/integrationTest/fixtures/common/gradle.properties b/plugin/src/integrationTest/fixtures/common/gradle.properties deleted file mode 100644 index 227885e5..00000000 --- a/plugin/src/integrationTest/fixtures/common/gradle.properties +++ /dev/null @@ -1,31 +0,0 @@ -RELEASE_SIGNING_ENABLED=true - -GROUP=com.example -VERSION_NAME=1.0.0 -POM_ARTIFACT_ID=test-artifact - -POM_NAME=Gradle Maven Publish Plugin Test Artifact -POM_PACKAGING=jar - -POM_DESCRIPTION=Testing the Gradle Maven Publish Plugin -POM_INCEPTION_YEAR=2018 - -POM_URL=https://github.com/vanniktech/gradle-maven-publish-plugin/ -POM_SCM_URL=https://github.com/vanniktech/gradle-maven-publish-plugin/ -POM_SCM_CONNECTION=scm:git:git://github.com/vanniktech/gradle-maven-publish-plugin.git -POM_SCM_DEV_CONNECTION=scm:git:ssh://git@github.com/vanniktech/gradle-maven-publish-plugin.git - -POM_LICENCE_NAME=The Apache Software License, Version 2.0 -POM_LICENCE_URL=https://www.apache.org/licenses/LICENSE-2.0.txt -POM_LICENCE_DIST=repo - -POM_DEVELOPER_ID=vanniktech -POM_DEVELOPER_NAME=Niklas Baudy -POM_DEVELOPER_URL=https://github.com/vanniktech/ - -signing.keyId=B89C4055 -signing.password=test -signing.secretKeyRingFile=test-secring.gpg - -org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m -org.gradle.vfs.watch=false diff --git a/plugin/src/integrationTest/fixtures/common/maven-publish.gradle b/plugin/src/integrationTest/fixtures/common/maven-publish.gradle deleted file mode 100644 index f24c3326..00000000 --- a/plugin/src/integrationTest/fixtures/common/maven-publish.gradle +++ /dev/null @@ -1,8 +0,0 @@ -publishing { - repositories { - maven { - name = "testFolder" - url = project.property("test.releaseRepository") - } - } -} diff --git a/plugin/src/integrationTest/fixtures/common/settings.gradle b/plugin/src/integrationTest/fixtures/common/settings.gradle deleted file mode 100644 index a8c76e60..00000000 --- a/plugin/src/integrationTest/fixtures/common/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -pluginManagement { - repositories { - mavenLocal() - mavenCentral() - google() - } -} - -dependencyResolutionManagement { - repositories { - mavenLocal() - mavenCentral() - google() - } -} diff --git a/plugin/src/integrationTest/fixtures/common/test-secring.gpg b/plugin/src/integrationTest/fixtures/common/test-secring.gpg deleted file mode 100644 index 69899a7e..00000000 Binary files a/plugin/src/integrationTest/fixtures/common/test-secring.gpg and /dev/null differ diff --git a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/build.gradle b/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/build.gradle deleted file mode 100644 index 3d6cc933..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/build.gradle +++ /dev/null @@ -1,33 +0,0 @@ -import com.vanniktech.maven.publish.AndroidMultiVariantLibrary - -buildscript { - repositories { - mavenLocal() - mavenCentral() - google() - } - - dependencies { - classpath "com.vanniktech:gradle-maven-publish-plugin:${System.getProperty("com.vanniktech.publish.version")}" - classpath "com.android.tools.build:gradle:7.3.1" - classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.20" - } -} - -apply plugin: "com.android.library" -apply plugin: "com.vanniktech.maven.publish.base" - -group = "com.example" -version = "1.0.0" - -android { - compileSdkVersion 29 -} - -mavenPublishing { - signAllPublications() - pomFromGradleProperties() - configure(new AndroidMultiVariantLibrary()) -} - -apply from: "maven-publish.gradle" diff --git a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/expected/test-artifact-1.0.0.pom b/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/expected/test-artifact-1.0.0.pom deleted file mode 100644 index f4604426..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/expected/test-artifact-1.0.0.pom +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - 4.0.0 - com.example - test-artifact - 1.0.0 - pom - Gradle Maven Publish Plugin Test Artifact - Testing the Gradle Maven Publish Plugin - https://github.com/vanniktech/gradle-maven-publish-plugin/ - 2018 - - - The Apache Software License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - vanniktech - Niklas Baudy - https://github.com/vanniktech/ - - - - scm:git:git://github.com/vanniktech/gradle-maven-publish-plugin.git - scm:git:ssh://git@github.com/vanniktech/gradle-maven-publish-plugin.git - https://github.com/vanniktech/gradle-maven-publish-plugin/ - - diff --git a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/settings.gradle b/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/settings.gradle deleted file mode 100644 index 7ed333ec..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/settings.gradle +++ /dev/null @@ -1,9 +0,0 @@ -rootProject.name = "test-artifact" - -dependencyResolutionManagement { - repositories { - mavenLocal() - mavenCentral() - google() - } -} diff --git a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/AndroidManifest.xml b/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/AndroidManifest.xml deleted file mode 100644 index 7ee177e5..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/AndroidManifest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java b/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java deleted file mode 100644 index 12017313..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_multi_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.vanniktech.maven.publish.test; - -import android.app.Activity; -import android.os.Bundle; - -/** - * Just a test Activity with Javadoc. - */ -public class TestActivity extends Activity { - /** - * Main method which does something. - * - * @param args Command-line arguments passed to the program. - */ - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } -} diff --git a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/build.gradle b/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/build.gradle deleted file mode 100644 index 861b0ceb..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/build.gradle +++ /dev/null @@ -1,33 +0,0 @@ -import com.vanniktech.maven.publish.AndroidSingleVariantLibrary - -buildscript { - repositories { - mavenLocal() - mavenCentral() - google() - } - - dependencies { - classpath "com.vanniktech:gradle-maven-publish-plugin:${System.getProperty("com.vanniktech.publish.version")}" - classpath "com.android.tools.build:gradle:7.3.1" - classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.20" - } -} - -apply plugin: "com.android.library" -apply plugin: "com.vanniktech.maven.publish.base" - -group = "com.example" -version = "1.0.0" - -android { - compileSdkVersion 29 -} - -mavenPublishing { - signAllPublications() - pomFromGradleProperties() - configure(new AndroidSingleVariantLibrary("release")) -} - -apply from: "maven-publish.gradle" diff --git a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/expected/test-artifact-1.0.0.pom b/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/expected/test-artifact-1.0.0.pom deleted file mode 100644 index be18df21..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/expected/test-artifact-1.0.0.pom +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - 4.0.0 - com.example - test-artifact - 1.0.0 - aar - Gradle Maven Publish Plugin Test Artifact - Testing the Gradle Maven Publish Plugin - https://github.com/vanniktech/gradle-maven-publish-plugin/ - 2018 - - - The Apache Software License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - vanniktech - Niklas Baudy - https://github.com/vanniktech/ - - - - scm:git:git://github.com/vanniktech/gradle-maven-publish-plugin.git - scm:git:ssh://git@github.com/vanniktech/gradle-maven-publish-plugin.git - https://github.com/vanniktech/gradle-maven-publish-plugin/ - - diff --git a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/settings.gradle b/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/settings.gradle deleted file mode 100644 index 7ed333ec..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/settings.gradle +++ /dev/null @@ -1,9 +0,0 @@ -rootProject.name = "test-artifact" - -dependencyResolutionManagement { - repositories { - mavenLocal() - mavenCentral() - google() - } -} diff --git a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/AndroidManifest.xml b/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/AndroidManifest.xml deleted file mode 100644 index 7ee177e5..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/AndroidManifest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java b/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java deleted file mode 100644 index 12017313..00000000 --- a/plugin/src/integrationTest/fixtures/passing_android_single_variant_project/src/main/java/com/vanniktech/maven/publish/test/TestActivity.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.vanniktech.maven.publish.test; - -import android.app.Activity; -import android.os.Bundle; - -/** - * Just a test Activity with Javadoc. - */ -public class TestActivity extends Activity { - /** - * Main method which does something. - * - * @param args Command-line arguments passed to the program. - */ - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } -} diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginIntegrationTest.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginIntegrationTest.kt deleted file mode 100644 index f5f52867..00000000 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginIntegrationTest.kt +++ /dev/null @@ -1,158 +0,0 @@ -package com.vanniktech.maven.publish - -import java.io.File -import java.util.zip.ZipFile -import org.assertj.core.api.Assertions.assertThat -import org.gradle.testkit.runner.BuildResult -import org.gradle.testkit.runner.GradleRunner -import org.gradle.testkit.runner.TaskOutcome.SUCCESS -import org.junit.Rule -import org.junit.Test -import org.junit.rules.TemporaryFolder - -class MavenPublishPluginIntegrationTest { - @get:Rule val testProjectDir: TemporaryFolder = TemporaryFolder() - - private lateinit var repoFolder: File - private lateinit var projectFolder: File - private lateinit var expectedFolder: File - - // TODO - @Test fun generatesArtifactsAndDocumentationOnAndroidSingleVariantProject() { - setupFixture("passing_android_single_variant_project") - - val result = executeGradleCommands(TEST_TASK, "--stacktrace") - - assertExpectedTasksRanSuccessfully(result) - assertExpectedCommonArtifactsGenerated(artifactExtension = "aar") - assertPomContentMatches() - } - - // TODO - @Test fun generatesArtifactsAndDocumentationOnAndroidMultiVariantProject() { - setupFixture("passing_android_multi_variant_project") - - val result = executeGradleCommands(TEST_TASK, "--stacktrace") - - assertExpectedTasksRanSuccessfully(result) - assertExpectedCommonArtifactsGenerated("aar", qualifier = "debug") - assertExpectedCommonArtifactsGenerated("aar", qualifier = "release") - assertPomContentMatches() - } - - /** - * Copies test fixture into temp directory under test. - */ - private fun setupFixture(fixtureName: String, projectName: String = fixtureName) { - repoFolder = testProjectDir.newFolder("repo") - projectFolder = testProjectDir.newFolder(projectName) - expectedFolder = projectFolder.resolve(EXPECTED_DIR) - - File("$FIXTURES/common").copyRecursively(projectFolder) - File("$FIXTURES/$fixtureName").copyRecursively(projectFolder, overwrite = true) - } - - private fun assertExpectedTasksRanSuccessfully(result: BuildResult, hasDokka: Boolean = false) { - assertThat(result.task(":$TEST_TASK")?.outcome).isEqualTo(SUCCESS) - if (hasDokka) { - assertThat(result.task(":dokkaHtml")?.outcome).isEqualTo(SUCCESS) - } else { - assertThat(result.task(":dokkaHtml")).isNull() - } - } - - /** - * Makes sure common artifacts are generated (POM, javadoc, sources, etc.), - * no matter what project type is and which plugins are applied. - */ - private fun assertExpectedCommonArtifactsGenerated( - artifactExtension: String = "jar", - artifactId: String = TEST_POM_ARTIFACT_ID, - groupId: String = TEST_GROUP, - version: String = TEST_VERSION_NAME, - qualifier: String? = null, - ) { - val qualifierSuffix = qualifier?.let { "-$it" } ?: "" - val artifactJar = "$artifactId-$version$qualifierSuffix.$artifactExtension" - val pomFile = "$artifactId-$version.pom" - val moduleFile = "$artifactId-$version.module" - val javadocJar = "$artifactId-$version$qualifierSuffix-javadoc.jar" - val sourcesJar = "$artifactId-$version$qualifierSuffix-sources.jar" - assertArtifactGenerated(artifactJar, artifactId, groupId, version) - assertArtifactGenerated(pomFile, artifactId, groupId, version) - assertArtifactGenerated(moduleFile, artifactId, groupId, version) - assertArtifactGenerated(javadocJar, artifactId, groupId, version) - assertArtifactGenerated(sourcesJar, artifactId, groupId, version) - } - - private fun assertArtifactGenerated( - artifactFileNameWithExtension: String, - artifactId: String = TEST_POM_ARTIFACT_ID, - groupId: String = TEST_GROUP, - version: String = TEST_VERSION_NAME - ) { - val artifactFolder = artifactFolder(artifactId, groupId, version) - - assertThat(artifactFolder.resolve(artifactFileNameWithExtension)).exists() - assertThat(artifactFolder.resolve("$artifactFileNameWithExtension.asc")).exists() - } - - private fun assertPomContentMatches( - artifactId: String = TEST_POM_ARTIFACT_ID, - groupId: String = TEST_GROUP, - version: String = TEST_VERSION_NAME - ) { - val artifactFolder = artifactFolder(artifactId, groupId, version) - val pomFileName = "$artifactId-$version.pom" - - val resolvedPomFile = artifactFolder.resolve(pomFileName) - val content = resolvedPomFile.readText() - - val expectedContent = expectedFolder.resolve(pomFileName).readText() - assertThat(content).isEqualToNormalizingWhitespace(expectedContent) - } - - private fun assertSourceJarContainsFile( - file: String, - srcRoot: String, - artifactId: String = TEST_POM_ARTIFACT_ID, - groupId: String = TEST_GROUP, - version: String = TEST_VERSION_NAME - ) { - val artifactFolder = artifactFolder(artifactId, groupId, version) - val sourcesJar = ZipFile(artifactFolder.resolve("$artifactId-$version-sources.jar")) - val entry = sourcesJar.getEntry(file) - assertThat(entry).describedAs(file).isNotNull() - - val content = sourcesJar.getInputStream(entry)?.reader()?.buffered()?.readText() - - val expected = projectFolder.resolve(srcRoot).resolve(file) - val expectedContent = expected.readText() - - assertThat(content).describedAs(file).isNotBlank() - assertThat(content).describedAs(file).isEqualTo(expectedContent) - } - - private fun artifactFolder(artifactId: String, groupId: String, version: String): File { - val group = groupId.replace(".", "/") - return repoFolder.resolve(group).resolve(artifactId).resolve(version) - } - - private fun executeGradleCommands(vararg commands: String) = GradleRunner.create() - .withProjectDir(projectFolder) - .withArguments(*commands, "-Ptest.releaseRepository=$repoFolder") - .withDebug(true) - .forwardOutput() - .build() - - companion object { - const val FIXTURES = "src/integrationTest/fixtures" - const val EXPECTED_DIR = "expected" - - const val TEST_GROUP = "com.example" - const val TEST_VERSION_NAME = "1.0.0" - const val TEST_POM_ARTIFACT_ID = "test-artifact" - - const val TEST_TASK = "publishAllPublicationsToTestFolderRepository" - } -} diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt index c50d1afb..fb17d79a 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt @@ -378,6 +378,41 @@ class MavenPublishPluginPlatformTest { assertThat(result).javadocJar().isSigned() } + @TestParameterInjectorTest + fun androidMultiVariantLibraryProject(@TestParameter agpVersion: AgpVersion) { + // regular plugin does not have a way to enable multi variant config + assume().that(config).isEqualTo(TestOptions.Config.BASE) + agpVersion.assumeSupportedGradleVersion() + + val project = androidLibraryProjectSpec(agpVersion).copy( + basePluginConfig = "configure(new AndroidMultiVariantLibrary(true, true))", + ) + val result = project.run(fixtures, testProjectDir, testOptions) + + assertThat(result).outcome().succeeded() + assertThat(result).pom().exists() + assertThat(result).pom().isSigned() + assertThat(result).pom().matchesExpectedPom("pom") + assertThat(result).module().exists() + assertThat(result).module().isSigned() + + assertThat(result).artifact("debug", "aar").exists() + assertThat(result).artifact("debug", "aar").isSigned() + assertThat(result).sourcesJar("debug").exists() + assertThat(result).sourcesJar("debug").isSigned() + assertThat(result).sourcesJar("debug").containsAllSourceFiles() + assertThat(result).javadocJar("debug").exists() + assertThat(result).javadocJar("debug").isSigned() + + assertThat(result).artifact("release", "aar").exists() + assertThat(result).artifact("release", "aar").isSigned() + assertThat(result).sourcesJar("release").exists() + assertThat(result).sourcesJar("release").isSigned() + assertThat(result).sourcesJar("release").containsAllSourceFiles() + assertThat(result).javadocJar("release").exists() + assertThat(result).javadocJar("release").isSigned() + } + @TestParameterInjectorTest fun androidLibraryKotlinProject( @TestParameter agpVersion: AgpVersion, diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpec.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpec.kt index c4d97cec..8bb1ef15 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpec.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpec.kt @@ -10,6 +10,7 @@ data class ProjectSpec( val version: String?, val properties: Map, val sourceFiles: List, + val basePluginConfig: String, val defaultProjectName: String = "default-root-project-name", val buildFileExtra: String = "", ) diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecRunner.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecRunner.kt index 1c28105b..26fc033b 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecRunner.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecRunner.kt @@ -37,7 +37,9 @@ fun ProjectSpec.run(fixtures: Path, temp: Path, options: TestOptions): ProjectRe private fun ProjectSpec.writeBuildFile(path: Path, repo: Path, options: TestOptions) { path.writeText( """ - ${pluginsBlock()} + import com.vanniktech.maven.publish.* + + ${pluginsBlock(options)} ${publishingBlock(options)} @@ -56,7 +58,7 @@ private fun ProjectSpec.writeBuildFile(path: Path, repo: Path, options: TestOpti ) } -private fun ProjectSpec.pluginsBlock() = buildString { +private fun ProjectSpec.pluginsBlock(options: TestOptions) = buildString { appendLine("plugins {") plugins.forEach { append(" id \"${it.id}\"") @@ -67,16 +69,31 @@ private fun ProjectSpec.pluginsBlock() = buildString { appendLine() } } - appendLine(" id \"com.vanniktech.maven.publish\" version \"${System.getProperty("com.vanniktech.publish.version")}\"") + + val pluginVersion = System.getProperty("com.vanniktech.publish.version") + when (options.config) { + TestOptions.Config.BASE -> appendLine(" id \"com.vanniktech.maven.publish.base\" version \"${pluginVersion}\"") + TestOptions.Config.DSL, + TestOptions.Config.PROPERTIES -> appendLine(" id \"com.vanniktech.maven.publish\" version \"${pluginVersion}\"") + } + appendLine("}") } private fun ProjectSpec.publishingBlock(options: TestOptions): String { - return if (options.config == TestOptions.Config.DSL) { - listOfNotNull( + return when (options.config) { + TestOptions.Config.PROPERTIES -> { + """ + mavenPublishing { + } + """.trimIndent() + } + TestOptions.Config.BASE, + TestOptions.Config.DSL -> listOfNotNull( """ mavenPublishing { + ${if (options.config == TestOptions.Config.BASE) basePluginConfig else ""} ${if (options.signing != TestOptions.Signing.NO_SIGNING) "signAllPublications()" else ""} ${if (group != null && artifactId != null && version != null) "coordinates(\"$group\", \"$artifactId\", \"$version\")" else ""} @@ -117,11 +134,6 @@ private fun ProjectSpec.publishingBlock(options: TestOptions): String { } """.trimIndent(), ).joinToString(separator = "\n") - } else { - """ - mavenPublishing { - } - """.trimIndent() } } diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecs.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecs.kt index 265479c7..d80d485c 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecs.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/ProjectSpecs.kt @@ -44,7 +44,8 @@ fun javaProjectSpec() = ProjectSpec( properties = defaultProperties, sourceFiles = listOf( SourceFile("main", "java", "com/vanniktech/maven/publish/test/JavaTestClass.java"), - ) + ), + basePluginConfig = "configure(new JavaLibrary(new JavadocJar.Empty(), true))", ) fun javaLibraryProjectSpec() = ProjectSpec( @@ -57,7 +58,8 @@ fun javaLibraryProjectSpec() = ProjectSpec( properties = defaultProperties, sourceFiles = listOf( SourceFile("main", "java", "com/vanniktech/maven/publish/test/JavaTestClass.java"), - ) + ), + basePluginConfig = "configure(new JavaLibrary(new JavadocJar.Empty(), true))", ) fun javaGradlePluginProjectSpec() = ProjectSpec( @@ -81,7 +83,8 @@ fun javaGradlePluginProjectSpec() = ProjectSpec( } } } - """.trimIndent() + """.trimIndent(), + basePluginConfig = "configure(new GradlePlugin(new JavadocJar.Empty(), true))", ) fun kotlinJvmProjectSpec(version: KotlinVersion) = ProjectSpec( @@ -95,7 +98,8 @@ fun kotlinJvmProjectSpec(version: KotlinVersion) = ProjectSpec( sourceFiles = listOf( SourceFile("main", "java", "com/vanniktech/maven/publish/test/JavaTestClass.java"), SourceFile("main", "kotlin", "com/vanniktech/maven/publish/test/KotlinTestClass.kt"), - ) + ), + basePluginConfig = "configure(new KotlinJvm(new JavadocJar.Empty(), true))", ) fun kotlinJsProjectSpec(version: KotlinVersion) = ProjectSpec( @@ -109,13 +113,14 @@ fun kotlinJsProjectSpec(version: KotlinVersion) = ProjectSpec( sourceFiles = listOf( SourceFile("main", "kotlin", "com/vanniktech/maven/publish/test/KotlinTestClass.kt"), ), + basePluginConfig = "configure(new KotlinJs(new JavadocJar.Empty(), true))", buildFileExtra = """ kotlin { js("IR") { nodejs() } } - """.trimIndent() + """.trimIndent(), ) fun kotlinMultiplatformProjectSpec(version: KotlinVersion) = ProjectSpec( @@ -132,6 +137,7 @@ fun kotlinMultiplatformProjectSpec(version: KotlinVersion) = ProjectSpec( SourceFile("linuxMain", "kotlin", "com/vanniktech/maven/publish/test/ExpectedTestClass.kt"), SourceFile("nodeJsMain", "kotlin", "com/vanniktech/maven/publish/test/ExpectedTestClass.kt"), ), + basePluginConfig = "configure(new KotlinMultiplatform(new JavadocJar.Empty()))", buildFileExtra = """ kotlin { jvm() @@ -202,6 +208,7 @@ fun androidLibraryProjectSpec(version: AgpVersion) = ProjectSpec( sourceFiles = listOf( SourceFile("main", "java", "com/vanniktech/maven/publish/test/JavaTestClass.java"), ), + basePluginConfig = "configure(new AndroidSingleVariantLibrary(\"release\", true, true))", buildFileExtra = """ android { namespace "com.test.library" @@ -244,6 +251,7 @@ fun javaPlatformProjectSpec() = ProjectSpec( version = "1.0.0", properties = defaultProperties, sourceFiles = emptyList(), + basePluginConfig = "configure(new JavaPlatform())", buildFileExtra = """ dependencies { constraints { @@ -263,6 +271,7 @@ fun versionCatalogProjectSpec() = ProjectSpec( version = "1.0.0", properties = defaultProperties, sourceFiles = emptyList(), + basePluginConfig = "configure(new VersionCatalog())", buildFileExtra = """ catalog { versionCatalog { diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/Subjects.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/Subjects.kt index ad2b5d82..9214c262 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/Subjects.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/Subjects.kt @@ -100,18 +100,20 @@ class ProjectResultSubject private constructor( open class ArtifactSubject internal constructor( failureMetadata: FailureMetadata, private val artifact: Path, + private val result: ProjectResult, ) : Subject(failureMetadata, artifact) { companion object { private val BUILD_RESULT_SUBJECT_FACTORY: Factory> = - Factory { metadata, actual -> ArtifactSubject(metadata, actual.first) } + Factory { metadata, actual -> ArtifactSubject(metadata, actual.first, actual.second) } fun artifact() = BUILD_RESULT_SUBJECT_FACTORY } fun exists() { if (!artifact.exists()) { - failWithoutActual(fact("expected to exist", artifact)) + val files = result.repo.toFile().walkTopDown().filter { it.isFile }.toList() + failWithActual(fact("expected to exist", artifact), fact("but repo contained", files)) } } @@ -134,7 +136,7 @@ class SourcesJarSubject private constructor( failureMetadata: FailureMetadata, private val artifact: Path, private val result: ProjectResult, -) : ArtifactSubject(failureMetadata, artifact) { +) : ArtifactSubject(failureMetadata, artifact, result) { companion object { private val BUILD_RESULT_SUBJECT_FACTORY: Factory> = @@ -200,7 +202,7 @@ class PomSubject private constructor( failureMetadata: FailureMetadata, private val artifact: Path, private val result: ProjectResult, -) : ArtifactSubject(failureMetadata, artifact) { +) : ArtifactSubject(failureMetadata, artifact, result) { companion object { private val BUILD_RESULT_SUBJECT_FACTORY: Factory> = diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/TestOptions.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/TestOptions.kt index b6c4deb4..bf9bdc98 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/TestOptions.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/TestOptions.kt @@ -8,6 +8,7 @@ data class TestOptions( enum class Config { DSL, PROPERTIES, + BASE, } enum class Signing { NO_SIGNING, diff --git a/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt b/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt index e9ad10f4..d28af25d 100644 --- a/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt +++ b/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt @@ -294,10 +294,12 @@ data class KotlinJs @JvmOverloads constructor( override fun configure(project: Project) { // Create publication, since Kotlin/JS doesn't provide one by default. // https://youtrack.jetbrains.com/issue/KT-41582 - project.gradlePublishing.publications.create(PUBLICATION_NAME, MavenPublication::class.java) { - it.from(project.components.getByName("kotlin")) - it.withSourcesJar { project.kotlinSourcesJar(sourcesJar) } - it.withJavadocJar { project.javadocJarTask(javadocJar) } + project.afterEvaluate { + project.gradlePublishing.publications.create(PUBLICATION_NAME, MavenPublication::class.java) { + it.from(project.components.getByName("kotlin")) + it.withSourcesJar { project.kotlinSourcesJar(sourcesJar) } + it.withJavadocJar { project.javadocJarTask(javadocJar) } + } } } }