import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension import org.jlleitschuh.gradle.ktlint.reporter.ReporterType import java.text.SimpleDateFormat import java.util.Date // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.jetbrains.kotlin.android) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.dagger.hilt.android) apply false alias(libs.plugins.jetbrains.kotlin.serialization) apply false alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.ktlint) alias(libs.plugins.detekt) id("com.google.devtools.ksp") version "2.1.10-1.0.30" apply false id("com.google.gms.google-services") version "4.4.2" apply false id("com.google.firebase.crashlytics") version "3.0.3" apply false id("com.google.firebase.firebase-perf") version "1.4.2" apply false } // Define a timestamp once, so all subprojects use the same value val dateTime = SimpleDateFormat("yyMMdd-HHmmss").format(Date()) // injects gradle configurations globally subprojects { apply(plugin = "org.jlleitschuh.gradle.ktlint") apply(plugin = "io.gitlab.arturbosch.detekt") configure { version.set("1.5.0") android.set(true) verbose.set(true) ignoreFailures.set(false) additionalEditorconfig.set( mapOf( "ktlint_function_naming_ignore_when_annotated_with" to "Composable,Test", ), ) baseline.set(file("config/ktlint/baseline.xml")) reporters { reporter(ReporterType.PLAIN) reporter(ReporterType.CHECKSTYLE) } } configure { baseline = file("config/detekt-baseline.xml") } afterEvaluate { project.extensions.findByType()?.let { androidExt -> androidExt.flavorDimensions("environment") androidExt.productFlavors { maybeCreate("staff") getByName("staff") { dimension = "environment" // Add suffix for staff builds if (project.plugins.hasPlugin("com.android.application")) { applicationIdSuffix = ".staff" // Change the app name for staff resValue("string", "app_name", "Suno Staff") // Support both hosts for runtime environment switching resValue("string", "host_uri_staging", "b.suno.fm") resValue("string", "host_uri_prod", "suno.com") resValue("string", "oauth_redirect_path", "/oauth-redirect-staff") resValue("string", "auth_subdomain", "auth") resValue("string", "oauth_callback_url_scheme", "com.suno.android.staff") } buildConfigField("boolean", "IS_STAFF", "true") } maybeCreate("prod") getByName("prod") { dimension = "environment" // No suffix for prod if (project.plugins.hasPlugin("com.android.application")) { // Keep the default app name for production resValue("string", "app_name", "Suno") // Support both hosts for runtime environment switching resValue("string", "host_uri_staging", "b.suno.fm") resValue("string", "host_uri_prod", "suno.com") resValue("string", "oauth_redirect_path", "/oauth-redirect-v2") resValue("string", "auth_subdomain", "clerk") resValue("string", "oauth_callback_url_scheme", "com.suno.android") configure { mappingFileUploadEnabled = true } } buildConfigField("boolean", "IS_STAFF", "false") } } // Build types androidExt.buildTypes { getByName("debug") { // Append timestamp to debug builds versionNameSuffix = "-$dateTime" } } // Modify matchingFallbacks for each flavor androidExt.productFlavors.forEach { flavor -> flavor.matchingFallbacks.add(flavor.name) } } } } ktlint { version = libs.versions.ktlint.get() }