Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/master_dev_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ jobs:
run: ./gradlew :mifospay:assembleDemoDebug

- name: Check badging
# This step is allowed to fail, as it's not critical for the build
continue-on-error: true
run: ./gradlew :mifospay:checkProdReleaseBadging

- name: Upload APKs
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/monthly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ name: Bump our Calendar Version

on:
workflow_dispatch:
schedule:
- cron: '30 3 1 * *'
# This is a monthly cron job that runs on the first of the month at 3:30 AM UTC
# Turning off for now
# schedule:
# - cron: '30 3 1 * *'
jobs:
tag:
name: Tag Monthly Release
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/weekly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ name: Tag Weekly Release

on:
workflow_dispatch:
schedule:
- cron: '0 4 * * 0'
# This is a weekly cron job that runs every Sunday at 4:00 AM UTC
# Turning off for now
# schedule:
# - cron: '0 4 * * 0'
jobs:
tag:
name: Tag Weekly Release
Expand Down
8 changes: 4 additions & 4 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,6 @@ gradlePlugin {
id = "mifospay.android.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidHilt") {
id = "mifospay.android.hilt"
implementationClass = "AndroidHiltConventionPlugin"
}
register("androidLibraryCompose") {
id = "mifospay.android.library.compose"
implementationClass = "AndroidLibraryComposeConventionPlugin"
Expand Down Expand Up @@ -91,6 +87,10 @@ gradlePlugin {
id = "mifospay.android.application.flavors"
implementationClass = "AndroidApplicationFlavorsConventionPlugin"
}
register("androidKoin") {
id = "mifospay.android.koin"
implementationClass = "AndroidKoinConventionPlugin"
}
register("detekt") {
id = "mifos.detekt.plugin"
implementationClass = "MifosDetektConventionPlugin"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.internal.scope.ProjectInfo.Companion.getBaseName
import com.google.devtools.ksp.gradle.KspExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
Expand All @@ -12,8 +13,9 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
with(target) {
pluginManager.apply {
apply("mifospay.android.library")
apply("mifospay.android.hilt")
apply("mifospay.android.koin")
}

extensions.configure<LibraryExtension> {
defaultConfig {
// set custom test runner
Expand All @@ -22,28 +24,42 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
testOptions.animationsDisabled = true
}

extensions.configure<KspExtension> {
arg("KOIN_USE_COMPOSE_VIEWMODEL","true")
}

dependencies {
add("implementation", project(":core:ui"))
add("implementation", project(":core:designsystem"))
add("implementation", project(":core:data"))

add("implementation", project(":libs:material3-navigation"))

add("implementation", libs.findLibrary("androidx.navigation.compose").get())
add("implementation", libs.findLibrary("kotlinx.collections.immutable").get())
add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get())
add("implementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get())
add("implementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get())
add("implementation", libs.findLibrary("androidx.tracing.ktx").get())

add("implementation", platform(libs.findLibrary("koin-bom").get()))
add("implementation", libs.findLibrary("koin-android").get())
add("implementation", libs.findLibrary("koin.androidx.compose").get())

add("implementation", libs.findLibrary("koin.android").get())
add("implementation", libs.findLibrary("koin.androidx.navigation").get())
add("implementation", libs.findLibrary("koin.androidx.compose").get())
add("implementation", libs.findLibrary("koin.core.viewmodel").get())

add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get())

add("testImplementation", kotlin("test"))
add("testImplementation", libs.findLibrary("hilt.android.testing").get())

add("testImplementation", libs.findLibrary("koin.test").get())
add("testImplementation", libs.findLibrary("koin.test.junit4").get())

add("debugImplementation", libs.findLibrary("androidx.compose.ui.test.manifest").get())
add("androidTestImplementation", libs.findLibrary("androidx.navigation.testing").get())
add("androidTestImplementation", libs.findLibrary("androidx.compose.ui.test").get())
add("androidTestImplementation", libs.findLibrary("hilt.android.testing").get())
add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get())
}
}
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import com.google.devtools.ksp.gradle.KspExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.mifospay.libs


class AndroidKoinConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.google.devtools.ksp")
}

dependencies {
val bom = libs.findLibrary("koin-bom").get()
add("implementation", platform(bom))
add("implementation", libs.findLibrary("koin.core").get())

add("implementation", libs.findLibrary("koin.annotations").get())
add("ksp", libs.findLibrary("koin.ksp.compiler").get())


add("testImplementation", libs.findLibrary("koin.test").get())
add("testImplementation", libs.findLibrary("koin.test.junit4").get())
}

extensions.configure<KspExtension> {
arg("KOIN_CONFIG_CHECK","true")
arg("USE_COMPOSE_VIEWMODEL", "false")
arg("KOIN_USE_COMPOSE_VIEWMODEL", "true")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
apply("mifos.detekt.plugin")
apply("mifos.spotless.plugin")
apply("mifos.ktlint.plugin")
apply("mifospay.android.koin")
}

extensions.configure<LibraryExtension> {
Expand All @@ -32,10 +33,12 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
// so resources inside ":core:module1" must be prefixed with "core_module1_"
resourcePrefix = path.split("""\W""".toRegex()).drop(1).distinct().joinToString(separator = "_").lowercase() + "_"
}

extensions.configure<LibraryAndroidComponentsExtension> {
configurePrintApksTask(this)
disableUnnecessaryAndroidTests(target)
}

dependencies {
add("testImplementation", kotlin("test"))
add("implementation", libs.findLibrary("androidx.tracing.ktx").get())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,5 @@ internal fun Project.configureAndroidCompose(
.let(reportsDestination::set)

stabilityConfigurationFile = rootProject.layout.projectDirectory.file("compose_compiler_config.conf")

enableStrongSkippingMode = true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import org.gradle.kotlin.dsl.getByType
val Project.libs
get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")

val Project.dynamicVersion
get() = project.version.toString().split('+')[0]

inline fun Project.detektGradle(crossinline configure: DetektExtension.() -> Unit) =
extensions.configure<DetektExtension> {
configure()
Expand Down
15 changes: 10 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ plugins {
alias(libs.plugins.firebase.crashlytics) apply false
alias(libs.plugins.firebase.perf) apply false
alias(libs.plugins.gms) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.roborazzi) apply false
alias(libs.plugins.secrets) apply false
Expand All @@ -36,9 +35,15 @@ plugins {
alias(libs.plugins.wire) apply false
}

tasks.register("versionFile").configure {
group = "publishing"
doLast {
File(projectDir, "version.txt").writeText(project.version.toString())
object DynamicVersion {
fun setDynamicVersion(file: File, version: String) {
val cleanedVersion = version.split('+')[0]
file.writeText(cleanedVersion)
}
}

tasks.register("versionFile") {
val file = File(projectDir, "version.txt")

DynamicVersion.setDynamicVersion(file, project.version.toString())
}
1 change: 0 additions & 1 deletion core/analytics/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
plugins {
alias(libs.plugins.mifospay.android.library)
alias(libs.plugins.mifospay.android.library.compose)
alias(libs.plugins.mifospay.android.hilt)
}

android {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,14 @@
package org.mifospay.core.analytics

import android.util.Log
import javax.inject.Inject
import javax.inject.Singleton

private const val TAG = "StubAnalyticsHelper"

/**
* An implementation of AnalyticsHelper just writes the events to logcat. Used in builds where no
* analytics events should be sent to a backend.
*/
@Singleton
internal class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper {
internal class StubAnalyticsHelper : AnalyticsHelper {
override fun logEvent(event: AnalyticsEvent) {
Log.d(TAG, "Received analytics event: $event")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,17 @@
*/
package org.mifospay.core.analytics.di

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.koin.dsl.module
import org.mifospay.core.analytics.AnalyticsHelper
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
internal abstract class AnalyticsModule {
@Binds
abstract fun bindsAnalyticsHelper(analyticsHelperImpl: FirebaseAnalyticsHelper): AnalyticsHelper
val AnalyticsModule = module {

companion object {
@Provides
@Singleton
fun provideFirebaseAnalytics(): FirebaseAnalytics {
return Firebase.analytics
}
single {
Firebase.analytics
}
single<AnalyticsHelper> {
FirebaseAnalyticsHelper(firebaseAnalytics = get())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,11 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.logEvent
import org.mifospay.core.analytics.AnalyticsEvent
import org.mifospay.core.analytics.AnalyticsHelper
import javax.inject.Inject

/**
* Implementation of `AnalyticsHelper` which logs events to a Firebase backend.
*/
internal class FirebaseAnalyticsHelper @Inject constructor(
internal class FirebaseAnalyticsHelper(
private val firebaseAnalytics: FirebaseAnalytics,
) : AnalyticsHelper {

Expand Down
6 changes: 4 additions & 2 deletions core/common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
*/
plugins {
alias(libs.plugins.mifospay.android.library)
alias(libs.plugins.mifospay.android.hilt)
}

android {
namespace = "org.mifospay.common"
}

dependencies {}
dependencies {
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@
*/
package org.mifospay.core.network

import javax.inject.Qualifier
import kotlin.annotation.AnnotationRetention.RUNTIME
import org.koin.core.annotation.Qualifier

@Qualifier
@Retention(RUNTIME)
@Retention(AnnotationRetention.RUNTIME)
annotation class Dispatcher(val mifosDispatcher: MifosDispatchers)

enum class MifosDispatchers {
Default,
IO,
}

@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class ApplicationScope
Loading