Utilities for publishing

This commit is contained in:
Andrew Golovashevich 2024-11-09 16:30:04 +03:00
parent d1d784872a
commit 27f56033b1
9 changed files with 78 additions and 8 deletions

View File

@ -7,6 +7,8 @@
### As library
```kotlin
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.*
buildscript {
repositories {
mavenCentral()
@ -42,6 +44,9 @@ kotlin {
### As plugin (custom repository)
```kotlin
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.*
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.xomrk
buildscript {
repositories {
mavenCentral()
@ -74,6 +79,8 @@ xomrk {
This library officially isn't published, so this way wouldn't work
```kotlin
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.*
plugins {
id("ru.landgrafhomyak.kotlin.original-multiplatform-ext") version "v0.1k2.0.20"
}
@ -92,6 +99,10 @@ xomrk {
## Functionality
```kotlin
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.*
// ...
kotlin {
// Configures compilations of all targets
configureAllCompilations { }
@ -116,4 +127,15 @@ kotlin {
// defines all possible targets, useful for 'algorithm' libraries that are not depends on platform
defineAllMultiplatformTargets()
}
publishing {
// useful for single-platform (e.g. JVM-only) libraries
forceSetAllMavenArtifactsId(project.name)
// safe replacing for libraries with many targets
replaceAllMavenArtifactsIdPrefixes(project.name, "custom-name")
// replacing of platform id (but better to do it in kotlin {...} block)
replaceAllMavenArtifactsIdSuffixes("js", "frontend")
}
```

View File

@ -1,5 +1,6 @@
import java.util.Properties
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineXomrkGiteaMavenRepo
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.forceSetAllMavenArtifactsId
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
buildscript {
@ -52,4 +53,6 @@ publishing {
repositories {
defineXomrkGiteaMavenRepo()
}
forceSetAllMavenArtifactsId(project.name)
}

View File

@ -1,4 +1,4 @@
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
@ -15,5 +15,8 @@ class SetupBuildScript : Plugin<Project> {
@JvmStatic
val KOTLIN_MULTIPLATFORM = "org.jetbrains.kotlin.multiplatform"
@JvmStatic
val MAVEN_PUBLISHING = "org.gradle.maven-publish"
}
}

View File

@ -1,11 +1,12 @@
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import kotlin.reflect.KClass
import org.gradle.api.Project
import org.gradle.api.publish.PublishingExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.SetupBuildScript.PluginIDs
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.SetupBuildScript.PluginIDs
open class XomrkDsl internal constructor(private val project: Project) {
@Suppress("FunctionName")
@ -34,4 +35,9 @@ open class XomrkDsl internal constructor(private val project: Project) {
this._wrapExtension(PluginIDs.KOTLIN_MULTIPLATFORM, KotlinMultiplatformExtension::class, config)
}
fun publishing(config: PublishingExtension.() -> Unit) {
this._wrapExtension(PluginIDs.MAVEN_PUBLISHING, PublishingExtension::class, config)
}
}

View File

@ -1,4 +1,4 @@
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract

View File

@ -1 +1 @@
implementation-class=ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.SetupBuildScript
implementation-class=ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.SetupBuildScript

View File

@ -3,12 +3,11 @@
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
public fun KotlinMultiplatformExtension.configureAllCompilations(action: KotlinCompilation<KotlinCommonOptions>.() -> Unit) {
public fun KotlinMultiplatformExtension.configureAllCompilations(action: KotlinCompilation<*>.() -> Unit) {
this.targets.configureEach { t ->
t.compilations.configureEach(action)
}

View File

@ -0,0 +1,30 @@
package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
public fun PublishingExtension.forceSetAllMavenArtifactsId(newName: String) {
this.publications { c ->
c.withType(MavenPublication::class.java) { p ->
p.artifactId = newName
}
}
}
public fun PublishingExtension.replaceAllMavenArtifactsIdPrefixes(oldPrefix: String, newPrefix: String) {
val pattern = Regex("^${Regex.escape(oldPrefix)}")
this.publications { c ->
c.withType(MavenPublication::class.java) { p ->
p.artifactId = p.artifactId.replace(pattern, newPrefix)
}
}
}
public fun PublishingExtension.replaceAllMavenArtifactsIdSuffixes(oldSuffix: String, newSuffix: String) {
val pattern = Regex("${Regex.escape(oldSuffix)}$")
this.publications { c ->
c.withType(MavenPublication::class.java) { p ->
p.artifactId = p.artifactId.replace(pattern, newSuffix)
}
}
}

View File

@ -1,7 +1,9 @@
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.configureAllCompilations
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineAllMultiplatformTargets
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineXomrkGiteaMavenRepo
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.forceSetAllMavenArtifactsId
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.optInContracts
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.xomrk
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.xomrk
buildscript {
val versions = java.util.Properties()
@ -27,5 +29,10 @@ xomrk {
jvmToolchain(8)
defineAllMultiplatformTargets()
optInContracts()
configureAllCompilations { this.compileTaskProvider }
}
publishing {
forceSetAllMavenArtifactsId(project.name)
}
}