Some checks failed
Build TV app / build (push) Failing after 5s
Crests are resolved from the German Wikipedia page summary at runtime and cached per device, so nothing copyrighted is stored in the repository. The coloured shield remains as the fallback while the badge loads or when a club has none. The add dialog crashed for the same reason the rail did: it focused a row that only exists when something is preselected, and adding a club has no preselection. It now also scrolls, which 56 clubs rather need. CI: this Gitea resolves bare action names against itself, so the workflow now uses full GitHub URLs, and it runs the unit tests too. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
107 lines
3.3 KiB
Kotlin
107 lines
3.3 KiB
Kotlin
plugins {
|
|
id("com.android.application")
|
|
id("org.jetbrains.kotlin.android")
|
|
id("org.jetbrains.kotlin.plugin.compose")
|
|
}
|
|
|
|
android {
|
|
namespace = "dev.castarr.tv"
|
|
compileSdk = 35
|
|
|
|
defaultConfig {
|
|
applicationId = "dev.castarr.tv"
|
|
minSdk = 26
|
|
targetSdk = 35
|
|
versionCode = 28
|
|
versionName = "0.10.2"
|
|
}
|
|
|
|
// Release signing from environment (see ~/.keys/castarr-release.env on the
|
|
// build host); unsigned release build when unset.
|
|
val storeFileEnv = System.getenv("CASTARR_STORE_FILE")
|
|
if (storeFileEnv != null) {
|
|
signingConfigs {
|
|
create("release") {
|
|
storeFile = file(storeFileEnv)
|
|
storePassword = System.getenv("CASTARR_STORE_PASSWORD")
|
|
keyAlias = System.getenv("CASTARR_KEY_ALIAS")
|
|
keyPassword = System.getenv("CASTARR_STORE_PASSWORD")
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
isMinifyEnabled = true
|
|
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
|
|
if (storeFileEnv != null) {
|
|
signingConfig = signingConfigs.getByName("release")
|
|
}
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
targetCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
|
|
kotlinOptions {
|
|
jvmTarget = "17"
|
|
allWarningsAsErrors = true
|
|
}
|
|
|
|
|
|
// Global layout rule: everything test-related lives under tests/.
|
|
sourceSets {
|
|
getByName("test") {
|
|
java.setSrcDirs(listOf("../tests/unit"))
|
|
}
|
|
}
|
|
|
|
testOptions {
|
|
unitTests.all {
|
|
it.reports.junitXml.outputLocation.set(file("../tests/runs/junit"))
|
|
it.reports.html.outputLocation.set(file("../tests/runs/junit-html"))
|
|
}
|
|
}
|
|
|
|
buildFeatures {
|
|
compose = true
|
|
buildConfig = true
|
|
}
|
|
|
|
lint {
|
|
// Media3's UI classes are @UnstableApi; the opt-in lint check would
|
|
// otherwise fail release builds.
|
|
disable += "UnsafeOptInUsageError"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation("androidx.core:core-ktx:1.15.0")
|
|
implementation(platform("androidx.compose:compose-bom:2024.10.01"))
|
|
implementation("androidx.activity:activity-compose:1.9.3")
|
|
implementation("androidx.compose.ui:ui")
|
|
implementation("androidx.compose.foundation:foundation")
|
|
implementation("androidx.tv:tv-material:1.0.0")
|
|
implementation("androidx.compose.material3:material3")
|
|
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
|
|
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
|
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
|
|
implementation("androidx.media3:media3-exoplayer:1.4.1")
|
|
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
|
|
implementation("androidx.media3:media3-ui:1.4.1")
|
|
implementation("androidx.media3:media3-session:1.4.1")
|
|
implementation("org.nanohttpd:nanohttpd:2.3.1")
|
|
implementation("org.nanohttpd:nanohttpd-websocket:2.3.1")
|
|
implementation("com.google.zxing:core:3.5.3")
|
|
implementation("io.coil-kt:coil-compose:2.7.0")
|
|
testImplementation("junit:junit:4.13.2")
|
|
}
|
|
|
|
// Full JDK for javac via toolchain (host may only have a JRE); resolved by
|
|
// the foojay convention plugin in settings.
|
|
kotlin {
|
|
jvmToolchain(17)
|
|
}
|