build.gradle.kts (154 lines of code) (raw):

// Top-level build file where you can add configuration options common to all sub-projects/modules. import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties import org.jetbrains.dokka.gradle.DokkaMultiModuleTask import org.jetbrains.dokka.gradle.DokkaTaskPartial import org.jetbrains.kotlin.gradle.tasks.KotlinCompile buildscript { repositories { mavenCentral() gradlePluginPortal() google() } dependencies { classpath(BuildPlugins.androidGradlePlugin) classpath(Kotlin.binaryCompatibilityValidatorPlugin) classpath(Kotlin.gradlePlugin) classpath(ktlint) } } plugins { id("org.jetbrains.dokka") version "1.8.10" } repositories { mavenCentral() } tasks.withType<DokkaMultiModuleTask>().configureEach { outputDirectory.set(rootProject.file("docs/api")) failOnWarning.set(true) } // See https://stackoverflow.com/questions/25324880/detect-ide-environment-with-gradle fun isRunningFromIde(): Boolean { return project.properties["android.injected.invoked.from.ide"] == "true" } subprojects { repositories { google() mavenCentral() maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") } } tasks.withType<KotlinCompile>().all { kotlinOptions { // Allow warnings when running from IDE, makes it easier to experiment. if (!isRunningFromIde()) { allWarningsAsErrors = true } freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") } } // taken from https://github.com/google/accompanist/blob/main/build.gradle afterEvaluate { if (tasks.findByName("dokkaHtmlPartial") == null) { // If dokka isn't enabled on this module, skip return@afterEvaluate } tasks.withType<AbstractPublishToMaven>().configureEach { dependsOn(tasks.withType<Sign>()) } tasks.named<DokkaTaskPartial>("dokkaHtmlPartial").configure { dokkaSourceSets.configureEach { reportUndocumented.set(true) skipEmptyPackages.set(true) skipDeprecated.set(true) jdkVersion.set(11) // Add Android SDK packages noAndroidSdkLink.set(false) } } val javadocJar by tasks.registering(Jar::class) { dependsOn(tasks.dokkaJavadoc) archiveClassifier.set("javadoc") from(tasks.dokkaJavadoc.flatMap { it.outputDirectory }) } if (tasks.names.contains("publishKotlinMultiplatformPublicationToMavenRepository")) { tasks.named("publishKotlinMultiplatformPublicationToMavenRepository").configure { dependsOn("signJvmPublication") } } if (tasks.names.contains("publishAndroidReleasePublicationToMavenRepository")) { tasks.named("publishAndroidReleasePublicationToMavenRepository").configure { dependsOn("signJvmPublication") } } } afterEvaluate { fun MavenPublication.configure() { groupId = property("GROUP").toString() version = property("VERSION_NAME").toString() artifact(tasks.named("javadocJar").get()) pom { name.set(property("POM_NAME").toString()) description.set(property("POM_DESCRIPTION").toString()) url.set("https://github.com/halilozercan/compose-richtext") licenses { license { name.set("The Apache Software License, Version 2.0") url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") distribution.set("repo") } } developers { developer { id.set("halilozercan") name.set("Halil Ozercan") } } scm { connection.set("scm:git:git://github.com/halilozercan/compose-richtext.git") url.set("https://github.com/halilozercan/compose-richtext/") developerConnection.set("scm:git:ssh://git@github.com/halilozercan/compose-richtext.git") } } } extensions.findByType<PublishingExtension>()?.apply { repositories { maven { val localProperties = gradleLocalProperties(rootProject.rootDir) val sonatypeUsername = localProperties.getProperty("SONATYPE_USERNAME") ?: System.getenv("SONATYPE_USERNAME") val sonatypePassword = localProperties.getProperty("SONATYPE_PASSWORD") ?: System.getenv("SONATYPE_PASSWORD") val releasesRepoUrl = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2") val snapshotsRepoUrl = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") val version = property("VERSION_NAME").toString() url = uri( if (version.endsWith("SNAPSHOT")) { snapshotsRepoUrl } else { releasesRepoUrl } ) credentials { username = sonatypeUsername password = sonatypePassword } } } publications.withType<MavenPublication>().configureEach { configure() } } extensions.findByType<SigningExtension>()?.apply { val localProperties = gradleLocalProperties(rootProject.rootDir) val gpgPrivateKey = localProperties.getProperty("GPG_PRIVATE_KEY") ?: System.getenv("GPG_PRIVATE_KEY") ?: return@apply val gpgPrivatePassword = localProperties.getProperty("GPG_PRIVATE_PASSWORD") ?: System.getenv("GPG_PRIVATE_PASSWORD") ?: return@apply val publishing = extensions.findByType<PublishingExtension>() ?: return@apply useInMemoryPgpKeys( gpgPrivateKey.replace("\\n", "\n"), gpgPrivatePassword ) sign(publishing.publications) } } } //disable until the library reaches 1.0.0-beta01 //apply plugin: 'binary-compatibility-validator' //apiValidation { // // Ignore all sample projects, since they're not part of our API. // // Only leaf project name is valid configuration, and every project must be individually ignored. // // See https://github.com/Kotlin/binary-compatibility-validator/issues/3 // ignoredProjects += project('sample').name // ignoredProjects += project('desktop').name // ignoredProjects += project('richtext-ui-kmm').name // ignoredProjects += project('richtext-commonmark-kmm').name //}