Android: public host as the build property kvitt.publicHost (D-121)
The release server's host name comes from -Pkvitt.publicHost, else kvitt.publicHost in android/local.properties, else the placeholder kvitt.example.invalid. :app exposes it as BuildConfig.PUBLIC_HOST, the manifest placeholder publicHost (the https invite-link intent filter, port 8443) and RELEASE_SERVER_URL, which :feature:onboarding receives through the @ReleaseServerUrl Hilt qualifier for S-1's prefill. Tests and goldens use fixed hosts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
@@ -17,6 +17,21 @@ val localProperties = Properties().apply {
|
||||
}
|
||||
val releaseStoreFile: String? = localProperties.getProperty("kvitt.release.storeFile")
|
||||
|
||||
// D-121: Kvitt's public host name (SPEC §8.5, §10.6), as BuildConfig.PUBLIC_HOST, the manifest placeholder publicHost
|
||||
// (the https invite links of AC-2.6, port 8443) and RELEASE_SERVER_URL = https://<host>:8443 (AC-2.7). From
|
||||
// -Pkvitt.publicHost (infra/publish-apk.sh passes it, from KVITT_PUBLIC_HOST in infra/pi/.env), else the key
|
||||
// kvitt.publicHost in android/local.properties (the owner sets it there; never committed), else the placeholder
|
||||
// kvitt.example.invalid (RFC 2606: never resolves), so a release built without it cannot talk to a real host. Debug
|
||||
// builds pair with the server address typed on S-1 and need none of it.
|
||||
val publicHost: String = (
|
||||
providers.gradleProperty("kvitt.publicHost").orNull?.trim()?.takeIf { it.isNotEmpty() }
|
||||
?: localProperties.getProperty("kvitt.publicHost")?.trim()?.takeIf { it.isNotEmpty() }
|
||||
?: "kvitt.example.invalid"
|
||||
).lowercase()
|
||||
require(Regex("[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+").matches(publicHost)) {
|
||||
"kvitt.publicHost must be a host name such as kvitt.duckdns.org (no scheme, port or path), was '$publicHost'"
|
||||
}
|
||||
|
||||
// SPEC §10.5.3: the pinned Caddy root replaces the system anchors for icehack.asuscomm.com only when this is true.
|
||||
val pinnedRoot = providers.gradleProperty("kvitt.tls.pinnedRoot").orElse("false").get().toBoolean()
|
||||
|
||||
@@ -27,13 +42,15 @@ android {
|
||||
// SPEC §10.6: the release script passes kvitt.versionCode and kvitt.versionName; debug builds use 1 and "dev".
|
||||
versionCode = providers.gradleProperty("kvitt.versionCode").orElse("1").get().toInt()
|
||||
versionName = providers.gradleProperty("kvitt.versionName").orElse("dev").get()
|
||||
buildConfigField("String", "PUBLIC_HOST", "\"$publicHost\"")
|
||||
manifestPlaceholders["publicHost"] = publicHost
|
||||
}
|
||||
// SPEC G-8 and AC-19.1: the app is English (fallback) and Swedish only; library translations of other languages
|
||||
// are left out of the APK.
|
||||
androidResources {
|
||||
localeFilters += listOf("en", "sv")
|
||||
}
|
||||
// BuildConfig carries versionCode, versionName and DEBUG into AppBuildInfo (:data, D-041).
|
||||
// BuildConfig carries versionCode, versionName and DEBUG into AppBuildInfo (:data, D-041), and PUBLIC_HOST (D-121).
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user