| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- plugins {
- id 'org.sonarqube'
- id 'java-library'
- id 'java-test-fixtures'
- id 'org.jetbrains.kotlin.jvm'
- id 'maven-publish'
- id 'jacoco'
- }
- /**
- * Return the latest available domain version from git, if git is installed.
- */
- def getGitVersion = { ->
- def domainTagPrefix = 'domain-v'
- def stdout = new ByteArrayOutputStream()
- def stderr = new ByteArrayOutputStream()
- try {
- exec {
- commandLine 'git', 'describe', '--tags', '--match', domainTagPrefix + '*'
- standardOutput = stdout
- errorOutput = stderr
- ignoreExitValue true
- }
- def string = stdout.toString().trim()
- def versionMatches = (string =~ /^${domainTagPrefix}([0-9.]+).*$/)[0][1]
- if (versionMatches.isEmpty()) return null
- return versionMatches
- } catch (ignored) {
- return null
- }
- }
- dependencies {
- api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
- api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
- api 'com.googlecode.libphonenumber:libphonenumber:8.13.39'
- api 'androidx.annotation:annotation:1.8.0'
- api 'net.sourceforge.streamsupport:streamsupport-flow:1.7.4'
- api 'com.google.protobuf:protobuf-kotlin-lite:3.25.1'
- implementation "org.slf4j:slf4j-api:$slf4j_version"
- // commons-io >2.6 requires android 8
- implementation 'commons-io:commons-io:2.6'
- implementation 'net.i2p.crypto:eddsa:0.3.0'
- implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"
- // Note: when updating this version, we need to include the libjnidispatch.so of the same
- // version for each ABI in app/libs/
- // The libjnidispatch.so files can be found in the .jar file:
- // https://github.com/java-native-access/jna/tree/master/dist
- implementation "net.java.dev.jna:jna:5.13.0"
- testImplementation "junit:junit:$junit_version"
- testImplementation 'org.mockito:mockito-core:4.8.1'
- testImplementation "org.powermock:powermock-reflect:2.0.9"
- testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlin_coroutines_version"
- testImplementation "org.slf4j:slf4j-simple:$slf4j_version"
- testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
- testImplementation project(':test-helpers')
- // OkHttp
- api platform('com.squareup.okhttp3:okhttp-bom:4.12.0')
- api 'com.squareup.okhttp3:okhttp'
- api 'com.squareup.okhttp3:logging-interceptor'
- }
- sourceSets {
- def isProtobufSubrepositoryInitialized = file("./protocol/src/common.proto").exists()
- assert isProtobufSubrepositoryInitialized: "Error: Git protobuf submodule missing. Please run `git submodule update --init`.\n"
- main {
- java.srcDirs += "./build/generated/source/proto/main/java"
- java.srcDirs += "./build/generated/source/proto/main/kotlin"
- java.srcDirs += './build/generated/source/libthreema'
- }
- }
- test {
- useJUnit()
- }
- jacocoTestReport {
- reports {
- xml.required = true
- html.required = false
- }
- }
- sonarqube {
- properties {
- property 'sonar.projectKey', 'android-client'
- property 'sonar.projectName', 'Threema for Android'
- property "sonar.sources", "src/main/"
- property "sonar.exclusions", "src/main/java/ove/crypto/**"
- property "sonar.tests", "src/test/"
- property "sonar.sourceEncoding", "UTF-8"
- property "sonar.verbose", "true"
- property 'sonar.coverage.jacoco.xmlReportPaths', "$projectDir.parentFile.path/build/reports/jacoco/codeCoverageReport/codeCoverageReport.xml"
- }
- }
- afterEvaluate {
- def bindingsDirectory = '../build/generated/source/libthreema'
- // Define the task to generate libthreema library (only used to generate bindings for it)
- def generateLibthreema = tasks.register("generateLibthreema", Exec) {
- workingDir "${project.projectDir}/libthreema"
- commandLine 'cargo', 'build', '-F', 'uniffi', '-p', 'libthreema', '--release'
- }
- // Define the task to generate the uniffi bindings for libthreema
- def uniffiBindings = tasks.register("generateUniFFIBindings") {
- dependsOn generateLibthreema
- doLast {
- exec {
- // It seems that the uniffi package generates a "*.so" file on linux and a "*.dylib" on mac
- // while using the cargo build command from the gradle task above ("generateLibthreema").
- final String uniffiLibraryFilePathPrefix = "${project.projectDir}/libthreema/target/release/liblibthreema"
- File uniffiLibraryFile = file("${uniffiLibraryFilePathPrefix}.so")
- if (!uniffiLibraryFile.exists()) {
- uniffiLibraryFile = file("${uniffiLibraryFilePathPrefix}.dylib")
- }
- assert uniffiLibraryFile.exists(): "Error: Missing pre-generated uniffy library file in libthreema/target/*/ directory.\n"
- workingDir "${project.projectDir}/libthreema"
- commandLine 'cargo', 'run', '-p', 'uniffi-bindgen', 'generate', '--library', "${uniffiLibraryFile.path}", '--language', 'kotlin', '--out-dir', "${bindingsDirectory}", '--no-format'
- }
- }
- }
- tasks["compileKotlin"].dependsOn(uniffiBindings)
- }
- publishing {
- publications {
- library(MavenPublication) {
- from components.java
- version getGitVersion()
- }
- }
- repositories {
- maven {
- url System.getenv("CI_API_V4_URL") + "/projects/" + System.getenv("CI_PROJECT_ID") + "/packages/maven"
- name "Gitlab"
- credentials(HttpHeaderCredentials) {
- name = 'Job-Token'
- value = System.getenv("CI_JOB_TOKEN")
- }
- authentication {
- header(HttpHeaderAuthentication)
- }
- }
- }
- }
- tasks.register('compileProto', Exec) {
- workingDir "${project.projectDir}"
- commandLine './compile-proto.sh'
- }
- tasks.compileKotlin.dependsOn(compileProto)
- tasks.register('libthreemaCleanUp', Exec) {
- workingDir "${project.projectDir}/libthreema"
- commandLine 'cargo', 'clean'
- }
- tasks.clean.dependsOn(libthreemaCleanUp)
- java.targetCompatibility = JavaVersion.VERSION_11
- sourceCompatibility = JavaVersion.VERSION_11
|