feat(shared): add opt-in diagnostics client with compile-time kill switch

Ship client-side telemetry, crash capture, and bug-report assembly behind a
user opt-in, with NoOp transport until Cloudflare is wired. Builds can set
vnidrop.diagnostics.included=false to omit the Share-diagnostics UI and
disable the telemetry/crash auto-upload stack while keeping bug reports.
This commit is contained in:
2026-07-14 08:27:42 +02:00
parent 6dd867e43d
commit ead4e09a60
36 changed files with 1776 additions and 47 deletions

View File

@@ -37,6 +37,39 @@ plugins {
alias(libs.plugins.kotlinAtomicfu)
}
// Compile-time switch (gradle.properties or -Pvnidrop.diagnostics.included=false).
// false: no Share-diagnostics toggle, no telemetry/crash auto-upload stack.
val diagnosticsIncluded: Boolean =
(findProperty("vnidrop.diagnostics.included") as String?)?.toBooleanStrictOrNull() ?: true
val diagnosticsBuildConfigDir = layout.buildDirectory.dir("generated/diagnostics/commonMain/kotlin")
val generateDiagnosticsBuildConfig by tasks.registering {
group = "build"
description = "Generates DiagnosticsBuildConfig from vnidrop.diagnostics.included"
val outputDir = diagnosticsBuildConfigDir
val included = diagnosticsIncluded
inputs.property("vnidrop.diagnostics.included", included)
outputs.dir(outputDir)
doLast {
val packageDir = outputDir.get().asFile.resolve("com/vnidrop/app/diagnostics")
packageDir.mkdirs()
packageDir.resolve("DiagnosticsBuildConfig.kt").writeText(
"""
|package com.vnidrop.app.diagnostics
|
|/**
| * Generated by shared/build.gradle.kts.
| * Override with `-Pvnidrop.diagnostics.included=false` or gradle.properties.
| */
|object DiagnosticsBuildConfig {
| const val INCLUDED: Boolean = $included
|}
|
""".trimMargin(),
)
}
}
kotlin {
if (GobleyHost.current.platform == GobleyHost.Platform.MacOS) {
listOf(
@@ -59,6 +92,9 @@ kotlin {
jvm()
sourceSets {
commonMain {
kotlin.srcDir(files(diagnosticsBuildConfigDir).builtBy(generateDiagnosticsBuildConfig))
}
androidMain.dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)