6 Commits

Author SHA1 Message Date
Christian Basler 9930af5fbc Add code quality plugins
version-catalog-update and spotless
2026-01-29 12:11:40 +01:00
chris 0cf9d36d8c Enable minify
SonarQube Scan / SonarQube Trigger (push) Failing after 3m9s
2026-01-25 22:30:30 +01:00
Christian Basler 6ce3dfad4f Update dependencies
SonarQube Scan / SonarQube Trigger (push) Failing after 3m5s
2026-01-21 21:24:45 +01:00
chris a545f58657 Merge branch 'feature/keyboard-control'
SonarQube Scan / SonarQube Trigger (push) Successful in 7m19s
2026-01-21 12:25:53 +01:00
chris 93103e4e49 Add Keyboard Control 2026-01-21 12:25:28 +01:00
chris 0d7d5d8fbc Add missing dependency to fix test
SonarQube Scan / SonarQube Trigger (push) Successful in 8m1s
2026-01-08 23:02:38 +01:00
11 changed files with 99 additions and 90 deletions
-18
View File
@@ -1,18 +0,0 @@
{
"spec": {
"template_id": "kmt",
"targets": {
"android": {
"ui": [
"compose"
]
},
"desktop": {
"ui": [
"compose"
]
}
}
},
"timestamp": "2024-04-29T06:04:57.807358293Z"
}
+2
View File
@@ -23,6 +23,8 @@ jobs:
distribution: 'temurin' distribution: 'temurin'
- name: Setup Android SDK - name: Setup Android SDK
uses: android-actions/setup-android@v3 uses: android-actions/setup-android@v3
- name: Install missing packages
run: apt-get update; apt-get install -y libglu1-mesa-dev
- name: Cache SonarQube packages - name: Cache SonarQube packages
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
+18 -20
View File
@@ -3,7 +3,6 @@ plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kotlin.android)
} }
android { android {
@@ -18,23 +17,6 @@ android {
versionName = libs.versions.app.version.name.get() versionName = libs.versions.app.version.name.get()
} }
dependencies {
implementation(compose.components.resources)
implementation(compose.runtime)
// implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(libs.androidx.activity.compose)
// implementation(libs.compose.ui.text.googlefonts)
implementation(projects.commonUI)
// implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.tooling.preview)
testImplementation(libs.kotlin.test)
testImplementation(libs.atrium)
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get()) sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get()) targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
@@ -42,7 +24,11 @@ android {
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
} }
debug { debug {
@@ -64,6 +50,18 @@ android {
} }
dependencies { dependencies {
implementation(projects.commonUI)
implementation(libs.compose.runtime)
implementation(libs.compose.ui)
implementation(libs.compose.material3)
implementation(libs.compose.components.resources)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.ktx)
debugImplementation(libs.androidx.tooling)
implementation(libs.compose.ui.tooling.preview)
debugImplementation(libs.compose.ui.tooling)
testImplementation(libs.kotlin.test)
testImplementation(libs.atrium)
} }
+17
View File
@@ -0,0 +1,17 @@
-dontwarn kotlinx.coroutines.debug.*
-dontwarn kotlinx.datetime.**
-keep class org.jetbrains.skia.** { *; }
-keep class org.jetbrains.skiko.** { *; }
-ignorewarnings
# Windows folders
-keep class com.sun.jna.* { *; }
-keepclassmembers class * extends com.sun.jna.* { public *; }
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
void sourceInformation(androidx.compose.runtime.Composer,java.lang.String);
void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String);
void sourceInformationMarkerEnd(androidx.compose.runtime.Composer);
}
@@ -1,12 +0,0 @@
package ch.dissem.yaep.android
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
import ch.tutteli.atrium.api.verbs.expect
import kotlin.test.Test
class DummyTest {
@Test
fun `ensure some test is run`() {
expect(true).toEqual(true)
}
}
+20 -10
View File
@@ -1,5 +1,5 @@
import com.android.build.gradle.internal.lint.AndroidLintTask import com.android.build.gradle.internal.lint.AndroidLintTask
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import nl.littlerobots.vcu.plugin.resolver.VersionSelectors
import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
import org.sonarqube.gradle.SonarTask import org.sonarqube.gradle.SonarTask
@@ -8,13 +8,14 @@ plugins {
alias(libs.plugins.versions) alias(libs.plugins.versions)
alias(libs.plugins.sonarqube) alias(libs.plugins.sonarqube)
alias(libs.plugins.kotlin.kover) alias(libs.plugins.kotlin.kover)
alias(libs.plugins.spotless)
alias(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false alias(libs.plugins.android.library) apply false
alias(libs.plugins.compose) apply false alias(libs.plugins.compose) apply false
alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.android) apply false
} }
sonar { sonar {
@@ -45,17 +46,26 @@ tasks.withType<KotlinJvmCompile>().configureEach {
} }
} }
tasks.withType<DependencyUpdatesTask> { spotless {
rejectVersionIf { kotlin {
isNonStable(candidate.version) && !isNonStable(currentVersion) target("**/*.kt")
targetExclude("**/build/**", "**/.gradle/**")
// ktlint("1.5.0")
diktat("1.0.1")
}
kotlinGradle {
target("**/*.gradle.kts")
targetExclude("**/build/**", "**/.gradle/**")
ktlint("1.5.0")
} }
} }
fun isNonStable(version: String): Boolean { versionCatalogUpdate {
return version.contains("dev", ignoreCase = true) sortByKey = false
|| version.contains("alpha", ignoreCase = true) keep {
|| version.contains("beta", ignoreCase = true) keepUnusedVersions = true
|| version.contains("RC", ignoreCase = true) }
versionSelector(VersionSelectors.STABLE)
} }
subprojects { subprojects {
+8 -9
View File
@@ -22,13 +22,13 @@ kotlin {
commonMain.dependencies { commonMain.dependencies {
api(projects.domain) api(projects.domain)
implementation(compose.components.resources) implementation(libs.compose.components.resources)
implementation(compose.runtime) implementation(libs.compose.runtime)
implementation(compose.foundation) implementation(libs.compose.foundation)
implementation(compose.ui) implementation(libs.compose.ui)
implementation(compose.components.uiToolingPreview) implementation(libs.compose.ui.tooling.preview)
implementation(compose.material3) implementation(libs.compose.material3)
implementation(libs.bundles.logging) implementation(libs.bundles.logging)
} }
@@ -37,8 +37,7 @@ kotlin {
implementation(libs.kotlin.test) implementation(libs.kotlin.test)
implementation(libs.atrium) implementation(libs.atrium)
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) implementation(libs.compose.ui.test)
implementation(compose.uiTest)
} }
jvmTest.dependencies { jvmTest.dependencies {
@@ -46,7 +45,7 @@ kotlin {
} }
androidMain.dependencies { androidMain.dependencies {
implementation(libs.androidx.compose.foundation) implementation(libs.compose.foundation)
} }
} }
} }
+4 -4
View File
@@ -12,14 +12,14 @@ kotlin {
dependencies { dependencies {
implementation(compose.desktop.currentOs) implementation(compose.desktop.currentOs)
implementation(compose.material3) implementation(libs.compose.material3)
implementation(compose.components.resources) implementation(libs.compose.components.resources)
implementation(projects.commonUI) implementation(projects.commonUI)
implementation(compose.components.uiToolingPreview) implementation(libs.compose.ui.tooling.preview)
testImplementation(libs.kotlin.test) testImplementation(libs.kotlin.test)
testImplementation(libs.atrium) testImplementation(libs.atrium)
testImplementation(compose.desktop.uiTestJUnit4) testImplementation(libs.compose.ui.test.desktop)
testImplementation(compose.desktop.currentOs) testImplementation(compose.desktop.currentOs)
} }
} }
+9
View File
@@ -9,3 +9,12 @@ android.useAndroidX=true
#MPP #MPP
kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.mpp.androidSourceSetLayoutVersion=2
#android.defaults.buildfeatures.resvalues=true
#android.enableAppCompileTimeRClass=false
#android.usesSdkInManifest.disallowed=false
#android.uniquePackageNames=false
#android.dependency.useConstraints=true
#android.r8.strictFullModeForKeepRules=false
#android.r8.optimizedResourceShrinking=false
#android.builtInKotlin=false
#android.newDsl=false
+19 -15
View File
@@ -1,26 +1,28 @@
[versions] [versions]
app-version-code = "1" app-version-code = "1"
app-version-name = "1.0.0" app-version-name = "1.0.0"
agp = "8.13.2" agp = "9.0.0"
jdk = "21" jdk = "21"
android-compileSdk = "36" android-compileSdk = "36"
android-minSdk = "26" android-minSdk = "26"
android-targetSdk = "36" android-targetSdk = "36"
androidx-activityCompose = "1.12.2"
androidx-compose = "1.10.0"
compose-plugin = "1.9.3"
kotlin = "2.3.0" kotlin = "2.3.0"
coreKtx = "1.17.0"
atrium = "1.2.0"
[libraries] [libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.12.2" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.17.0" }
androidx-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "androidx-compose" }
androidx-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "androidx-compose" }
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "androidx-compose" }
atrium = { module = "ch.tutteli.atrium:atrium-fluent", version.ref = "atrium" } compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version = "1.10.0" }
compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version = "1.10.0" }
compose-material3 = { module = "org.jetbrains.compose.material3:material3", version = "1.10.0-alpha05" }
compose-ui = { module = "org.jetbrains.compose.ui:ui", version = "1.10.0" }
compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version = "1.10.0" }
compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version = "1.10.0" }
compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version = "1.10.0" }
compose-ui-test = { module = "org.jetbrains.compose.ui:ui-test", version = "1.10.0" }
compose-ui-test-desktop = { module = "org.jetbrains.compose.ui:ui-test-desktop", version = "1.10.0" }
atrium = { module = "ch.tutteli.atrium:atrium-fluent", version = "1.2.0" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
@@ -31,13 +33,15 @@ logging-slf4j = { module = "org.slf4j:slf4j-simple", version = "2.0.17" }
logging = ["logging-jvm", "logging-slf4j"] logging = ["logging-jvm", "logging-slf4j"]
[plugins] [plugins]
versions = { id = "com.github.ben-manes.versions", version = "0.53.0" }
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } compose = { id = "org.jetbrains.compose", version = "1.10.0" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } versions = { id = "nl.littlerobots.version-catalog-update", version = "1.0.1" }
# Code Analysis Tools and Linters
sonarqube = { id = "org.sonarqube", version = "7.2.2.6593" } sonarqube = { id = "org.sonarqube", version = "7.2.2.6593" }
spotless = { id = "com.diffplug.spotless", version = "8.2.0" }
kotlin-kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.4" } kotlin-kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.4" }
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME