All checks were successful
PR Checks / android-build (pull_request) Successful in 21m22s
Step 1 of M8 (docs/android/PLAN.md item 9). - compileSdk/targetSdk 36 (Play's floor since 2026-08-31). AGP 8.6.1 cannot build against 36, so AGP goes to 8.13.2 (the last 8.x) with the Gradle 8.14.3 wrapper. Kotlin, KSP and Hilt are unchanged. All three workflows install platforms;android-36; AGP 8.13 still defaults to build-tools 35.0.0. - release.yml also runs bundleRelease, signed with the same keystore, and attaches the .aab to the Gitea release beside the APK (the first bundle has to be uploaded by hand, and this is where it comes from). - A last step uploads the bundle to Play's internal track through the Play Developer API v3 edit flow. The OAuth token comes from a service-account JWT signed with openssl; the key is the new PLAY_SERVICE_ACCOUNT_JSON secret. While that secret is unset, the step warns and skips. The step runs after the Gitea release, so a Play failure never holds back the APK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
104 lines
5.0 KiB
TOML
104 lines
5.0 KiB
TOML
# Version catalog — single source of truth for dependency + plugin versions.
|
||
# The full app stack (per docs/android/PLAN.md §2) is declared here so later
|
||
# milestones (M1–M4) reference libraries by alias without re-pinning versions.
|
||
# The M0 skeleton only wires the subset it actually compiles against.
|
||
|
||
[versions]
|
||
# Build toolchain
|
||
agp = "8.13.2"
|
||
kotlin = "2.0.20"
|
||
ksp = "2.0.20-1.0.25"
|
||
|
||
# AndroidX core / lifecycle / activity
|
||
coreKtx = "1.13.1"
|
||
lifecycle = "2.8.5"
|
||
activityCompose = "1.9.2"
|
||
|
||
# Compose
|
||
composeBom = "2024.09.02"
|
||
navigationCompose = "2.8.0"
|
||
|
||
# DI
|
||
hilt = "2.52"
|
||
hiltNavigationCompose = "1.2.0"
|
||
|
||
# Networking
|
||
retrofit = "2.11.0"
|
||
okhttp = "4.12.0"
|
||
kotlinxSerialization = "1.7.1"
|
||
retrofitSerializationConverter = "1.0.0"
|
||
|
||
# Storage
|
||
datastore = "1.1.1"
|
||
securityCrypto = "1.1.0-alpha06"
|
||
|
||
# Web hand-off (Chrome Custom Tabs) — §4.2
|
||
browser = "1.8.0"
|
||
|
||
# Images
|
||
coil = "2.7.0"
|
||
|
||
# Testing
|
||
junit = "4.13.2"
|
||
androidxTestExtJunit = "1.2.1"
|
||
espressoCore = "3.6.1"
|
||
coroutinesTest = "1.8.1"
|
||
|
||
[libraries]
|
||
# Core / lifecycle / activity
|
||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" }
|
||
androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" }
|
||
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" }
|
||
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
|
||
|
||
# Compose (versions come from the BOM)
|
||
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
|
||
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
|
||
androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
|
||
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
|
||
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
|
||
androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
|
||
androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
|
||
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
|
||
androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" }
|
||
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
|
||
|
||
# DI
|
||
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
|
||
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
|
||
androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigationCompose" }
|
||
|
||
# Networking
|
||
retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
|
||
okhttp-bom = { group = "com.squareup.okhttp3", name = "okhttp-bom", version.ref = "okhttp" }
|
||
okhttp = { group = "com.squareup.okhttp3", name = "okhttp" }
|
||
okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor" }
|
||
okhttp-sse = { group = "com.squareup.okhttp3", name = "okhttp-sse" }
|
||
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
|
||
retrofit-kotlinx-serialization-converter = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "retrofitSerializationConverter" }
|
||
|
||
# Storage
|
||
androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" }
|
||
androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "securityCrypto" }
|
||
|
||
# Web hand-off
|
||
androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "browser" }
|
||
|
||
# Images
|
||
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
|
||
|
||
# Testing
|
||
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
||
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutinesTest" }
|
||
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxTestExtJunit" }
|
||
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
|
||
|
||
[plugins]
|
||
android-application = { id = "com.android.application", version.ref = "agp" }
|
||
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
|