build.gradle.kts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /* build.gradle.kts/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
  2. /* This copyright was auto-generated on Tue Feb 18 18:41:28 UTC 2025 */
  3. import com.vanniktech.maven.publish.SonatypeHost
  4. import org.jetbrains.dokka.base.DokkaBase
  5. import org.jetbrains.dokka.base.DokkaBaseConfiguration
  6. import org.jetbrains.kotlin.gradle.dsl.JvmTarget
  7. plugins {
  8. alias(libs.plugins.kotlinMultiplatform)
  9. alias(libs.plugins.androidLibrary)
  10. alias(libs.plugins.ksp)
  11. alias(libs.plugins.room)
  12. alias(libs.plugins.serialization)
  13. alias(libs.plugins.dokka)
  14. alias(libs.plugins.license)
  15. alias(libs.plugins.publish)
  16. alias(libs.plugins.format)
  17. }
  18. kotlin {
  19. androidTarget {
  20. compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
  21. publishLibraryVariants("release")
  22. }
  23. listOf(iosX64(), iosArm64(), iosSimulatorArm64()).forEach {
  24. it.binaries.framework {
  25. baseName = "openGoPro"
  26. isStatic = true
  27. }
  28. }
  29. sourceSets {
  30. // https://kotlinlang.org/docs/multiplatform-android-layout.html#move-source-files
  31. val commonTest by getting
  32. val androidInstrumentedTest by getting
  33. val androidUnitTest by getting
  34. commonMain.dependencies {
  35. // DI
  36. api(libs.koin.core)
  37. implementation(libs.koin.compose)
  38. implementation(libs.koin.compose.viewmodel)
  39. // Logging
  40. implementation(libs.kermit)
  41. // Dates
  42. api(libs.kotlinx.datetime)
  43. // Concurrency / Streams
  44. implementation(libs.kotlinx.coroutines)
  45. // Ktor - Http Stack
  46. implementation(libs.ktor.client.core)
  47. implementation(libs.ktor.client.logging)
  48. implementation(libs.ktor.client.negotiation)
  49. implementation(libs.ktor.client.auth)
  50. implementation(libs.ktor.json)
  51. // JSON serialization
  52. implementation(libs.kotlinx.serialization.json)
  53. // Kable
  54. implementation(libs.kable.core)
  55. implementation(libs.kable.exceptions)
  56. implementation(libs.khronicle)
  57. // Uuid
  58. implementation(libs.uuid)
  59. // Protobuf run-time
  60. implementation(libs.pbandk.runtime)
  61. // Version data structure
  62. implementation(libs.version)
  63. // Datetime
  64. implementation(libs.kotlinx.datetime)
  65. // Room
  66. implementation(libs.androidx.room.runtime)
  67. implementation(libs.sqlite.bundled)
  68. }
  69. commonTest.dependencies {
  70. implementation(libs.kotlin.test)
  71. implementation(libs.kotlinx.coroutines.test)
  72. implementation(libs.ktor.mock)
  73. implementation(libs.koin.test)
  74. }
  75. androidMain.dependencies {
  76. // DI
  77. implementation(libs.koin.android)
  78. implementation(libs.koin.androidx.compose)
  79. api(libs.ktor.client.okhttp)
  80. }
  81. appleMain.dependencies { api(libs.ktor.client.darwin) }
  82. }
  83. }
  84. android {
  85. namespace = "com.gopro.open_gopro"
  86. compileSdk = libs.versions.android.compileSdk.get().toInt()
  87. defaultConfig {
  88. minSdk = libs.versions.android.minSdk.get().toInt()
  89. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  90. }
  91. compileOptions {
  92. sourceCompatibility = JavaVersion.VERSION_17
  93. targetCompatibility = JavaVersion.VERSION_17
  94. }
  95. }
  96. room { schemaDirectory("$projectDir/schemas") }
  97. dependencies {
  98. testImplementation(libs.junit)
  99. // https://touchlab.co/understanding-and-configuring-your-kmm-test-suite
  100. androidTestImplementation(libs.kotlin.test)
  101. androidTestImplementation(libs.kotlinx.coroutines.test)
  102. androidTestImplementation(libs.core.ktx)
  103. androidTestImplementation(libs.androidx.test.junit)
  104. androidTestImplementation(libs.androidx.junit.ktx)
  105. androidTestImplementation(libs.androidx.espresso.core)
  106. androidTestImplementation(libs.mockito.android)
  107. androidTestImplementation(libs.koin.test.junit4)
  108. add("kspAndroid", libs.androidx.room.compiler)
  109. add("kspIosSimulatorArm64", libs.androidx.room.compiler)
  110. add("kspIosX64", libs.androidx.room.compiler)
  111. add("kspIosArm64", libs.androidx.room.compiler)
  112. }
  113. buildscript { dependencies { classpath(libs.dokka.base) } }
  114. tasks.dokkaHtml {
  115. pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
  116. customAssets =
  117. listOf(
  118. file("../docs/assets/logo-icon.svg"),
  119. // file("../docs/assets/my-style.css")
  120. )
  121. }
  122. dokkaSourceSets {
  123. configureEach {
  124. moduleName.set("Open GoPro SDK")
  125. includes.from("../docs/sdk_documentation.md")
  126. // suppressInheritedMembers = true
  127. // documentedVisibilities.set(
  128. // setOf(
  129. // DokkaConfiguration.Visibility.PUBLIC,
  130. // DokkaConfiguration.Visibility.PROTECTED
  131. // )
  132. // )
  133. }
  134. }
  135. }
  136. licenseReport {
  137. // Generate reports
  138. generateCsvReport = true
  139. generateHtmlReport = true
  140. generateJsonReport = false
  141. generateTextReport = true
  142. // Copy reports - These options are ignored for Java projects
  143. copyCsvReportToAssets = false
  144. copyHtmlReportToAssets = false
  145. copyJsonReportToAssets = false
  146. copyTextReportToAssets = false
  147. useVariantSpecificAssetDirs = false
  148. // Ignore licenses for certain artifact patterns
  149. // ignoredPatterns = []
  150. // Show versions in the report - default is false
  151. showVersions = true
  152. }
  153. tasks.register<Copy>("copyLicenseReport") {
  154. val reportDir = layout.buildDirectory.dir("reports/licenses")
  155. group = "reporting"
  156. description = "Copy Generated License Reports to top level of repo"
  157. println("Copying licenses from $reportDir to $rootDir")
  158. project.logger.lifecycle("Copying licenses from $reportDir to $rootDir")
  159. from(reportDir)
  160. into(rootDir)
  161. dependsOn(tasks.getByName("licenseReleaseReport"))
  162. }
  163. mavenPublishing {
  164. // Define coordinates for the published artifact
  165. coordinates(
  166. groupId = "io.github.tcamise-gpsw", // TODO move to GoPro once possible
  167. artifactId = "open-gopro",
  168. version = "0.1.0")
  169. // Configure POM metadata for the published artifact
  170. pom {
  171. name.set("Open GoPro KMP SDK")
  172. description.set(
  173. "n interface for the user to exercise the Open GoPro Bluetooth Low Energy (BLE) and Wi-Fi / USB HTTP API's")
  174. inceptionYear.set("2024")
  175. url.set("tcamise-gpsw")
  176. licenses {
  177. license {
  178. name.set("MIT")
  179. url.set("https://opensource.org/licenses/MIT")
  180. }
  181. }
  182. // Specify developers information
  183. developers {
  184. developer {
  185. id.set("tcamise-gpsw")
  186. name.set("Tim Camise")
  187. email.set("tcamise@gopro.com")
  188. }
  189. }
  190. // Specify SCM information
  191. scm { url.set("https://github.com/gopro/OpenGoPro") }
  192. }
  193. // Configure publishing to Maven Central
  194. publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
  195. // Enable GPG signing for all publications
  196. signAllPublications()
  197. }