build.gradle 3.8 KB
import org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    apply from: 'deps.gradle'
    repositories {
        google()
        gradlePluginPortal()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:$android_build_tools_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.5'
        classpath 'com.dicedmelon.gradle:jacoco-android:0.1.5'
        classpath "com.diffplug.spotless:spotless-plugin-gradle:6.23.3"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

plugins {
    id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
}

subprojects {
    // Ignore examples folder, it's not a module itself.
    if (project.name == "examples") {
        return
    }

    apply plugin: "com.diffplug.spotless"
    spotless {
        // optional: limit format enforcement to just the files changed by this feature branch
        ratchetFrom 'origin/main'

        format 'misc', {
            // define the files to apply `misc` to
            target '*.gradle', '*.md', '.gitignore'

            // define the steps to apply to those files
            trimTrailingWhitespace()
            indentWithSpaces()
            endWithNewline()
        }
        java {
            // apply a specific flavor of google-java-format
            googleJavaFormat('1.17.0').aosp().reflowLongStrings()
            // fix formatting of type annotations
            formatAnnotations()
            // make sure every file has the following copyright header.
            // optionally, Spotless can set copyright years by digging
            // through git history (see "license" section below)
            licenseHeaderFile rootProject.file("LicenseHeaderFile.txt")
            removeUnusedImports()
            toggleOffOn()
        }
        kotlin {
            target("src/*/java/**/*.kt")
            targetExclude(
                "src/*/java/**/ReentrantMutex.kt", // Different license
                "src/*/java/**/TextureViewRenderer.kt", // Different license
                "src/*/java/**/FlowDelegate.kt", // Different license
            )
            ktlint("0.50.0")
                .setEditorConfigPath("$rootDir/.editorconfig")
            licenseHeaderFile(rootProject.file("LicenseHeaderFile.txt"))
                .named('license')
            endWithNewline()
            toggleOffOn()
        }
    }

    // From Gradle 8 onwards, Kapt no longer automatically picks up jvmTarget
    // from normal KotlinOptions. Must be manually set.
    // JvmToolchain should not be used since it changes the actual JDK used.
    tasks.withType(KaptGenerateStubs).configureEach {
        kotlinOptions {
            jvmTarget = java_version
        }
    }

}

tasks.register('clean', Delete) {
    delete rootProject.buildDir
}

group = GROUP
version = VERSION_NAME

def getRepositoryUsername() {
    return hasProperty('nexusUsername') ? nexusUsername : ""
}

def getRepositoryPassword() {
    return hasProperty('nexusPassword') ? nexusPassword : ""
}

nexusPublishing {
    packageGroup = GROUP
    repositories {
        maven {
            nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/"))
            snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/"))
            username = getRepositoryUsername()
            password = getRepositoryPassword()
            stagingProfileId = STAGING_PROFILE_ID
        }
    }
}