From 8d04b5d41057ed52a5ca0fb618a673a85d377f7f Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Tue, 5 Nov 2024 05:26:02 +0300 Subject: [PATCH] Some useful functions and building --- embed/build.gradle.kts | 48 ++++++++++++++++++ embed/gradle.properties | 1 + embed/settings.gradle.kts | 2 + impl/build.gradle.kts | 50 +++++++++++++++++++ impl/gradle.properties | 1 + impl/settings.gradle.kts | 2 + .../kotlin/kmp_gradle_build_helper/repos.kt | 27 ++++++++++ .../kotlin/kmp_gradle_build_helper/targets.kt | 43 ++++++++++++++++ kotlin-version.txt | 1 + library-version.txt | 1 + 10 files changed, 176 insertions(+) create mode 100644 embed/build.gradle.kts create mode 100644 embed/gradle.properties create mode 100644 embed/settings.gradle.kts create mode 100644 impl/build.gradle.kts create mode 100644 impl/gradle.properties create mode 100644 impl/settings.gradle.kts create mode 100644 impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/repos.kt create mode 100644 impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/targets.kt create mode 100644 kotlin-version.txt create mode 100644 library-version.txt diff --git a/embed/build.gradle.kts b/embed/build.gradle.kts new file mode 100644 index 0000000..cc3d4a5 --- /dev/null +++ b/embed/build.gradle.kts @@ -0,0 +1,48 @@ +import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.defineXomrkGiteaMavenRepo + +buildscript { + fun readTextFile(relPath: String) = rootDir.resolve(relPath).readText().trim() + + + dependencies { + classpath("ru.landgrafhomyak.kotlin:kotlin-mpp-gradle-build-helper:v${readTextFile("../library-version.txt")}k${readTextFile("../kotlin-version.txt")}") + } +} + +plugins { + kotlin("multiplatform") version "2.0.20" + `maven-publish` +} + +fun readTextFile(relPath: String) = rootDir.resolve(relPath).readText().trim() + +val targetKotlinVersion = readTextFile("../kotlin-version.txt") + +group = "ru.landgrafhomyak.kotlin" +version = "v${readTextFile("../library-version.txt")}k${targetKotlinVersion}" + +repositories { + mavenCentral() +} + + + +kotlin { + jvmToolchain(8) + jvm() + + sourceSets { + jvmMain { + dependencies { + implementation("${group}:kotlin-mpp-gradle-build-helper:${targetKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${targetKotlinVersion}") + } + } + } +} + +publishing { + repositories { + defineXomrkGiteaMavenRepo() + } +} \ No newline at end of file diff --git a/embed/gradle.properties b/embed/gradle.properties new file mode 100644 index 0000000..29e08e8 --- /dev/null +++ b/embed/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/embed/settings.gradle.kts b/embed/settings.gradle.kts new file mode 100644 index 0000000..af3c3cd --- /dev/null +++ b/embed/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "kotlin-mpp-gradle-build" + diff --git a/impl/build.gradle.kts b/impl/build.gradle.kts new file mode 100644 index 0000000..fb68c2e --- /dev/null +++ b/impl/build.gradle.kts @@ -0,0 +1,50 @@ +plugins { + kotlin("multiplatform") version "2.0.20" + `maven-publish` +} + +fun readTextFile(relPath:String) = rootDir.resolve(relPath).readText().trim() + +val targetKotlinVersion = readTextFile("../kotlin-version.txt") + +group = "ru.landgrafhomyak.kotlin" +version = "v${readTextFile("../library-version.txt")}k${targetKotlinVersion}" + +repositories { + mavenCentral() +} + + +kotlin { + explicitApi() + jvmToolchain(8) + jvm() + + sourceSets { + jvmMain { + dependencies { + compileOnly("dev.gradleplugins:gradle-api:7.5.1") + compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:${targetKotlinVersion}") + } + } + } +} + +publishing { + // other settings of publication + repositories { + maven { + name = "XomrkMaven" + url = uri("https://git.landgrafhomyak.ru/api/packages/xomrk/maven") + + credentials(HttpHeaderCredentials::class) { + name = "Authorization" + value = "token ${System.getenv("XOMRK_MAVEN_REPO_DEPLOY_TOKEN")}" + } + + authentication { + create("header") + } + } + } +} \ No newline at end of file diff --git a/impl/gradle.properties b/impl/gradle.properties new file mode 100644 index 0000000..29e08e8 --- /dev/null +++ b/impl/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/impl/settings.gradle.kts b/impl/settings.gradle.kts new file mode 100644 index 0000000..fc7e01a --- /dev/null +++ b/impl/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "kotlin-mpp-gradle-build-helper" + diff --git a/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/repos.kt b/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/repos.kt new file mode 100644 index 0000000..03668a3 --- /dev/null +++ b/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/repos.kt @@ -0,0 +1,27 @@ +package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper + +import java.net.URI +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.credentials.HttpHeaderCredentials +import org.gradle.authentication.http.HttpHeaderAuthentication + +public fun RepositoryHandler.defineXomrkGiteaMavenRepo( + user: String = "xomrk", + token: String? = System.getenv("XOMRK_GITEA_MAVEN_REPO_DEPLOY_TOKEN") +) { + maven { b -> + b.name = "XomrkMaven" + b.url = URI("https://git.landgrafhomyak.ru/api/packages/${user}/maven") + + if (token != null) { + b.credentials(HttpHeaderCredentials::class.java) { c -> + c.name = "Authorization" + c.value = "token ${token}" + } + + b.authentication { a -> + a.create("header", HttpHeaderAuthentication::class.java) + } + } + } +} \ No newline at end of file diff --git a/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/targets.kt b/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/targets.kt new file mode 100644 index 0000000..6795e49 --- /dev/null +++ b/impl/src/jvmMain/kotlin/ru/landgrafhomyak/kotlin/kmp_gradle_build_helper/targets.kt @@ -0,0 +1,43 @@ +package ru.landgrafhomyak.kotlin.kmp_gradle_build_helper + +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension + +@OptIn(ExperimentalWasmDsl::class) +public fun KotlinMultiplatformExtension.defineAllTargets() { + jvm { + } + js(IR) { + browser() + nodejs() + } + wasmWasi { wasm -> + wasm.nodejs() + } + wasmJs { wasm -> + wasm.nodejs() + wasm.browser() + wasm.d8() + } + + macosArm64() + macosX64() + linuxArm64() + linuxX64() + mingwX64() + androidNativeArm32() + androidNativeArm64() + androidNativeX64() + androidNativeX86() + iosArm64() + iosSimulatorArm64() + iosX64() + tvosX64() + tvosArm64() + tvosSimulatorArm64() + watchosX64() + watchosArm32() + watchosArm64() + watchosDeviceArm64() + watchosSimulatorArm64() +} \ No newline at end of file diff --git a/kotlin-version.txt b/kotlin-version.txt new file mode 100644 index 0000000..a30e84f --- /dev/null +++ b/kotlin-version.txt @@ -0,0 +1 @@ +2.0.20 \ No newline at end of file diff --git a/library-version.txt b/library-version.txt new file mode 100644 index 0000000..ceab6e1 --- /dev/null +++ b/library-version.txt @@ -0,0 +1 @@ +0.1 \ No newline at end of file