Skip to content

Commit 2630fc7

Browse files
committed
Include library version in user agent
1 parent a5fe67b commit 2630fc7

File tree

4 files changed

+70
-31
lines changed

4 files changed

+70
-31
lines changed

core/build.gradle.kts

Lines changed: 63 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import org.gradle.internal.os.OperatingSystem
66
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
77
import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest
88
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
9-
9+
import java.nio.file.Path
10+
import kotlin.io.path.createDirectories
11+
import kotlin.io.path.writeText
1012

1113
plugins {
1214
alias(libs.plugins.kotlinMultiplatform)
@@ -128,23 +130,24 @@ val moveJDBCJNIFiles by tasks.registering(Copy::class) {
128130
kotlin {
129131
powersyncTargets()
130132

131-
targets.withType<KotlinNativeTarget> {
132-
compilations.named("main") {
133-
compileTaskProvider {
134-
compilerOptions.freeCompilerArgs.add("-Xexport-kdoc")
133+
targets.configureEach {
134+
compilations.configureEach {
135+
compileTaskProvider.configure {
136+
dependsOn(generateVersionConstant)
135137
}
136138
}
137139

138-
/*
139-
If we ever need macOS support:
140-
{
141-
binaries.withType<TestExecutable>().configureEach {
142-
linkTaskProvider.dependsOn(downloadPowersyncDesktopBinaries)
143-
linkerOpts("-lpowersync")
144-
linkerOpts("-L", binariesFolder.map { it.dir("powersync") }.get().asFile.path)
140+
if (this is KotlinNativeTarget) {
141+
compilations.named("main") {
142+
compileTaskProvider.configure {
143+
compilerOptions.freeCompilerArgs.add("-Xexport-kdoc")
144+
}
145145
}
146146
}
147-
*/
147+
}
148+
149+
targets.withType<KotlinNativeTarget> {
150+
148151
}
149152

150153
explicitApi()
@@ -168,21 +171,27 @@ kotlin {
168171
}
169172
}
170173

171-
commonMain.dependencies {
172-
implementation(libs.uuid)
173-
implementation(libs.kotlin.stdlib)
174-
implementation(libs.ktor.client.core)
175-
implementation(libs.ktor.client.contentnegotiation)
176-
implementation(libs.ktor.serialization.json)
177-
implementation(libs.kotlinx.io)
178-
implementation(libs.rsocket.core)
179-
implementation(libs.rsocket.transport.websocket)
180-
implementation(libs.kotlinx.coroutines.core)
181-
implementation(libs.kotlinx.datetime)
182-
implementation(libs.stately.concurrency)
183-
implementation(libs.configuration.annotations)
184-
api(projects.persistence)
185-
api(libs.kermit)
174+
commonMain.configure {
175+
kotlin {
176+
srcDir(layout.buildDirectory.dir("generated/constants"))
177+
}
178+
179+
dependencies {
180+
implementation(libs.uuid)
181+
implementation(libs.kotlin.stdlib)
182+
implementation(libs.ktor.client.core)
183+
implementation(libs.ktor.client.contentnegotiation)
184+
implementation(libs.ktor.serialization.json)
185+
implementation(libs.kotlinx.io)
186+
implementation(libs.rsocket.core)
187+
implementation(libs.rsocket.transport.websocket)
188+
implementation(libs.kotlinx.coroutines.core)
189+
implementation(libs.kotlinx.datetime)
190+
implementation(libs.stately.concurrency)
191+
implementation(libs.configuration.annotations)
192+
api(projects.persistence)
193+
api(libs.kermit)
194+
}
186195
}
187196

188197
androidMain {
@@ -302,3 +311,29 @@ setupGithubRepository()
302311
dokka {
303312
moduleName.set("PowerSync Core")
304313
}
314+
315+
val generateVersionConstant by tasks.registering {
316+
val target = project.layout.buildDirectory.dir("generated/constants")
317+
val packageName = "com.powersync.build"
318+
319+
outputs.dir(target)
320+
val currentVersion = version.toString()
321+
322+
doLast {
323+
val dir = target.get().asFile
324+
dir.mkdir()
325+
val rootPath = dir.toPath()
326+
327+
val source = """
328+
package $packageName
329+
330+
internal const val LIBRARY_VERSION: String = "$currentVersion"
331+
332+
""".trimIndent()
333+
334+
val packageRoot = packageName.split('.').fold(rootPath, Path::resolve)
335+
packageRoot.createDirectories()
336+
337+
packageRoot.resolve("BuildConstants.kt").writeText(source)
338+
}
339+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.powersync.sync
22

33
import android.os.Build
4+
import com.powersync.build.LIBRARY_VERSION
45

5-
internal actual fun userAgent(): String = "PowerSync Kotlin SDK (Android ${Build.VERSION.SDK_INT})"
6+
internal actual fun userAgent(): String = "PowerSync Kotlin SDK v$LIBRARY_VERSION (Android ${Build.VERSION.SDK_INT})"
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.powersync.sync
22

3+
import com.powersync.build.LIBRARY_VERSION
4+
35
internal actual fun userAgent(): String {
46
val os = System.getProperty("os.name") ?: "unknown"
57
val osVersion = System.getProperty("os.version") ?: ""
68
val java = System.getProperty("java.vendor.version") ?: System.getProperty("java.runtime.version") ?: "unknown"
79

8-
return "PowerSync Kotlin SDK (running Java $java on $os $osVersion)"
10+
return "PowerSync Kotlin SDK v${LIBRARY_VERSION} (running Java $java on $os $osVersion)"
911
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.powersync.sync
22

3+
import com.powersync.build.LIBRARY_VERSION
34
import kotlin.experimental.ExperimentalNativeApi
45

56
@OptIn(ExperimentalNativeApi::class)
6-
internal actual fun userAgent(): String = "PowerSync Kotlin SDK (running on ${Platform.cpuArchitecture.name} ${Platform.osFamily.name})"
7+
internal actual fun userAgent(): String = "PowerSync Kotlin SDK v$LIBRARY_VERSION (running on ${Platform.cpuArchitecture.name} ${Platform.osFamily.name})"

0 commit comments

Comments
 (0)