import java.security.MessageDigest import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.compose) } android { namespace = "org.justinvisser.wolfskin.design" compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { minSdk = libs.versions.minSdk.get().toInt() } buildFeatures { compose = true } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } testOptions.unitTests.isIncludeAndroidResources = true } kotlin.compilerOptions.jvmTarget = JvmTarget.JVM_11 val robolectricSdk by configurations.creating { isCanBeResolved = true isCanBeConsumed = false isTransitive = false } val cacheRobolectricSdk by tasks.registering(Copy::class) { from(robolectricSdk) into(layout.buildDirectory.dir("robolectric-sdk")) } val checkTokenDrift by tasks.registering { inputs.files(fileTree(projectDir) { include("tokens.json", "shell-tokens.json", "title-tokens.json", "home-tokens.json", "discover-tokens.json", "generate_tokens.py", "tokens.css", "tokens.sha256", "src/main/java/**/WolfskinTokens.kt") }) doLast { file("tokens.sha256").readLines().forEach { line -> val (expected, name) = line.split(" ", limit = 2) val actual = MessageDigest.getInstance("SHA-256").digest(file(name).readBytes()).joinToString("") { "%02x".format(it) } check(actual == expected) { "Token drift in $name: run python3 wolfskin-design/generate_tokens.py" } } } } tasks.named("preBuild") { dependsOn(checkTokenDrift) } tasks.withType().configureEach { dependsOn(cacheRobolectricSdk) systemProperty("robolectric.dependency.dir", layout.buildDirectory.dir("robolectric-sdk").get().asFile.absolutePath) systemProperty("robolectric.offline", "true") systemProperty("robolectric.graphicsMode", "NATIVE") systemProperty("roborazzi.test.record", "true") systemProperty("wolfskin.captureDirectory", rootProject.layout.buildDirectory.dir("wolfskin-captures").get().asFile.absolutePath) } dependencies { robolectricSdk("org.robolectric:android-all-instrumented:9-robolectric-4913185-2-i7") robolectricSdk("org.robolectric:android-all-instrumented:11-robolectric-6757853-i7") robolectricSdk("org.robolectric:android-all-instrumented:14-robolectric-10818077-i7") implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) implementation(libs.androidx.tv.material) implementation(libs.coil.compose) debugImplementation(libs.androidx.compose.ui.test.manifest) testImplementation(libs.junit) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.robolectric) implementation(libs.androidx.compose.material3) testImplementation(libs.androidx.compose.ui.test.junit4) testImplementation("io.github.takahirom.roborazzi:roborazzi:1.77.0") testImplementation("io.github.takahirom.roborazzi:roborazzi-compose:1.77.0") }