2022-08-06 21:03:45 +02:00
|
|
|
import org.gradle.jvm.tasks.Jar
|
2021-09-24 14:25:17 +02:00
|
|
|
import org.jetbrains.compose.compose
|
|
|
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
|
2023-01-29 14:35:13 +01:00
|
|
|
val javaLanguageVersion = JavaLanguageVersion.of(17)
|
2023-09-21 21:20:33 +02:00
|
|
|
val linuxArmTarget = "aarch64-unknown-linux-gnu"
|
2023-09-27 19:47:45 +02:00
|
|
|
val linuxX64Target = "x86_64-unknown-linux-gnu"
|
2023-01-29 14:35:13 +01:00
|
|
|
|
2021-09-24 14:25:17 +02:00
|
|
|
plugins {
|
2022-04-04 18:55:21 +02:00
|
|
|
// Kotlin version must match compose version
|
2022-09-30 14:48:23 +02:00
|
|
|
kotlin("jvm") version "1.7.10"
|
|
|
|
kotlin("kapt") version "1.7.10"
|
|
|
|
kotlin("plugin.serialization") version "1.7.10"
|
2023-09-08 16:26:40 +02:00
|
|
|
id("org.jetbrains.compose") version "1.5.1"
|
2021-09-24 14:25:17 +02:00
|
|
|
}
|
|
|
|
|
2022-04-04 02:48:40 +02:00
|
|
|
// Remember to update Constants.APP_VERSION when changing this version
|
2023-09-29 13:43:46 +02:00
|
|
|
val projectVersion = "1.3.1"
|
2022-04-02 04:17:40 +02:00
|
|
|
val projectName = "Gitnuro"
|
2022-03-27 06:24:29 +02:00
|
|
|
|
2023-07-14 14:28:29 +02:00
|
|
|
val rustGeneratedSource = "${buildDir}/generated/source/uniffi/main/com/jetpackduba/gitnuro/java"
|
|
|
|
|
2022-03-27 06:24:29 +02:00
|
|
|
group = "com.jetpackduba"
|
|
|
|
version = projectVersion
|
2021-09-24 14:25:17 +02:00
|
|
|
|
2023-09-21 21:20:33 +02:00
|
|
|
val isLinuxAarch64 = (properties.getOrDefault("isLinuxAarch64", "false") as String).toBoolean()
|
2023-10-29 16:46:31 +01:00
|
|
|
val useCross = (properties.getOrDefault("useCross", "false") as String).toBoolean()
|
2023-09-21 21:20:33 +02:00
|
|
|
|
|
|
|
|
2023-07-14 14:28:29 +02:00
|
|
|
sourceSets.getByName("main") {
|
|
|
|
kotlin.sourceSets.main.get().kotlin.srcDir(rustGeneratedSource)
|
|
|
|
}
|
|
|
|
|
|
|
|
sourceSets.main.get().java.srcDirs("src/main/resources").includes.addAll(arrayOf("**/*.*"))
|
|
|
|
|
2021-09-24 14:25:17 +02:00
|
|
|
repositories {
|
|
|
|
mavenCentral()
|
|
|
|
google()
|
|
|
|
maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
2023-09-08 16:26:40 +02:00
|
|
|
val jgit = "6.7.0.202309050840-r"
|
2023-09-21 21:20:33 +02:00
|
|
|
println("isLinuxAarch64=$isLinuxAarch64")
|
|
|
|
if (currentOs() == OS.LINUX && isLinuxAarch64) {
|
|
|
|
implementation(compose.desktop.linux_arm64)
|
|
|
|
} else {
|
|
|
|
implementation(compose.desktop.currentOs)
|
2023-05-03 15:13:20 +02:00
|
|
|
}
|
|
|
|
|
2021-11-22 03:38:16 +01:00
|
|
|
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
|
|
|
|
implementation(compose.desktop.components.splitPane)
|
2022-09-28 15:07:42 +02:00
|
|
|
implementation(compose("org.jetbrains.compose.ui:ui-util"))
|
2022-10-02 23:27:52 +02:00
|
|
|
implementation(compose("org.jetbrains.compose.components:components-animatedimage"))
|
2023-01-28 17:39:35 +01:00
|
|
|
implementation("org.eclipse.jgit:org.eclipse.jgit:$jgit")
|
|
|
|
implementation("org.eclipse.jgit:org.eclipse.jgit.gpg.bc:$jgit")
|
2023-03-18 17:33:51 +01:00
|
|
|
implementation("com.google.dagger:dagger:2.45")
|
|
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
|
|
|
|
kapt("com.google.dagger:dagger-compiler:2.45")
|
2022-08-06 20:37:07 +02:00
|
|
|
testImplementation(platform("org.junit:junit-bom:5.9.0"))
|
2023-03-18 17:33:51 +01:00
|
|
|
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
|
|
|
|
testImplementation("io.mockk:mockk:1.13.4")
|
2022-04-04 02:48:40 +02:00
|
|
|
implementation("com.squareup.retrofit2:retrofit:2.9.0")
|
|
|
|
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")
|
2022-05-16 19:15:29 +02:00
|
|
|
implementation("net.i2p.crypto:eddsa:0.3.0")
|
2023-01-29 23:01:49 +01:00
|
|
|
implementation("net.java.dev.jna:jna:5.13.0")
|
2023-07-26 18:48:15 +02:00
|
|
|
implementation("io.github.oshai:kotlin-logging-jvm:5.0.1")
|
2023-04-12 22:16:50 +02:00
|
|
|
implementation("org.slf4j:slf4j-api:2.0.7")
|
|
|
|
implementation("org.slf4j:slf4j-reload4j:2.0.7")
|
2023-07-14 14:28:29 +02:00
|
|
|
implementation("io.arrow-kt:arrow-core:1.2.0")
|
2022-03-30 01:04:20 +02:00
|
|
|
}
|
|
|
|
|
2023-05-03 15:13:20 +02:00
|
|
|
fun currentOs(): OS {
|
|
|
|
val os = System.getProperty("os.name")
|
|
|
|
return when {
|
|
|
|
os.equals("Mac OS X", ignoreCase = true) -> OS.MAC
|
|
|
|
os.startsWith("Win", ignoreCase = true) -> OS.WINDOWS
|
|
|
|
os.startsWith("Linux", ignoreCase = true) -> OS.LINUX
|
|
|
|
else -> error("Unknown OS name: $os")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
enum class OS {
|
|
|
|
LINUX,
|
|
|
|
WINDOWS,
|
|
|
|
MAC
|
|
|
|
}
|
|
|
|
|
2022-03-30 01:04:20 +02:00
|
|
|
tasks.test {
|
|
|
|
useJUnitPlatform()
|
|
|
|
testLogging {
|
|
|
|
events("passed", "skipped", "failed")
|
|
|
|
}
|
2021-09-24 14:25:17 +02:00
|
|
|
}
|
|
|
|
|
2023-01-29 11:53:19 +01:00
|
|
|
kotlin {
|
|
|
|
jvmToolchain {
|
2023-01-29 14:35:13 +01:00
|
|
|
languageVersion.set(javaLanguageVersion)
|
2023-01-29 11:53:19 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-06 21:03:45 +02:00
|
|
|
tasks.withType<KotlinCompile> {
|
2023-07-06 21:56:29 +02:00
|
|
|
kotlinOptions.allWarningsAsErrors = true
|
2022-05-09 22:02:24 +02:00
|
|
|
kotlinOptions.freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
|
2021-09-24 14:25:17 +02:00
|
|
|
}
|
|
|
|
|
2023-01-29 14:30:04 +01:00
|
|
|
tasks.withType<JavaExec> {
|
|
|
|
javaLauncher.set(javaToolchains.launcherFor {
|
2023-01-29 14:35:13 +01:00
|
|
|
languageVersion.set(javaLanguageVersion)
|
2023-01-29 14:30:04 +01:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-10-06 19:05:07 +02:00
|
|
|
|
2021-09-24 14:25:17 +02:00
|
|
|
compose.desktop {
|
|
|
|
application {
|
2022-09-28 15:07:42 +02:00
|
|
|
mainClass = "com.jetpackduba.gitnuro.MainKt"
|
2022-03-28 00:32:01 +02:00
|
|
|
|
2023-07-16 17:47:48 +02:00
|
|
|
this@application.dependsOn("rustTasks")
|
2023-07-14 14:28:29 +02:00
|
|
|
|
|
|
|
sourceSets.forEach {
|
|
|
|
it.java.srcDir(rustGeneratedSource)
|
|
|
|
}
|
|
|
|
|
2021-09-24 14:25:17 +02:00
|
|
|
nativeDistributions {
|
2021-12-14 13:42:31 +01:00
|
|
|
includeAllModules = true
|
2022-04-04 05:15:42 +02:00
|
|
|
packageName = projectName
|
|
|
|
version = projectVersion
|
|
|
|
description = "Multiplatform Git client"
|
2022-08-06 21:03:45 +02:00
|
|
|
|
2022-04-04 05:15:42 +02:00
|
|
|
windows {
|
|
|
|
iconFile.set(project.file("icons/icon.ico"))
|
|
|
|
}
|
2022-05-31 15:26:15 +02:00
|
|
|
|
|
|
|
macOS {
|
|
|
|
jvmArgs(
|
|
|
|
"-Dapple.awt.application.appearance=system"
|
|
|
|
)
|
2022-05-31 17:12:33 +02:00
|
|
|
iconFile.set(project.file("icons/icon.icns"))
|
2022-05-31 15:26:15 +02:00
|
|
|
}
|
2021-09-24 14:25:17 +02:00
|
|
|
}
|
|
|
|
}
|
2022-03-27 06:27:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-08-07 19:11:30 +02:00
|
|
|
task("fatJarLinux", type = Jar::class) {
|
2023-10-30 14:03:39 +01:00
|
|
|
val archSuffix = if (isLinuxAarch64) {
|
|
|
|
"arm_aarch64"
|
|
|
|
} else {
|
|
|
|
"x86_64"
|
|
|
|
}
|
2022-09-30 14:48:23 +02:00
|
|
|
|
2023-10-30 14:03:39 +01:00
|
|
|
archiveBaseName.set("$projectName-linux-$archSuffix")
|
2022-03-27 06:27:31 +02:00
|
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
|
|
|
|
|
|
manifest {
|
2022-03-28 00:32:01 +02:00
|
|
|
attributes["Implementation-Title"] = name
|
2022-03-27 06:27:31 +02:00
|
|
|
attributes["Implementation-Version"] = projectVersion
|
2022-09-28 01:48:34 +02:00
|
|
|
attributes["Main-Class"] = "com.jetpackduba.gitnuro.MainKt"
|
2022-03-27 06:27:31 +02:00
|
|
|
}
|
|
|
|
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) {
|
|
|
|
exclude(
|
|
|
|
"META-INF/MANIFEST.MF",
|
|
|
|
"META-INF/*.SF",
|
|
|
|
"META-INF/*.DSA",
|
|
|
|
"META-INF/*.RSA",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
with(tasks.jar.get() as CopySpec)
|
2023-07-14 14:28:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-07-16 17:47:48 +02:00
|
|
|
task("rust_generateKotlinFromUdl") {
|
2023-07-14 14:28:29 +02:00
|
|
|
println("Generate Kotlin")
|
2023-07-16 17:47:48 +02:00
|
|
|
generateKotlinFromUdl()
|
2023-07-14 14:28:29 +02:00
|
|
|
}
|
|
|
|
|
2023-07-16 17:47:48 +02:00
|
|
|
task("rust_build") {
|
|
|
|
buildRust()
|
2023-07-14 14:28:29 +02:00
|
|
|
}
|
|
|
|
|
2023-07-16 17:47:48 +02:00
|
|
|
tasks.getByName("compileKotlin").doLast {
|
|
|
|
println("compileKotlin called")
|
|
|
|
buildRust()
|
|
|
|
copyRustBuild()
|
|
|
|
generateKotlinFromUdl()
|
|
|
|
}
|
|
|
|
|
|
|
|
tasks.getByName("compileTestKotlin").doLast {
|
|
|
|
println("compileTestKotlin called")
|
|
|
|
buildRust()
|
|
|
|
copyRustBuild()
|
|
|
|
generateKotlinFromUdl()
|
|
|
|
}
|
2023-07-14 14:28:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
task("tasksList") {
|
|
|
|
println("Tasks")
|
|
|
|
tasks.forEach {
|
|
|
|
println("- ${it.name}")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
task("rustTasks") {
|
2023-07-16 17:47:48 +02:00
|
|
|
buildRust()
|
|
|
|
copyRustBuild()
|
|
|
|
generateKotlinFromUdl()
|
2023-07-14 14:28:29 +02:00
|
|
|
}
|
|
|
|
|
2023-07-15 13:56:26 +02:00
|
|
|
task("rust_copyBuild") {
|
2023-07-16 17:47:48 +02:00
|
|
|
copyRustBuild()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun generateKotlinFromUdl() {
|
|
|
|
exec {
|
|
|
|
workingDir = File(project.projectDir, "rs")
|
|
|
|
commandLine = listOf(
|
|
|
|
"cargo", "run", "--features=uniffi/cli",
|
2023-09-20 10:26:02 +02:00
|
|
|
"--bin", "uniffi-bindgen", "generate", "src/gitnuro.udl",
|
2023-07-16 17:47:48 +02:00
|
|
|
"--language", "kotlin",
|
|
|
|
"--out-dir", rustGeneratedSource
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun buildRust() {
|
|
|
|
exec {
|
|
|
|
println("Build rs called")
|
2023-10-29 16:46:31 +01:00
|
|
|
val binary = if (currentOs() == OS.LINUX && useCross) {
|
2023-09-27 19:47:45 +02:00
|
|
|
"cross"
|
|
|
|
} else {
|
|
|
|
"cargo"
|
|
|
|
}
|
|
|
|
|
2023-09-21 21:20:33 +02:00
|
|
|
val params = mutableListOf(
|
2023-09-27 19:47:45 +02:00
|
|
|
binary, "build", "--release", "--features=uniffi/cli",
|
2023-07-16 17:47:48 +02:00
|
|
|
)
|
2023-09-21 21:20:33 +02:00
|
|
|
|
2023-09-27 19:47:45 +02:00
|
|
|
if (currentOs() == OS.LINUX) {
|
|
|
|
if (isLinuxAarch64) {
|
|
|
|
params.add("--target=$linuxArmTarget")
|
|
|
|
} else {
|
|
|
|
params.add("--target=$linuxX64Target")
|
|
|
|
}
|
2023-09-21 21:20:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
workingDir = File(project.projectDir, "rs")
|
|
|
|
commandLine = params
|
2023-07-16 17:47:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun copyRustBuild() {
|
2023-07-14 14:28:29 +02:00
|
|
|
val outputDir = "${buildDir}/classes/kotlin/main"
|
2023-09-21 21:20:33 +02:00
|
|
|
|
2023-09-27 19:47:45 +02:00
|
|
|
val workingDirPath = if (currentOs() == OS.LINUX) {
|
|
|
|
if (isLinuxAarch64) {
|
|
|
|
"rs/target/$linuxArmTarget/release"
|
|
|
|
} else {
|
|
|
|
"rs/target/$linuxX64Target/release"
|
|
|
|
}
|
2023-09-21 21:20:33 +02:00
|
|
|
} else {
|
|
|
|
"rs/target/release"
|
|
|
|
}
|
|
|
|
|
|
|
|
val workingDir = File(project.projectDir, workingDirPath)
|
2023-07-14 14:28:29 +02:00
|
|
|
|
2023-07-15 13:56:26 +02:00
|
|
|
val directory = File(outputDir)
|
|
|
|
directory.mkdirs()
|
2023-07-14 14:28:29 +02:00
|
|
|
|
2023-07-15 13:56:26 +02:00
|
|
|
val originLib = when (currentOs()) {
|
2023-07-16 16:56:01 +02:00
|
|
|
OS.LINUX -> "libgitnuro_rs.so"
|
2023-07-15 13:56:26 +02:00
|
|
|
OS.WINDOWS -> "gitnuro_rs.dll"
|
2023-09-20 16:21:57 +02:00
|
|
|
OS.MAC -> "libgitnuro_rs.dylib"
|
2023-07-14 14:28:29 +02:00
|
|
|
}
|
2023-07-15 13:56:26 +02:00
|
|
|
|
|
|
|
val destinyLib = when (currentOs()) {
|
|
|
|
OS.LINUX -> "libuniffi_gitnuro.so"
|
|
|
|
OS.WINDOWS -> "uniffi_gitnuro.dll"
|
2023-09-20 16:21:57 +02:00
|
|
|
OS.MAC -> "libuniffi_gitnuro.dylib"
|
2023-07-15 13:56:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
val originFile = File(workingDir, originLib)
|
|
|
|
val destinyFile = File(directory, destinyLib)
|
|
|
|
|
|
|
|
com.google.common.io.Files.copy(originFile, destinyFile)
|
2023-07-16 17:47:48 +02:00
|
|
|
|
|
|
|
println("Copy rs build completed")
|
2023-07-26 18:48:15 +02:00
|
|
|
}
|