diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000..ae9840f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{kt,kts}] +ij_kotlin_imports_layout = * +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true +ij_kotlin_line_break_after_multiline_when_entry = false +ij_kotlin_name_count_to_use_star_import = 999 +ij_kotlin_name_count_to_use_star_import_for_members = 999 +ij_kotlin_packages_to_use_import_on_demand = unset +indent_size = 4 +ktlint_code_style = intellij_idea +ktlint_standard_function-expression-body = disabled + +[*.md] +trim_trailing_whitespace = false diff --git a/build.gradle.kts b/build.gradle.kts index 21c1861..bdbf914 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,12 +39,14 @@ publishing { publications.configureEach { this as MavenPublication if (name == "pluginMaven") { - artifact(tasks.register("emptySources", Jar::class.java) { + val emptySources by tasks.registering(Jar::class) { archiveClassifier = "sources" - }) - artifact(tasks.register("emptyDocs", Jar::class.java) { + } + val emptyDocs by tasks.registering(Jar::class) { archiveClassifier = "javadoc" - }) + } + artifact(emptySources) + artifact(emptyDocs) groupId = project.rootProject.group.toString() version = project.rootProject.version.toString() @@ -100,4 +102,4 @@ tasks.withType().configureEach { tasks.withType(Sign::class.java).configureEach { isEnabled = System.getenv("GPG_KEY").isNullOrBlank().not() -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 55cd296..e94dd15 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,4 +8,4 @@ okhttp = "com.squareup.okhttp3:okhttp:4.12.0" okhttp-logging-interceptor = "com.squareup.okhttp3:logging-interceptor:4.12.0" mockwebserver = "com.squareup.okhttp3:mockwebserver:4.12.0" [plugins] -kgp = { id = "org.jetbrains.kotlin.jvm", version.ref = "kgp" } \ No newline at end of file +kgp = { id = "org.jetbrains.kotlin.jvm", version.ref = "kgp" } diff --git a/settings.gradle.kts b/settings.gradle.kts index f909477..6a132e1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,10 @@ pluginManagement { - listOf(repositories, dependencyResolutionManagement.repositories).forEach { - it.apply { - mavenCentral() + listOf( + repositories, + dependencyResolutionManagement.repositories, + ).forEach { + it.apply { + mavenCentral() + } } - } -} \ No newline at end of file +} diff --git a/src/main/kotlin/nmcp/NmcpAggregation.kt b/src/main/kotlin/nmcp/NmcpAggregation.kt index 8738419..67e7b20 100644 --- a/src/main/kotlin/nmcp/NmcpAggregation.kt +++ b/src/main/kotlin/nmcp/NmcpAggregation.kt @@ -1,15 +1,15 @@ package nmcp +import java.time.Duration +import javax.inject.Inject import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.provider.Property -import java.time.Duration -import javax.inject.Inject abstract class NmcpAggregation @Inject constructor( private val configuration: Configuration, private val project: Project, - ) { +) { /** * The central portal username */ @@ -57,6 +57,6 @@ abstract class NmcpAggregation @Inject constructor( abstract val verificationTimeout: Property fun project(path: String) { - project.dependencies.add(configuration.name, project.dependencies.project(mapOf("path" to path))) + project.dependencies.add(configuration.name, project.dependencies.project(mapOf("path" to path))) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/nmcp/NmcpExtension.kt b/src/main/kotlin/nmcp/NmcpExtension.kt index e711464..d2a72a6 100644 --- a/src/main/kotlin/nmcp/NmcpExtension.kt +++ b/src/main/kotlin/nmcp/NmcpExtension.kt @@ -66,11 +66,10 @@ open class NmcpExtension(private val project: Project) { it.archiveFileName.set("publication$capitalized.zip") } - val publishTaskProvider = project.tasks.register("publish${capitalized}PublicationToCentralPortal", NmcpPublishTask::class.java) { it.inputFile.set(zipTaskProvider.flatMap { it.archiveFile }) - it.username.set(spec.username.orElse(project.provider { error("Nmcp: username must not be empty")})) - it.password.set(spec.password.orElse(project.provider { error("Nmcp: password must not be empty")})) + it.username.set(spec.username.orElse(project.provider { error("Nmcp: username must not be empty") })) + it.password.set(spec.password.orElse(project.provider { error("Nmcp: password must not be empty") })) it.publicationType.set(spec.publicationType) it.publicationName.set(spec.publicationName.orElse("${project.name}-${project.version}.zip")) it.endpoint.set(spec.endpoint) @@ -140,14 +139,16 @@ open class NmcpExtension(private val project: Project) { action.execute(aggregation) val zipTaskProvider = project.tasks.register("zipAggregationPublication", Zip::class.java) { - it.from(configuration.elements.map { - check (it.isNotEmpty()) { - "nmcp: no aggregate dependencies found, please apply the 'com.gradleup.nmcp' in your submodules" - } - it.map { - project.zipTree(it) - } - }) + it.from( + configuration.elements.map { + check(it.isNotEmpty()) { + "nmcp: no aggregate dependencies found, please apply the 'com.gradleup.nmcp' in your submodules" + } + it.map { + project.zipTree(it) + } + }, + ) it.destinationDirectory.set(project.layout.buildDirectory.dir("nmcp/zip")) it.archiveFileName.set("publicationAggregated.zip") @@ -155,8 +156,8 @@ open class NmcpExtension(private val project: Project) { project.tasks.register("publishAggregatedPublicationToCentralPortal", NmcpPublishTask::class.java) { it.inputFile.set(zipTaskProvider.flatMap { it.archiveFile }) - it.username.set(aggregation.username.orElse(project.provider { error("Nmcp: username must not be empty")})) - it.password.set(aggregation.password.orElse(project.provider { error("Nmcp: password must not be empty")})) + it.username.set(aggregation.username.orElse(project.provider { error("Nmcp: username must not be empty") })) + it.password.set(aggregation.password.orElse(project.provider { error("Nmcp: password must not be empty") })) it.publicationType.set(aggregation.publicationType) it.publicationName.set(aggregation.publicationName.orElse("${project.name}-${project.version}.zip")) it.endpoint.set(aggregation.endpoint) @@ -199,4 +200,4 @@ open class NmcpExtension(private val project: Project) { } } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/nmcp/NmcpPlugin.kt b/src/main/kotlin/nmcp/NmcpPlugin.kt index 852651c..92fcafd 100644 --- a/src/main/kotlin/nmcp/NmcpPlugin.kt +++ b/src/main/kotlin/nmcp/NmcpPlugin.kt @@ -20,7 +20,7 @@ internal fun HasConfigurableAttributes<*>.configureAttributes(project: Project) } } -class NmcpPlugin: Plugin { +class NmcpPlugin : Plugin { override fun apply(target: Project) { target.configurations.create(configurationName) { it.isCanBeConsumed = true @@ -32,4 +32,4 @@ class NmcpPlugin: Plugin { } target.extensions.create("nmcp", NmcpExtension::class.java, target) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/nmcp/NmcpPublishTask.kt b/src/main/kotlin/nmcp/NmcpPublishTask.kt index d08611d..b52e0b8 100644 --- a/src/main/kotlin/nmcp/NmcpPublishTask.kt +++ b/src/main/kotlin/nmcp/NmcpPublishTask.kt @@ -1,5 +1,10 @@ package nmcp +import java.time.Duration +import kotlin.time.Duration.Companion.minutes +import kotlin.time.TimeSource.Monotonic.markNow +import kotlin.time.toJavaDuration +import kotlin.time.toKotlinDuration import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive @@ -14,15 +19,13 @@ import okio.ByteString import org.gradle.api.DefaultTask import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.Property -import org.gradle.api.tasks.* +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault -import java.time.Duration -import kotlin.time.Duration.Companion.minutes -import kotlin.time.Duration.Companion.seconds -import kotlin.time.TimeSource.Monotonic.markNow -import kotlin.time.toJavaDuration -import kotlin.time.toKotlinDuration - @DisableCachingByDefault abstract class NmcpPublishTask : DefaultTask() { @@ -75,7 +78,7 @@ abstract class NmcpPublishTask : DefaultTask() { .addFormDataPart( "bundle", publicationName.get(), - inputFile.get().asFile.asRequestBody("application/zip".toMediaType()) + inputFile.get().asFile.asRequestBody("application/zip".toMediaType()), ) .build() @@ -105,17 +108,20 @@ abstract class NmcpPublishTask : DefaultTask() { val timeout = verificationTimeout.orElse(10.minutes.toJavaDuration()).get() val mark = markNow() while (true) { - check (mark.elapsedNow() < timeout.toKotlinDuration()) { + check(mark.elapsedNow() < timeout.toKotlinDuration()) { "Nmcp: timeout while verifying deployment status." } - when (val status = verifyStatus( - deploymentId = deploymentId, - endpoint = endpoint, - token = token, - )) { + when ( + val status = verifyStatus( + deploymentId = deploymentId, + endpoint = endpoint, + token = token, + ) + ) { PENDING, VALIDATING, - PUBLISHING -> { + PUBLISHING, + -> { // Come back later Thread.sleep(2000) } @@ -201,4 +207,4 @@ private fun verifyStatus( else -> error("Nmcp: unexpected status: $state") } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/nmcp/NmcpSpec.kt b/src/main/kotlin/nmcp/NmcpSpec.kt index bbd9ca3..ddfc156 100644 --- a/src/main/kotlin/nmcp/NmcpSpec.kt +++ b/src/main/kotlin/nmcp/NmcpSpec.kt @@ -1,7 +1,7 @@ package nmcp -import org.gradle.api.provider.Property import java.time.Duration +import org.gradle.api.provider.Property abstract class NmcpSpec { /** @@ -49,4 +49,4 @@ abstract class NmcpSpec { * Default: 600 (10 minutes). */ abstract val verificationTimeout: Property -} \ No newline at end of file +}