// Top-level build file where you can add configuration options common to all sub-projects/modules. import org.apache.tools.ant.filters.* buildscript { ext.version_kotlin = '1.6.0' ext.version_shadow = "7.1.0" ext.version_gradle_versions_plugin = "0.28.0" ext.atomicfu_version = '0.17.0' ext.version_execfork = "0.2.0" ext.version_android_adbscreenrecorder = "0.1-alpha12" repositories { google() mavenCentral() mavenLocal() maven { url 'https://plugins.gradle.org/m2/' } maven { url 'https://jitpack.io/' } } dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.gms:google-services:4.3.10' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$version_kotlin" classpath "org.jetbrains.kotlin:kotlin-serialization:$version_kotlin" classpath "org.jetbrains.kotlinx:atomicfu-gradle-plugin:$atomicfu_version" classpath "com.gradle:gradle-enterprise-gradle-plugin:3.9" classpath "com.github.ben-manes:gradle-versions-plugin:$version_gradle_versions_plugin" classpath "com.github.UstadMobile.AdbScreenRecorder:lib-gradle-plugin:$version_android_adbscreenrecorder" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } apply plugin: "com.github.ben-manes.versions" allprojects { repositories { google() mavenCentral() mavenLocal() maven { url "https://devserver3.ustadmobile.com/maven" } maven { url "https://devserver3.ustadmobile.com/repo-mvn" } maven { url "https://jitpack.io" } //WordPress Utils Android - https://github.com/wordpress-mobile/WordPress-Utils-Android maven { url "https://a8c-libs.s3.amazonaws.com/android" } maven { url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/" } } } //Major.minor.database version version = "0.4.2" group = "com.ustadmobile.app" /** * Useful repository listings: * Android: https://maven.google.com/web/index.html * Kotlin: https://package-search.jetbrains.com/ */ ext { ustadVersion = project.version ustadVersionCode = 230 version_door = "0.0.59f" version_retriever = "0.0.1e" version_xmlpullparserkmp = '0.0.20' version_gradle_buildconfig_plugin = "1.1.7" version_jacoco_tool = "0.8.5" version_kotlin_jvmTarget = "1.8" version_kotlinx_serialization = "1.3.1" version_klock = "2.2.2" version_ktor = "1.6.8" version_coroutines = "1.5.2" version_atomicfu = "0.17.0" version_junit = "4.13" version_nanohttpd = "2.3.1" version_kxml = "2.3.0" version_json = "20220320" version_okhttp = "4.9.3" version_commons_io = "2.11.0" version_gson = "2.9.0" version_apache_commons_cli = "1.5.0" version_apache_commons_lang = "3.12.0" version_apache_commons_text = "1.8" version_apache_commons_dbcp2 = "2.9.0" version_apache_commons_compress = "1.21" version_mpandroidchart = "v3.1.0" version_mockwebserver = "4.9.1" version_simple_jndi = "0.23.0" version_sqlite_jdbc = "3.36.0.3" version_core_mockito = "4.4.0" version_kotlin_mockito = "4.0.0" version_compressor = "3.0.1" version_apache_commons_pool2 = "2.8.0" version_jsoup = "1.14.3" version_selenium = "4.1.3" version_chrome_manager = "3.7.1" version_nv_lang = "1.29" version_web_driver = "5.1.1" version_postgres_jdbc = "42.3.3" version_log4j = "2.17.2" version_exo_player = "2.14.0" version_napier = "2.5.0" version_browser_proxy = "2.1.5" version_logback = "1.2.11" version_kodein_di = "7.11.0" version_netty_tcnative = "2.0.51.Final" version_quartz_scheduler = "2.3.2" version_httpcomponents_core5 = "5.1.3" version_android_buildtools = "30.0.2" version_android_compile_sdk = 31 version_android_target_sdk = 31 version_android_min_sdk = 21 version_android_picasso = "2.8" version_android_desugar_jdk_libs = "1.1.5" version_kaspresso = "1.4.1" //Androidx versions as per https://developer.android.com/jetpack/androidx/versions version_androidx_annotation = "1.3.0" version_android_material = "1.5.0" version_androidx_appcompat = "1.4.1" version_androidx_legacy_support = "1.0.0" version_androidx_activity = "1.4.0" version_androidx_fragment = "1.4.1" version_androidx_core = '1.7.0' version_androidx_cardview = "1.0.0" version_androidx_coordinatorlayout = "1.2.0" version_androidx_lifecycle = "2.4.1" version_androidx_legacy = "1.0.0" version_android_room = "2.4.2" version_androidx_arch = "2.1.0" version_androidx_recyclerview = "1.2.1" version_android_multidex = "2.0.1" version_android_workmanager = "2.7.1" version_androidx_paging = "2.1.2" version_android_constraint_layout = "2.1.3" version_android_flexbox = "3.0.0" version_android_espresso = "3.4.0" version_android_acra = "5.9.1" version_android_junit_runner = "1.4.0" version_androidx_test_ext_junit = "1.1.3" //see https://mvnrepository.com/artifact/androidx.test.ext/junit version_android_espresso_recyclerviewchildactions = "1.0" version_androidx_databinding = "7.0.4" version_android_mockito = "4.4.0" version_android_roboelectric = "4.7.3" version_android_uiautomator = "2.2.0" version_android_maven_publish = "3.6.2" version_android_firebase_auth = "16.0.4" version_android_facebook_login = "4.37.0" version_android_twitter_login = "3.3.0" version_android_seismic = "1.0.3" version_android_navigation = "2.4.2" version_play_core = "1.10.3" version_android_leakcanary = "2.8.1" version_android_play_services_safetynet = "17.0.0" version_android_circleimageview = "3.1.0" version_androidx_viewpager2 = "1.1.0-rc01" version_android_aztec = "v1.5.4" version_android_wordpress_utils = "2.0.0" version_android_volley = "1.2.1" version_android_litr = "1.5.0" //see https://github.com/linkedin/LiTr version_android_sharp = "1.1.3@aar" version_js_node = "10.15.1" version_js_yarn="1.13.0" version_jakartamail="2.0.1" version_persian_date_picker_aliab="1.7.1" version_better_link_movement="2.2.0" /*Kotlin react web app*/ wrapperVersion = "pre.270-kotlin-1.6.0" version_kotlin_react = "17.0.2-$wrapperVersion" version_kotlin_react_router_dom = "6.0.2-$wrapperVersion" version_kotlin_styled = "5.3.3-$wrapperVersion" version_kotlin_redux = "4.1.2-$wrapperVersion" version_kotlin_extensions = "1.0.1-$wrapperVersion" version_kotlin_react_redux = "7.2.6-$wrapperVersion" version_kotlin_mui = "5.1.1-$wrapperVersion" version_npm_moment = "^2.29.1" version_npm_moment_timezone = "^0.5.34" version_npm_mement_io = "^1.3.13" version_npm_picker_ui = "^3.3.10" version_npm_mui_lab = "5.0.0-alpha.58" // These should be EXACTLY the same version as MUI kotlin wrapper. version_npm_mui_styles = "5.1.1" version_npm_mui_icons = "5.1.1" version_npm_mui_material = "5.1.1" version_npm_timezones = "^1.5.2" version_npm_buffer = "^6.0.3" version_npm_asmcrypto = "2.3.2" version_npm_emotion = "11.6.0" version_npm_google_charts = "^3.0.15" version_npm_html_to_image = "^1.9.0" version_npm_date_fns = "2.27.0" version_npm_mime_matcher = "^1.0.5" version_npm_mui_rte = "^2.0.1" version_npm_draft_js = "^0.11.7" version_npm_draft_js_html_export = "^1.4.1" version_npm_striptags = "^3.2.0" version_npm_react_easy_sort = "^1.4.1" version_react_linkify = "^1.0.0-alpha" version_linkify_js = "^3.0.5" version_linkify_react = "^3.0.4" } /* * Look for a command. If a variable in buildconfig specifies the path, and the file exists, then * use the variable value. Otherwise search the system path. */ ext.findCommand = {String command, String buildConfigVarName -> if(ext.buildConfigProperties.containsKey(buildConfigVarName) && rootProject.file(ext.buildConfigProperties.getProperty(buildConfigVarName)).exists()) { return ext.buildConfigProperties.getProperty(buildConfigVarName) }else { def pathDirs = System.getenv("PATH").split(File.pathSeparator) for(path in pathDirs) { if(file("$path/$command").exists()) { return "$path/$command" } } } return "PATHNOTFOUND" } ext.buildConfigProperties = new Properties() ext.buildConfigProperties.load(new FileInputStream(project.file("buildconfig.default.properties"))) if(project.file("buildconfig.local.properties").exists()) { ext.buildConfigProperties.load(new FileInputStream(project.file("buildconfig.local.properties"))) } if(System.getenv("TESTSERVER_HOST") != null) { ext.buildConfigProperties["test.um_http_testserver"] = System.getenv("TESTSERVER_HOST") } if(System.getenv("TESTSERVER_PORT") != null) { ext.buildConfigProperties["test.um_http_testserver_controlport"] = System.getenv("TESTSERVER_PORT") } ext.localProperties = new Properties() if(project.file("local.properties").exists()) { ext.localProperties.load(new FileInputStream(project.file("local.properties"))) } if(System.getenv("ACRA_HTTP_URI") != null) { ext.buildConfigProperties["android.acra.url"] = System.getenv("ACRA_HTTP_URI") } if(System.getenv("ACRA_BASIC_LOGIN") != null) { ext.buildConfigProperties["android.acra.user"] = System.getenv("ACRA_BASIC_LOGIN") } if(System.getenv("ACRA_BASIC_PASS") != null) { ext.buildConfigProperties["android.acra.auth"] = System.getenv("ACRA_BASIC_PASS") } if(System.getenv("DOORDB_POSTGRES_URL") != null) { ext.buildConfigProperties["doordb_postgres_url"] = System.getenv("DOORDB_POSTGRES_URL") } if(System.getenv("DOORDB_POSTGRES_USER") != null) { ext.buildConfigProperties["doordb_postgres_user"] = System.getenv("DOORDB_POSTGRES_USER") } if(System.getenv("DOORDB_POSTGRES_PASSWORD") != null) { ext.buildConfigProperties["doordb_postgres_password"] = System.getenv("DOORDB_POSTGRES_PASSWORD") } /** * Make sure lib-database:jsJar depends on lib-database:jvmJar */ subprojects { project -> afterEvaluate { if(project.name == "lib-database" && project.tasks.findByName("jsJar") != null){ project.tasks.findByName("jsJar").dependsOn(project.tasks.findByName("jvmJar")) } }} task newFromTemplate(type: Copy) { def replacementTokens = new Properties() def templateName = project.hasProperty("Template") ? project.property("Template") : "editscreen" replacementTokens["Entity"] = project.hasProperty("Entity") ? project.property("Entity") : "Entity" def baseFileName = "" if(project.hasProperty("BaseFileName")) { baseFileName = project.property("BaseFileName") }else if(templateName == "detailscreen") { baseFileName = replacementTokens["Entity"] + "Detail" }else if(templateName == "listscreen") { baseFileName = replacementTokens["Entity"] + "List" }else if(templateName == "editscreen") { baseFileName = replacementTokens["Entity"] + "Edit" } replacementTokens["ListItemName"] = project.hasProperty("ListItemName") ? project.property("ListItemName") : replacementTokens["Entity"] replacementTokens["ListItemName_SnakeCase"] = replacementTokens["ListItemName"].replaceAll("([^_A-Z])([A-Z])", '$1_$2').toLowerCase() replacementTokens["BaseFileName"] = baseFileName replacementTokens["BaseFileName_SnakeCase"] = baseFileName.replaceAll("([^_A-Z])([A-Z])", '$1_$2').toLowerCase() replacementTokens["Entity_SnakeCase"] = replacementTokens["Entity"].replaceAll("([^_A-Z])([A-Z])", '$1_$2').toLowerCase() replacementTokens["DisplayEntity"] = project.hasProperty("DisplayEntity") ? project.property("DisplayEntity") : replacementTokens["Entity"] replacementTokens["DisplayEntity_Import"] = replacementTokens["DisplayEntity"] != replacementTokens["Entity"] ? "import com.ustadmobile.lib.db.entities." + replacementTokens['DisplayEntity'] : "" replacementTokens["EditEntity"] = project.hasProperty("EditEntity") ? project.properties["EditEntity"] : replacementTokens["Entity"] replacementTokens["EditEntity_Import"] = replacementTokens["EditEntity"] != replacementTokens["Entity"] ? "import com.ustadmobile.lib.db.entities." + replacementTokens['EditEntity'] : "" replacementTokens["Entity_VariableName"] = replacementTokens["Entity"].substring(0, 1).toLowerCase() + replacementTokens["Entity"].substring(1) replacementTokens["DisplayEntity_VariableName"] = replacementTokens["DisplayEntity"].substring(0, 1).toLowerCase() + replacementTokens["DisplayEntity"].substring(1) replacementTokens["Entity_LowerCase"] = replacementTokens["Entity"].toLowerCase() replacementTokens["DisplayEntity_LowerCase"] = replacementTokens["DisplayEntity"].toLowerCase() replacementTokens["Entity_ViewBinding_VariableName"] = replacementTokens["Entity"].substring(0, 1) + replacementTokens["Entity"].substring(1).toLowerCase() from "templates/$templateName/" filter(ReplaceTokens, tokens: replacementTokens) into project.rootDir rename('@Entity@', replacementTokens["Entity"]) rename('@Entity_LowerCase@', replacementTokens["Entity_LowerCase"]) rename('@Entity_SnakeCase@', replacementTokens["Entity_SnakeCase"]) rename('@BaseFileName@', replacementTokens["BaseFileName"]) rename('@BaseFileName_SnakeCase@', replacementTokens["BaseFileName_SnakeCase"]) rename('@ListItemName_SnakeCase@', replacementTokens["ListItemName_SnakeCase"]) eachFile { if(it.relativePath.getFile(project.rootDir).exists()) { it.exclude() } } }