From 51b15269daf20770c34f817dbe81c4e549581d7b Mon Sep 17 00:00:00 2001 From: Martin Bonnin Date: Fri, 27 Jun 2025 11:30:56 +0200 Subject: [PATCH 1/2] Make uploading snapshots less verbose Also do not authenticate the GET calls --- .../internal/task/nmcpPublishFileByFile.kt | 41 ------------------- .../task/nmcpPublishFileByFileToSnapshots.kt | 40 ++++++++++++++++++ .../task/nmcpPublishWithPublisherApi.kt | 2 +- nmcp/src/main/kotlin/nmcp/internal/utils.kt | 6 +-- .../main/kotlin/nmcp/transport/transport.kt | 21 +++++----- 5 files changed, 55 insertions(+), 55 deletions(-) delete mode 100644 nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFile.kt create mode 100644 nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFileToSnapshots.kt diff --git a/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFile.kt b/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFile.kt deleted file mode 100644 index 4785bba..0000000 --- a/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFile.kt +++ /dev/null @@ -1,41 +0,0 @@ -package nmcp.internal.task - -import gratatouille.tasks.GInputFiles -import gratatouille.tasks.GLogger -import gratatouille.tasks.GTask -import nmcp.transport.FilesystemTransport -import nmcp.transport.HttpTransport -import nmcp.transport.NmcpCredentials -import nmcp.transport.publishFileByFile - -@GTask(pure = false) -internal fun nmcpPublishFileByFile( - logger: GLogger, - url: String, - username: String?, - password: String?, - inputFiles: GInputFiles, -) { - val credentials = if (username != null) { - check(!password.isNullOrBlank()) { - "Nmcp: password is missing" - } - NmcpCredentials(username, password) - } else { - null - } - - val transport = when { - url.startsWith("http://") || url.startsWith("https://") -> { - HttpTransport(url, credentials, logger) - } - url.startsWith("file://") -> { - FilesystemTransport(url.substring("file://".length)) - } - else -> { - error("Nmcp: unsupported url '$url'") - } - } - - publishFileByFile(transport, inputFiles) -} diff --git a/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFileToSnapshots.kt b/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFileToSnapshots.kt new file mode 100644 index 0000000..bfe1dba --- /dev/null +++ b/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishFileByFileToSnapshots.kt @@ -0,0 +1,40 @@ +package nmcp.internal.task + +import gratatouille.tasks.GInputFiles +import gratatouille.tasks.GLogger +import gratatouille.tasks.GTask +import nmcp.transport.HttpTransport +import nmcp.transport.publishFileByFile +import okhttp3.Credentials + +@GTask(pure = false) +internal fun nmcpPublishFileByFileToSnapshots( + logger: GLogger, + snapshotsUrl: String, + username: String?, + password: String?, + inputFiles: GInputFiles, +) { + val authorizationHeader = if (username != null) { + check(!password.isNullOrBlank()) { + "Nmcp: password is missing" + } + /** + * Should this be "Basic ${Credentials.basic(username, password)}"? + * I can't find a good reference on this + */ + Credentials.basic(username, password) + } else { + null + } + + val transport = HttpTransport( + baseUrl = snapshotsUrl, + getAuthorization = null, + putAuthorization = authorizationHeader, + logger = logger, + ) + + logger.lifecycle("Nmcp: uploading files to $snapshotsUrl") + publishFileByFile(transport, inputFiles) +} diff --git a/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishWithPublisherApi.kt b/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishWithPublisherApi.kt index 429a900..4eceb87 100644 --- a/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishWithPublisherApi.kt +++ b/nmcp/src/main/kotlin/nmcp/internal/task/nmcpPublishWithPublisherApi.kt @@ -166,7 +166,7 @@ private fun verifyStatus( ): Status { Request.Builder() .post(ByteString.EMPTY.toRequestBody()) - .addHeader("Authorization", "UserToken $token") + .addHeader("Authorization", "Bearer $token") .url(baseUrl + "api/v1/publisher/status?id=$deploymentId") .build() .let { diff --git a/nmcp/src/main/kotlin/nmcp/internal/utils.kt b/nmcp/src/main/kotlin/nmcp/internal/utils.kt index ed8ae4d..ead957b 100644 --- a/nmcp/src/main/kotlin/nmcp/internal/utils.kt +++ b/nmcp/src/main/kotlin/nmcp/internal/utils.kt @@ -3,7 +3,7 @@ package nmcp.internal import gratatouille.wiring.capitalizeFirstLetter import nmcp.CentralPortalOptions import nmcp.internal.task.NmcpPublishWithPublisherApiTask -import nmcp.internal.task.registerNmcpPublishFileByFileTask +import nmcp.internal.task.registerNmcpPublishFileByFileToSnapshotsTask import nmcp.internal.task.registerNmcpPublishWithPublisherApiTask import org.gradle.api.Action import org.gradle.api.Named @@ -82,11 +82,11 @@ internal fun Project.registerPublishToCentralPortalTasks( } } - val snapshots = registerNmcpPublishFileByFileTask( + val snapshots = registerNmcpPublishFileByFileToSnapshotsTask( taskName = snapshotTaskName, username = spec.username, password = spec.password, - url = project.provider { "https://central.sonatype.com/repository/maven-snapshots/" }, + snapshotsUrl = project.provider { "https://central.sonatype.com/repository/maven-snapshots/" }, inputFiles = inputFiles, ) if (snapshotsLifecycleTaskName != null) { diff --git a/nmcp/src/main/kotlin/nmcp/transport/transport.kt b/nmcp/src/main/kotlin/nmcp/transport/transport.kt index 345765d..392d54e 100644 --- a/nmcp/src/main/kotlin/nmcp/transport/transport.kt +++ b/nmcp/src/main/kotlin/nmcp/transport/transport.kt @@ -49,22 +49,21 @@ interface Content { fun writeTo(sink: BufferedSink) } -internal class NmcpCredentials(val username: String, val password: String) +private fun Request.Builder.maybeAddAuthorization(authorization: String?) = apply { + if (authorization != null) { + addHeader("Authorization", authorization) + } +} internal class HttpTransport( baseUrl: String, - private val credentials: NmcpCredentials?, + private val getAuthorization: String?, + private val putAuthorization: String?, private val logger: GLogger, ) : Transport { private val client = nmcp.internal.task.nmcpClient.newBuilder() .addInterceptor { chain -> val builder = chain.request().newBuilder() - if (credentials != null) { - builder.addHeader( - "Authorization", - Credentials.basic(credentials.username, credentials.password), - ) - } builder.addHeader("Accept", "application/json") builder.addHeader("User-Agent", "nmcp") chain.proceed(builder.build()) @@ -78,11 +77,12 @@ internal class HttpTransport( .addPathSegments(path) .build() - logger.lifecycle("Nmcp: get '$url'") + logger.info("Nmcp: get '$url'") val response = Request.Builder() .get() .url(url) + .maybeAddAuthorization(getAuthorization) .build() .let { client.newCall(it).execute() @@ -103,11 +103,12 @@ internal class HttpTransport( .addPathSegments(path) .build() - logger.lifecycle("Nmcp: put '$url'") + logger.info("Nmcp: put '$url'") val response = Request.Builder() .put(body.toRequestBody()) .url(url) + .maybeAddAuthorization(putAuthorization) .build() .let { client.newCall(it).execute() From 73949b1630deca29d316238e88848d3b052db601 Mon Sep 17 00:00:00 2001 From: Martin Bonnin Date: Fri, 27 Jun 2025 11:36:57 +0200 Subject: [PATCH 2/2] update apiDump --- nmcp/api/nmcp.api | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nmcp/api/nmcp.api b/nmcp/api/nmcp.api index b3a7bff..c2e7e31 100644 --- a/nmcp/api/nmcp.api +++ b/nmcp/api/nmcp.api @@ -72,13 +72,13 @@ public final class nmcp/internal/task/MetadataKt { public static final fun getXml ()Lkotlinx/serialization/StringFormat; } -public final class nmcp/internal/task/NmcpPublishFileByFileEntryPoint { - public static final field Companion Lnmcp/internal/task/NmcpPublishFileByFileEntryPoint$Companion; +public final class nmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint { + public static final field Companion Lnmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint$Companion; public fun ()V public static final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V } -public final class nmcp/internal/task/NmcpPublishFileByFileEntryPoint$Companion { +public final class nmcp/internal/task/NmcpPublishFileByFileToSnapshotsEntryPoint$Companion { public final fun run (Ljava/util/function/BiConsumer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V }