Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions nmcp/api/nmcp.api
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ public final class nmcp/internal/task/MetadataKt {
public static final fun getXml ()Lkotlinx/serialization/StringFormat;
}

public final class nmcp/internal/task/NmcpFindDeploymentNameEntryPoint {
public static final field Companion Lnmcp/internal/task/NmcpFindDeploymentNameEntryPoint$Companion;
public fun <init> ()V
public static final fun run (Ljava/util/List;Ljava/io/File;)V
}

public final class nmcp/internal/task/NmcpFindDeploymentNameEntryPoint$Companion {
public final fun run (Ljava/util/List;Ljava/io/File;)V
}

public final class nmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint {
public static final field Companion Lnmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint$Companion;
public fun <init> ()V
Expand All @@ -85,11 +95,11 @@ public final class nmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint
public final class nmcp/internal/task/NmcpPublishWithPublisherApiEntryPoint {
public static final field Companion Lnmcp/internal/task/NmcpPublishWithPublisherApiEntryPoint$Companion;
public fun <init> ()V
public static final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/List;)V
public static final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/io/File;)V
}

public final class nmcp/internal/task/NmcpPublishWithPublisherApiEntryPoint$Companion {
public final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/List;)V
public final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/io/File;)V
}

public final class nmcp/internal/task/OkhttpKt {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package nmcp.internal.task

import gratatouille.tasks.GInputFiles
import gratatouille.tasks.GOutputFile
import gratatouille.tasks.GTask
import kotlin.collections.distinct
import kotlin.collections.map
import kotlin.collections.mapNotNull
import kotlin.collections.single
import kotlin.text.buildString
import kotlin.text.endsWith
import kotlin.text.substringBeforeLast


internal fun GInputFiles.findDeploymentName(): String {
val gavs = mapNotNull {
@GTask
internal fun nmcpFindDeploymentName(inputFiles: GInputFiles, outputFile: GOutputFile) {
val gavs = inputFiles.mapNotNull {
if (!it.normalizedPath.endsWith(".pom")) {
return@mapNotNull null
}
Expand All @@ -22,7 +26,7 @@ internal fun GInputFiles.findDeploymentName(): String {
val artifacts = gavs.map { it.artifactId }.distinct()
val versions = gavs.map { it.version }.distinct()

return buildString {
val deploymentName = buildString {
if (groups.size == 1) {
append(groups.single())
} else {
Expand All @@ -41,4 +45,5 @@ internal fun GInputFiles.findDeploymentName(): String {
append("multiple-versions")
}
}
outputFile.writeText(deploymentName)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package nmcp.internal.task

import gratatouille.tasks.GInputFile
import gratatouille.tasks.GInputFiles
import gratatouille.tasks.GLogger
import gratatouille.tasks.GTask
Expand All @@ -18,6 +19,7 @@ import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MultipartBody
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import okio.Buffer
import okio.BufferedSink
Expand All @@ -29,12 +31,12 @@ internal fun nmcpPublishWithPublisherApi(
logger: GLogger,
username: String?,
password: String?,
publicationName: String?,
publicationName: String,
publishingType: String?,
baseUrl: String?,
validationTimeoutSeconds: Long?,
publishingTimeoutSeconds: Long?,
inputFiles: GInputFiles,
inputFile: GInputFile,
) {
check(!username.isNullOrBlank()) {
"Nmcp: username is missing"
Expand All @@ -50,8 +52,8 @@ internal fun nmcpPublishWithPublisherApi(
val body = MultipartBody.Builder()
.addFormDataPart(
"bundle",
publicationName ?: inputFiles.findDeploymentName(),
ZipBody(inputFiles, logger),
publicationName,
inputFile.asRequestBody("application/octet-stream".toMediaType()),
)
.build()

Expand Down
26 changes: 24 additions & 2 deletions nmcp/src/main/kotlin/nmcp/internal/utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package nmcp.internal
import gratatouille.wiring.capitalizeFirstLetter
import nmcp.CentralPortalOptions
import nmcp.internal.task.NmcpPublishWithPublisherApiTask
import nmcp.internal.task.registerNmcpFindDeploymentNameTask
import nmcp.internal.task.registerNmcpPublishFileByFileToSnapshotsTask
import nmcp.internal.task.registerNmcpPublishWithPublisherApiTask
import org.gradle.api.Action
Expand All @@ -13,6 +14,7 @@ import org.gradle.api.attributes.HasConfigurableAttributes
import org.gradle.api.attributes.Usage
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.bundling.Zip

internal fun Project.withRequiredPlugin(id: String, block: () -> Unit) {
var hasPlugin = false
Expand Down Expand Up @@ -55,6 +57,8 @@ internal fun Project.registerPublishToCentralPortalTasks(

val releaseTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortal"
val snapshotTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortalSnapshots"
val zipTaskName = "nmcpZip${name.capitalizeFirstLetter()}"
val findDeploymentNameTaskName = "nmcpFind${name.capitalizeFirstLetter()}DeploymentName"

val shortcut = when(name) {
"aggregation",
Expand All @@ -64,12 +68,30 @@ internal fun Project.registerPublishToCentralPortalTasks(
val lifecycleTaskName = shortcut?.let { "publish${it.capitalizeFirstLetter()}ToCentralPortal" }
val snapshotsLifecycleTaskName = shortcut?.let { "publish${it.capitalizeFirstLetter()}ToCentralPortalSnapshots" }

val zipName = "${name}.zip"
val zipTaskProvider = tasks.register(zipTaskName, Zip::class.java) {
it.from(inputFiles)
it.destinationDirectory.set(project.layout.buildDirectory.dir("nmcp/zip"))
it.archiveFileName.set(zipName)
it.eachFile {
// Exclude maven-metadata files, or the bundle is not recognized
// See https://slack-chats.kotlinlang.org/t/16407246/anyone-tried-the-https-central-sonatype-org-publish-publish-#c8738fe5-8051-4f64-809f-ca67a645216e
if (it.name.startsWith("maven-metadata")) {
it.exclude()
}
}
}

val findDeploymentNameTaskProvider = registerNmcpFindDeploymentNameTask(
taskName = findDeploymentNameTaskName,
inputFiles = inputFiles,
)
val task = registerNmcpPublishWithPublisherApiTask(
taskName = releaseTaskName,
inputFiles = inputFiles,
inputFile = zipTaskProvider.flatMap { it.archiveFile },
username = spec.username,
password = spec.password,
publicationName = spec.publicationName,
publicationName = spec.publicationName.orElse(findDeploymentNameTaskProvider.flatMap { it.outputFile }.map { it.asFile.readText() }),
publishingType = spec.publishingType,
baseUrl = spec.baseUrl,
validationTimeoutSeconds = spec.validationTimeout.map { it.seconds },
Expand Down
20 changes: 19 additions & 1 deletion tests/kmp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,14 @@ tasks.register("checkZip") {
}
}

// println(paths.sorted().joinToString(",\n"))
//println(paths.sorted().joinToString(",\n"))
check(
paths.sorted().equals(
listOf(
"sample/",
"sample/kmp/",
"sample/kmp/module1-js/",
"sample/kmp/module1-js/0.0.1/",
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1-sources.jar",
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1-sources.jar.md5",
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1-sources.jar.sha1",
Expand All @@ -84,6 +88,8 @@ tasks.register("checkZip") {
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1.pom.sha1",
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1.pom.sha256",
"sample/kmp/module1-js/0.0.1/module1-js-0.0.1.pom.sha512",
"sample/kmp/module1-jvm/",
"sample/kmp/module1-jvm/0.0.1/",
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1-sources.jar",
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1-sources.jar.md5",
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1-sources.jar.sha1",
Expand All @@ -104,6 +110,8 @@ tasks.register("checkZip") {
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1.pom.sha1",
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1.pom.sha256",
"sample/kmp/module1-jvm/0.0.1/module1-jvm-0.0.1.pom.sha512",
"sample/kmp/module1-linuxarm64/",
"sample/kmp/module1-linuxarm64/0.0.1/",
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1-sources.jar",
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1-sources.jar.md5",
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1-sources.jar.sha1",
Expand All @@ -124,6 +132,8 @@ tasks.register("checkZip") {
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1.pom.sha1",
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1.pom.sha256",
"sample/kmp/module1-linuxarm64/0.0.1/module1-linuxarm64-0.0.1.pom.sha512",
"sample/kmp/module1/",
"sample/kmp/module1/0.0.1/",
"sample/kmp/module1/0.0.1/module1-0.0.1-kotlin-tooling-metadata.json",
"sample/kmp/module1/0.0.1/module1-0.0.1-kotlin-tooling-metadata.json.md5",
"sample/kmp/module1/0.0.1/module1-0.0.1-kotlin-tooling-metadata.json.sha1",
Expand All @@ -149,6 +159,8 @@ tasks.register("checkZip") {
"sample/kmp/module1/0.0.1/module1-0.0.1.pom.sha1",
"sample/kmp/module1/0.0.1/module1-0.0.1.pom.sha256",
"sample/kmp/module1/0.0.1/module1-0.0.1.pom.sha512",
"sample/kmp/module2-js/",
"sample/kmp/module2-js/0.0.1/",
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1-sources.jar",
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1-sources.jar.md5",
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1-sources.jar.sha1",
Expand All @@ -169,6 +181,8 @@ tasks.register("checkZip") {
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1.pom.sha1",
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1.pom.sha256",
"sample/kmp/module2-js/0.0.1/module2-js-0.0.1.pom.sha512",
"sample/kmp/module2-jvm/",
"sample/kmp/module2-jvm/0.0.1/",
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1-sources.jar",
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1-sources.jar.md5",
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1-sources.jar.sha1",
Expand All @@ -189,6 +203,8 @@ tasks.register("checkZip") {
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1.pom.sha1",
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1.pom.sha256",
"sample/kmp/module2-jvm/0.0.1/module2-jvm-0.0.1.pom.sha512",
"sample/kmp/module2-linuxarm64/",
"sample/kmp/module2-linuxarm64/0.0.1/",
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1-sources.jar",
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1-sources.jar.md5",
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1-sources.jar.sha1",
Expand All @@ -209,6 +225,8 @@ tasks.register("checkZip") {
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1.pom.sha1",
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1.pom.sha256",
"sample/kmp/module2-linuxarm64/0.0.1/module2-linuxarm64-0.0.1.pom.sha512",
"sample/kmp/module2/",
"sample/kmp/module2/0.0.1/",
"sample/kmp/module2/0.0.1/module2-0.0.1-kotlin-tooling-metadata.json",
"sample/kmp/module2/0.0.1/module2-0.0.1-kotlin-tooling-metadata.json.md5",
"sample/kmp/module2/0.0.1/module2-0.0.1-kotlin-tooling-metadata.json.sha1",
Expand Down