CI & Build / Build now, or wait for Android? (push) Successful in 2s
CI & Build / Python lint (push) Successful in 2s
Android / Build, or is the channel already serving this? (push) Successful in 4s
Desktop (Tauri) / Build, or is the channel already serving this? (push) Successful in 2s
Desktop (Tauri) / Web tests, clippy, Rust tests and rustfmt (push) Skipped
Desktop (Tauri) / Tauri desktop (Linux) (push) Skipped
Desktop (Tauri) / Windows installer (cross-compiled) (push) Skipped
Desktop (Tauri) / Update manifest (push) Skipped
CI & Build / Web typecheck and unit tests (push) Successful in 9s
CI & Build / Python tests (push) Successful in 11s
Android / Core and FFI clippy and tests (push) Successful in 28s
CI & Build / integration (push) Successful in 1m21s
CI & Build / Build & push image (push) Skipped
Android / Kotlin + Rust (APK) (push) Failing after 6m10s
Android / Build the server image (push) Successful in 1s
The card draws the linked page's og:image in a strip down its left edge, cropped to the card's height: 96dp full, 48dp compact, matching the web's w-24 and w-12. The image is remote, so the phone fetches it from whatever host the link points at, exactly as a browser does for the web card. The operator chose that parity (Scribe #3307). The image is Coil 3's AsyncImage, with OkHttp as its fetcher. Coil's disk cache means a card scrolled past twice costs one download. When there is no image, or it fails to load, nothing is drawn rather than an empty box, and the card is the text card it was before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
3.6 KiB
TOML
65 lines
3.6 KiB
TOML
[versions]
|
|
# Pinned as a MATRIX, matching Minstrel's proven combination on the same JDK:
|
|
# - Gradle 9.1.0 supports JDK 25 (see gradle-wrapper.properties)
|
|
# - AGP 9.0.1 requires Gradle 9.1.0+
|
|
# - Kotlin 2.3.x is AGP 9's built-in Kotlin path
|
|
# ci-rust-android ships JDK 25, so the wrapper floor is load-bearing: an older
|
|
# Gradle fails on that JDK with an opaque "25.0.3" message.
|
|
agp = "9.0.1"
|
|
kotlin = "2.3.21"
|
|
compose-bom = "2026.05.01"
|
|
lifecycle = "2.8.7"
|
|
activity-compose = "1.9.3"
|
|
coroutines = "1.9.0"
|
|
|
|
# WorkManager runs the background sync. `work-runtime-ktx` is NOT used: as of
|
|
# 2.11 it is a 6 KB stub and every Kotlin extension (`PeriodicWorkRequestBuilder`,
|
|
# `CoroutineWorker`) has moved into `work-runtime` itself. Verified by unpacking
|
|
# both artifacts, not from memory.
|
|
work = "2.11.2"
|
|
|
|
# ktlint and detekt are NOT Gradle plugins here. ci-rust-android already ships
|
|
# both as pinned CLIs (M12 step 3), and the CI lane invokes those directly. Adding
|
|
# the Gradle plugins would mean a SECOND pinned version of each tool, resolved at
|
|
# build time, that has to be kept in lockstep with the image's by hand — and the
|
|
# first attempt at it failed outright, because the detekt version Minstrel pins
|
|
# (2.0.0-alpha.3) is not published to Maven Central or the plugin portal at all.
|
|
|
|
# JNA is not optional: uniffi's Kotlin bindings call into the .so through it.
|
|
# The @aar classifier matters — the plain jar has no Android native payload and
|
|
# fails at runtime with UnsatisfiedLinkError rather than at build time.
|
|
jna = "5.14.0"
|
|
|
|
junit = "4.13.2"
|
|
|
|
# Coil draws a link preview's image (Scribe #3307), the first image this client
|
|
# loads. Coil 3 ships its networking separately; the OkHttp fetcher is the one its
|
|
# docs name as the default, and it registers itself, so no loader is configured.
|
|
coil = "3.6.3"
|
|
|
|
[libraries]
|
|
androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.13.1" }
|
|
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" }
|
|
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
|
|
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "lifecycle" }
|
|
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose-bom" }
|
|
compose-ui = { module = "androidx.compose.ui:ui" }
|
|
compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" }
|
|
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
|
|
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
|
|
compose-material3 = { module = "androidx.compose.material3:material3" }
|
|
# Icons only from -core, deliberately: it carries the common set (Menu, Search,
|
|
# Close, Add) and is already on the material3 path. -extended adds ~1,000 vectors
|
|
# for the handful the drawer would use.
|
|
compose-material-icons-core = { module = "androidx.compose.material:material-icons-core" }
|
|
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
|
|
jna = { module = "net.java.dev.jna:jna", version.ref = "jna" }
|
|
androidx-work-runtime = { module = "androidx.work:work-runtime", version.ref = "work" }
|
|
junit = { module = "junit:junit", version.ref = "junit" }
|
|
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
|
|
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
|
|
|
|
[plugins]
|
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
|
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|