import com.android.sdklib.AndroidVersion.ApiBaseExtension.BAKLAVA import com.android.sdklib.AndroidVersion.ApiBaseExtension.VANILLA_ICE_CREAM import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.util.Properties plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.hilt.android) alias(libs.plugins.ksp) } android { namespace = "xyz.leomurca.csgomatches" compileSdk = VANILLA_ICE_CREAM.api defaultConfig { applicationId = "xyz.leomurca.csgomatches" minSdk = 26 targetSdk = BAKLAVA.api versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "API_BASE_URL", "\"${getSecret("API_BASE_URL")}\"") buildConfigField("String", "ACCESS_TOKEN", "\"${getSecret("ACCESS_TOKEN")}\"") } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlin { compilerOptions { jvmTarget = JvmTarget.JVM_11 } } buildFeatures { compose = true buildConfig = true } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) implementation(libs.hilt.android) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.core.splashscreen) implementation(libs.retrofit2) implementation(libs.retrofit.kotlinx.serialization.converter) implementation(libs.kotlinx.serialization.json) implementation(libs.okhttp) implementation(libs.coil.compose) implementation(libs.coil.network) ksp(libs.hilt.android.compiler) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) } fun getSecret(key: String): String { // 1. Check Gradle -P property (CI) project.findProperty(key)?.let { return it.toString() } // 2. Check environment variable (CI) System.getenv(key)?.let { return it } // 3. Fallback to local.properties (local dev) val localPropsFile = rootProject.file("local.properties") if (localPropsFile.exists()) { val props = Properties().apply { load(localPropsFile.inputStream()) } return props.getProperty(key) ?: "" } return "" }