Gitnuro/build.gradle.kts

252 lines
6.7 KiB
Text
Raw Normal View History

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
val javaLanguageVersion = JavaLanguageVersion.of(17)
2021-09-24 14:25:17 +02:00
plugins {
2022-04-04 18:55:21 +02:00
// Kotlin version must match compose version
kotlin("jvm") version "1.7.10"
kotlin("kapt") version "1.7.10"
kotlin("plugin.serialization") version "1.7.10"
2023-08-29 12:13:48 +02:00
id("org.jetbrains.compose") version "1.5.0"
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-05-14 14:22:00 +02:00
val projectVersion = "1.2.1"
2022-04-02 04:17:40 +02:00
val projectName = "Gitnuro"
2022-03-27 06:24: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
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-04-08 22:33:05 +02:00
val jgit = "6.5.0.202303070854-r"
2023-01-28 17:39:35 +01:00
2021-09-24 14:25:17 +02:00
implementation(compose.desktop.currentOs)
2023-05-03 15:13:20 +02:00
when (currentOs()) {
OS.LINUX -> implementation(compose.desktop.linux_arm64) // Include arm for linux builds
else -> {}
}
2021-11-22 03:38:16 +01:00
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
implementation(compose.desktop.components.splitPane)
implementation(compose("org.jetbrains.compose.ui:ui-util"))
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")
implementation("io.arrow-kt:arrow-core:1.2.0")
}
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
}
tasks.test {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
2021-09-24 14:25:17 +02:00
}
kotlin {
jvmToolchain {
languageVersion.set(javaLanguageVersion)
}
}
2022-08-06 21:03:45 +02:00
tasks.withType<KotlinCompile> {
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
}
tasks.withType<JavaExec> {
javaLauncher.set(javaToolchains.launcherFor {
languageVersion.set(javaLanguageVersion)
})
}
2021-09-24 14:25:17 +02:00
compose.desktop {
application {
mainClass = "com.jetpackduba.gitnuro.MainKt"
2023-07-16 17:47:48 +02:00
this@application.dependsOn("rustTasks")
sourceSets.forEach {
it.java.srcDir(rustGeneratedSource)
}
2021-09-24 14:25:17 +02:00
nativeDistributions {
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"))
}
macOS {
jvmArgs(
"-Dapple.awt.application.appearance=system"
)
2022-05-31 17:12:33 +02:00
iconFile.set(project.file("icons/icon.icns"))
}
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) {
2022-08-07 19:11:30 +02:00
archiveBaseName.set("$projectName-linux")
2022-03-27 06:27:31 +02:00
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes["Implementation-Title"] = name
2022-03-27 06:27:31 +02:00
attributes["Implementation-Version"] = projectVersion
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-16 17:47:48 +02:00
task("rust_generateKotlinFromUdl") {
println("Generate Kotlin")
2023-07-16 17:47:48 +02:00
generateKotlinFromUdl()
}
2023-07-16 17:47:48 +02:00
task("rust_build") {
buildRust()
}
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()
}
task("tasksList") {
println("Tasks")
tasks.forEach {
println("- ${it.name}")
}
}
task("rustTasks") {
2023-07-16 17:47:48 +02:00
buildRust()
copyRustBuild()
generateKotlinFromUdl()
}
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",
"--bin", "uniffi-bindgen", "generate", "src/repository_watcher.udl",
"--language", "kotlin",
"--out-dir", rustGeneratedSource
)
}
}
fun buildRust() {
exec {
println("Build rs called")
workingDir = File(project.projectDir, "rs")
commandLine = listOf(
"cargo", "build", "--release", "--features=uniffi/cli",
)
}
}
fun copyRustBuild() {
val outputDir = "${buildDir}/classes/kotlin/main"
2023-07-16 17:47:48 +02:00
println("Copy rs build called")
val workingDir = File(project.projectDir, "rs/target/release")
val directory = File(outputDir)
directory.mkdirs()
val originLib = when (currentOs()) {
2023-07-16 16:56:01 +02:00
OS.LINUX -> "libgitnuro_rs.so"
OS.WINDOWS -> "gitnuro_rs.dll"
2023-07-16 16:56:01 +02:00
OS.MAC -> "libgitnuro_rs.so" //TODO or is it a dylib? must be tested
}
val destinyLib = when (currentOs()) {
OS.LINUX -> "libuniffi_gitnuro.so"
OS.WINDOWS -> "uniffi_gitnuro.dll"
OS.MAC -> "libuniffi_gitnuro.so" //TODO or is it a dylib? must be tested
}
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
}