diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 50903f1..2c4b7b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,12 +49,21 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v6 + - name: Run unit tests + run: ./gradlew testDebugUnitTest + - name: Build APK run: | VERSION_CODE=$(git rev-list --count HEAD) VERSION_NAME=$(git describe --tags --always) ./gradlew assembleSignedRelease -PVERSION_CODE=$VERSION_CODE -PVERSION_NAME=$VERSION_NAME + - name: Upload APK + uses: actions/upload-artifact@v4 + with: + name: Cowspent-APK + path: app/build/outputs/apk/signedRelease/app-signedRelease.apk + - name: Release uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') diff --git a/app/build.gradle b/app/build.gradle index d195e9e..cf1cbb0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ plugins { - id 'com.android.application' version '9.2.1' - id 'org.jetbrains.kotlin.plugin.serialization' version '2.4.0' - id 'org.jetbrains.kotlin.plugin.compose' version '2.4.0' + id 'com.android.application' version '9.3.2' + id 'org.jetbrains.kotlin.plugin.serialization' version '2.4.10' + id 'org.jetbrains.kotlin.plugin.compose' version '2.4.10' } android { @@ -69,6 +69,12 @@ android { compose = true } + testOptions { + unitTests { + includeAndroidResources = true + } + } + kotlin { jvmToolchain(21) } @@ -96,21 +102,21 @@ android { } dependencies { - implementation 'androidx.compose.foundation:foundation:1.11.4' - implementation 'androidx.compose.runtime:runtime:1.11.4' + implementation 'androidx.compose.foundation:foundation:1.12.0' + implementation 'androidx.compose.runtime:runtime:1.12.0' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.work:work-runtime-ktx:2.11.2' implementation 'com.google.zxing:core:3.5.4' - implementation 'androidx.camera:camera-camera2:1.6.1' - implementation 'androidx.camera:camera-lifecycle:1.6.1' - implementation 'androidx.camera:camera-view:1.6.1' + implementation 'androidx.camera:camera-camera2:1.6.2' + implementation 'androidx.camera:camera-lifecycle:1.6.2' + implementation 'androidx.camera:camera-view:1.6.2' implementation 'com.github.nextcloud:Android-SingleSignOn:1.1.0' implementation 'com.opencsv:opencsv:5.12.0' - implementation platform('androidx.compose:compose-bom:2026.06.01') + implementation platform('androidx.compose:compose-bom:2026.08.00') implementation 'androidx.compose.ui:ui' implementation 'androidx.compose.material:material' implementation 'androidx.compose.material:material-icons-extended' @@ -121,5 +127,11 @@ dependencies { implementation 'androidx.security:security-crypto:1.1.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0' implementation "androidx.datastore:datastore-preferences:1.2.1" - implementation "com.google.crypto.tink:tink-android:1.22.0" + implementation "com.google.crypto.tink:tink-android:1.23.0" + + testImplementation 'junit:junit:4.13.2' + testImplementation 'io.mockk:mockk:1.14.11' + testImplementation 'org.robolectric:robolectric:4.16.1' + testImplementation 'androidx.test:core:1.7.0' + testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.11.0' }