Utilities for publishing
This commit is contained in:
parent
d1d784872a
commit
27f56033b1
22
README.md
22
README.md
@ -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")
|
||||
}
|
||||
```
|
@ -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)
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
||||
}
|
||||
}
|
@ -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
|
@ -1 +1 @@
|
||||
implementation-class=ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.SetupBuildScript
|
||||
implementation-class=ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.SetupBuildScript
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user