diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 903769d..2914612 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,7 +6,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 with: fetch-depth: 0 @@ -15,21 +15,21 @@ jobs: fastlaneDir: ./fastlane/metadata/android usePlayStoreLocales: true - - uses: actions/setup-java@b6e674f4b717d7b0ae3baee0fbe79f498905dfde + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: temurin - java-version: 11 + java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629 + uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a - name: Run tests env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: ./gradlew check coverageReport sonar --no-configuration-cache --no-daemon + run: ./gradlew check sonar --no-configuration-cache --no-daemon - name: Publish test reports - uses: mikepenz/action-junit-report@959aefb7f095e717eb407fe917238d61ca323ff3 + uses: mikepenz/action-junit-report@0a8a5ba57593d67b2e45de2c543b438412382b7b if: always() # always run even if the previous step fails with: report_paths: './**/build/test-results/**/TEST-*.xml' @@ -37,20 +37,20 @@ jobs: uiTests: runs-on: macos-latest steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 with: fetch-depth: 0 - - uses: actions/setup-java@b6e674f4b717d7b0ae3baee0fbe79f498905dfde + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: temurin - java-version: 11 + java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629 + uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a - name: Setup Android SDK - uses: android-actions/setup-android@7c5672355aaa8fde5f97a91aa9a99616d1ace6bc + uses: android-actions/setup-android@13f81365a437096ca29f87b1e7389bf0ea1385ed - name: Run tests run: ./gradlew allDevicesCheck --no-daemon -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" diff --git a/.github/workflows/sign.yml b/.github/workflows/sign.yml index 6b3999b..44cc6f5 100644 --- a/.github/workflows/sign.yml +++ b/.github/workflows/sign.yml @@ -9,20 +9,20 @@ jobs: sign: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 with: fetch-depth: 0 - - uses: actions/setup-java@b6e674f4b717d7b0ae3baee0fbe79f498905dfde + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: temurin - java-version: 11 + java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629 + uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a - name: Setup Android SDK - uses: android-actions/setup-android@7c5672355aaa8fde5f97a91aa9a99616d1ace6bc + uses: android-actions/setup-android@13f81365a437096ca29f87b1e7389bf0ea1385ed - name: Sign APK env: @@ -38,12 +38,12 @@ jobs: echo "storePassword=$MEALIENT_KEY_STORE_PASSWORD" >> keystore.properties echo "keyAlias=$MEALIENT_KEY_ALIAS" >> keystore.properties echo "keyPassword=$MEALIENT_KEY_PASSWORD" >> keystore.properties - ./gradlew build bundle coverageReport sonar uploadToAppSweepRelease --no-configuration-cache --no-daemon + ./gradlew build bundle sonar uploadToAppSweepRelease --no-configuration-cache --no-daemon cp app/build/outputs/apk/release/*.apk mealient-release.apk cp app/build/outputs/bundle/release/*.aab mealient-release.aab - name: Upload release build - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 with: name: Release build path: | diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/AndroidCompose.kt index 538a8a3..95e627f 100644 --- a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/AndroidCompose.kt @@ -3,18 +3,11 @@ package gq.kirmanak.mealient import com.android.build.api.dsl.CommonExtension import com.android.build.gradle.LibraryExtension import com.android.build.gradle.internal.dsl.BaseAppModuleExtension -import org.gradle.api.Action -import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project -import org.gradle.api.artifacts.MinimalExternalModuleDependency -import org.gradle.api.plugins.ExtensionAware -import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.dependencies -import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, ) { val variants = when (commonExtension) { is BaseAppModuleExtension -> commonExtension.applicationVariants @@ -59,16 +52,3 @@ internal fun Project.configureAndroidCompose( } } } - -private fun Project.library(name: String): Provider { - return libs.findLibrary(name).get() -} - -private val Project.kotlin: KotlinAndroidProjectExtension - get() = (this as ExtensionAware).extensions.getByName("kotlin") as KotlinAndroidProjectExtension - -private fun KotlinAndroidProjectExtension.sourceSets(configure: Action>): Unit = - (this as ExtensionAware).extensions.configure("sourceSets", configure) - - - diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Extensions.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Extensions.kt new file mode 100644 index 0000000..24c95d9 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Extensions.kt @@ -0,0 +1,29 @@ +package gq.kirmanak.mealient + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.Action +import org.gradle.api.NamedDomainObjectContainer +import org.gradle.api.Project +import org.gradle.api.artifacts.MinimalExternalModuleDependency +import org.gradle.api.plugins.ExtensionAware +import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet + +internal val Project.kotlin: KotlinAndroidProjectExtension + get() = (this as ExtensionAware).extensions.getByName("kotlin") as KotlinAndroidProjectExtension + +internal fun Project.kotlin(configure: Action): Unit = + (this as ExtensionAware).extensions.configure("kotlin", configure) + +internal fun KotlinAndroidProjectExtension.sourceSets(configure: Action>): Unit = + (this as ExtensionAware).extensions.configure("sourceSets", configure) + +internal fun Project.library(name: String): Provider { + return libs.findLibrary(name).get() +} + +internal fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { + (this as ExtensionAware).extensions.configure("kotlinOptions", block) +} diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt index e8549cf..db22559 100644 --- a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt @@ -4,12 +4,10 @@ package gq.kirmanak.mealient import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project -import org.gradle.api.plugins.ExtensionAware import org.gradle.kotlin.dsl.dependencies -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, ) { commonExtension.apply { compileSdk = Versions.COMPILE_SDK_VERSION @@ -72,8 +70,8 @@ internal fun Project.configureKotlinAndroid( add("coreLibraryDesugaring", libs.findLibrary("android-tools-desugar").get()) } } -} -fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { - (this as ExtensionAware).extensions.configure("kotlinOptions", block) -} \ No newline at end of file + kotlin { + jvmToolchain(17) + } +} diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt index db4359f..697ab06 100644 --- a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt @@ -7,8 +7,8 @@ import org.gradle.kotlin.dsl.getByType object Versions { const val MIN_SDK_VERSION = 26 - const val TARGET_SDK_VERSION = 33 - const val COMPILE_SDK_VERSION = 33 + const val TARGET_SDK_VERSION = 34 + const val COMPILE_SDK_VERSION = 34 } val Project.libs: VersionCatalog diff --git a/build.gradle.kts b/build.gradle.kts index 2a2ac6a..0365aea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ buildscript { plugins { alias(libs.plugins.sonarqube) - alias(libs.plugins.rootcoverage) + alias(libs.plugins.ksp) apply false } sonarqube { @@ -34,15 +34,6 @@ subprojects { "sonar.androidLint.reportPaths", "${projectDir.path}/build/reports/lint-results-debug.xml" ) - property( - "sonar.coverage.jacoco.xmlReportPaths", - "${projectDir.path}/build/reports/jacoco.xml" - ) } } -} - -rootCoverage { - generateXml = true - includeNoLocationClasses = true } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f460af7..a47b47c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,7 @@ org.gradle.caching=true android.useAndroidX=true android.enableJetifier=false kotlin.code.style=official -kapt.incremental.apt=true \ No newline at end of file +kapt.incremental.apt=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d2bce51..bf64cc5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,26 +1,24 @@ [versions] # https://maven.google.com/web/index.html?q=com.android.tools.build#com.android.tools.build:gradle -androidGradlePlugin = "7.4.2" +androidGradlePlugin = "8.1.2" # https://github.com/JetBrains/kotlin/releases -kotlin = "1.8.22" +kotlin = "1.9.10" # https://developer.android.com/jetpack/androidx/releases/navigation -googleNavigation = "2.5.3" +googleNavigation = "2.7.4" # https://dagger.dev/hilt/gradle-setup -hilt = "2.45" +hilt = "2.48.1" # https://github.com/protocolbuffers/protobuf/releases -protobuf = "3.22.2" +protobuf = "3.24.4" # https://github.com/google/protobuf-gradle-plugin/releases -protobufPlugin = "0.9.1" +protobufPlugin = "0.9.4" # https://plugins.gradle.org/plugin/org.sonarqube -sonarqube = "4.0.0.2929" -# https://plugins.gradle.org/plugin/nl.neotech.plugin.rootcoverage -rootCoverage = "1.6.0" +sonarqube = "4.4.1.3373" # https://plugins.gradle.org/plugin/com.guardsquare.appsweep -appsweep = "1.4.0" +appsweep = "1.5.2" # https://github.com/material-components/material-components-android/releases -material = "1.8.0" +material = "1.10.0" # https://developer.android.com/kotlin/ktx#core -coreKtx = "1.9.0" +coreKtx = "1.12.0" # https://developer.android.com/jetpack/androidx/releases/appcompat appcompat = "1.6.1" # https://developer.android.com/jetpack/androidx/releases/constraintlayout @@ -28,27 +26,27 @@ contraintLayout = "2.1.4" # https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout swipeRefreshLayout = "1.1.0" # https://developer.android.com/jetpack/androidx/releases/core -splashScreen = "1.0.0" +splashScreen = "1.0.1" # https://developer.android.com/jetpack/androidx/releases/lifecycle -lifecycle = "2.6.1" +lifecycle = "2.6.2" # https://developer.android.com/jetpack/androidx/releases/arch-core coreTesting = "2.2.0" # https://github.com/square/retrofit/tags retrofit = "2.9.0" # https://github.com/JakeWharton/retrofit2-kotlinx-serialization-converter/tags -retrofitKotlinxSerialization = "0.8.0" +retrofitKotlinxSerialization = "1.0.0" # https://github.com/Kotlin/kotlinx.serialization/releases -kotlinxSerialization = "1.5.0" +kotlinxSerialization = "1.6.0" # https://github.com/square/okhttp/tags -okhttp = "4.10.0" +okhttp = "4.11.0" # https://developer.android.com/jetpack/androidx/releases/paging -paging = "3.1.1" +paging = "3.2.1" # https://developer.android.com/jetpack/androidx/releases/room -room = "2.5.1" +room = "2.5.2" # https://github.com/Kotlin/kotlinx-datetime/releases -kotlinxDatetime = "0.4.0" +kotlinxDatetime = "0.4.1" # https://github.com/bumptech/glide/releases -glide = "4.15.1" +glide = "4.16.0" # https://github.com/androidbroadcast/ViewBindingPropertyDelegate/releases viewBindingDelegate = "1.5.9" # https://developer.android.com/jetpack/androidx/releases/datastore @@ -60,39 +58,40 @@ junit = "4.13.2" # https://developer.android.com/jetpack/androidx/releases/test junitKtx = "1.1.5" # https://github.com/Kotlin/kotlinx.coroutines/releases -coroutines = "1.6.4" +coroutines = "1.7.3" # https://github.com/robolectric/robolectric/releases -robolectric = "4.9.2" +robolectric = "4.10.3" # https://mvnrepository.com/artifact/com.google.truth/truth -truth = "1.1.3" +truth = "1.1.5" # https://mockk.io/ -mockk = "1.13.4" +mockk = "1.13.8" # https://github.com/square/leakcanary/releases -leakcanary = "2.10" +leakcanary = "2.12" # https://github.com/ChuckerTeam/chucker/releases -chucker = "3.5.2" +chucker = "4.0.0" # https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md desugar = "2.0.3" # https://github.com/google/ksp/releases -kspPlugin = "1.8.22-1.0.11" +kspPlugin = "1.9.10-1.0.13" # https://developer.android.com/jetpack/androidx/releases/sharetarget shareTarget = "1.2.0" # https://github.com/KasperskyLab/Kaspresso/releases -kaspresso = "1.5.1" -# https://developer.android.com/jetpack/androidx/releases/test -androidXTest = "1.5.0" +kaspresso = "1.5.3" # https://developer.android.com/jetpack/androidx/releases/test +androidXTestCore = "1.5.0" +androidXTestRules = "1.5.0" +androidXTestRunner = "1.5.2" androidXTestOrchestrator = "1.4.2" # https://mvnrepository.com/artifact/androidx.compose/compose-bom -composeBom = "2023.06.01" +composeBom = "2023.09.02" # https://developer.android.com/jetpack/androidx/releases/compose-kotlin -composeKotlinCompilerExtension = "1.4.8" +composeKotlinCompilerExtension = "1.5.3" # https://google.github.io/accompanist/ -accompanistVersion = "0.30.1" +accompanistVersion = "0.32.0" # https://developer.android.com/jetpack/androidx/releases/compose-material -materialCompose = "1.4.3" -# https://composedestinations.rafaelcosta.xyz/setup -composeDestinations = "1.8.42-beta" +materialCompose = "1.5.3" +# https://github.com/raamcosta/compose-destinations +composeDestinations = "1.9.54" # https://mvnrepository.com/artifact/androidx.hilt/hilt-navigation-compose hiltNavigationCompose = "1.0.0" @@ -167,9 +166,9 @@ androidx-room-testing = { group = "androidx.room", name = "room-testing", versio androidx-test-junit = { group = "androidx.test.ext", name = "junit-ktx", version.ref = "junitKtx" } androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "security" } -androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidXTest" } -androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "androidXTest" } -androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidXTest" } +androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidXTestCore" } +androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "androidXTestRules" } +androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidXTestRunner" } androidx-test-orchestrator = { group = "androidx.test", name = "orchestrator", version.ref = "androidXTestOrchestrator" } jakewharton-retrofitSerialization = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "retrofitKotlinxSerialization" } @@ -205,7 +204,6 @@ composeDestinations-ksp = { group = "io.github.raamcosta.compose-destinations", [plugins] sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } -rootcoverage = { id = "nl.neotech.plugin.rootcoverage", version.ref = "rootCoverage" } appsweep = { id = "com.guardsquare.appsweep", version.ref = "appsweep" } ksp = { id = "com.google.devtools.ksp", version.ref = "kspPlugin" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b916c04..5b5c106 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionSha256Sum=3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index 1f28dcd..1256298 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,6 +9,10 @@ pluginManagement { } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version("0.7.0") +} + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { diff --git a/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt b/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt index 05e3cfb..4c6ebd4 100644 --- a/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt +++ b/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt @@ -11,7 +11,7 @@ import org.robolectric.annotation.Config import javax.inject.Inject @RunWith(AndroidJUnit4::class) -@Config(application = HiltTestApplication::class, manifest = Config.NONE) +@Config(application = HiltTestApplication::class, manifest = Config.NONE, sdk = [Config.NEWEST_SDK]) abstract class HiltRobolectricTest { @get:Rule