frigate/build.gradle
2026-05-21 13:39:16 +02:00

191 lines
7.5 KiB
Groovy

plugins {
id 'application'
id 'org.gradlex.extra-java-module-info' version '1.13.1'
id 'org.beryx.jlink' version '3.2.1'
}
def os = org.gradle.internal.os.OperatingSystem.current()
def releaseArch = System.getProperty('os.arch') == 'aarch64' ? 'aarch64' : 'x86_64'
group = 'com.sparrowwallet.frigate'
version = '1.5.3'
repositories {
mavenCentral()
}
tasks.withType(AbstractArchiveTask).configureEach {
useFileSystemPermissions()
}
dependencies {
implementation(project(':drongo'))
implementation('org.duckdb:duckdb_jdbc:1.4.4.0')
implementation('com.google.guava:guava:33.5.0-jre')
implementation('com.google.code.gson:gson:2.13.2')
implementation('com.github.arteam:simple-json-rpc-core:1.3')
implementation('com.github.arteam:simple-json-rpc-client:1.3') {
exclude group: 'com.github.arteam', module: 'simple-json-rpc-core'
}
implementation('com.github.arteam:simple-json-rpc-server:1.3') {
exclude group: 'org.slf4j'
}
implementation('com.fasterxml.jackson.core:jackson-databind:2.21.1')
implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-toml:2.21.1')
implementation('org.jcommander:jcommander:3.0')
implementation('org.zeromq:jeromq:0.6.0')
implementation ('org.slf4j:slf4j-api:2.0.17')
implementation ('ch.qos.logback:logback-classic:1.5.32') {
exclude group: 'org.slf4j'
}
testImplementation platform('org.junit:junit-bom:5.14.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
test {
useJUnitPlatform()
}
application {
mainModule = 'com.sparrowwallet.frigate'
mainClass = 'com.sparrowwallet.frigate.Frigate'
applicationDefaultJvmArgs = ["-XX:+HeapDumpOnOutOfMemoryError",
"--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
if(os.isMacOsX()) {
applicationDefaultJvmArgs += ["-Dapple.awt.UIElement=true"]
}
}
tasks.register('runCli', JavaExec) {
mainModule = 'com.sparrowwallet.frigate'
mainClass = 'com.sparrowwallet.frigate.cli.FrigateCli'
classpath = sourceSets.main.runtimeClasspath
jvmArgs = ["-XX:+HeapDumpOnOutOfMemoryError",
"--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
}
jlink {
mergedModule {
requires 'java.xml'
requires 'java.logging'
}
def nativePlatform = os.isMacOsX() ? 'macos' : os.isWindows() ? 'windows' : 'linux'
def nativeArch = releaseArch == 'aarch64' ? 'arm64' : 'amd64'
def excludeGlobs = (['linux', 'macos', 'windows'].collectMany { osName ->
['amd64', 'arm64'].findResults { arch ->
(osName == nativePlatform && arch == nativeArch) ? null : "glob:/com.sparrowwallet.frigate/native/${osName}/${arch}/**"
}
} + ['glob:/com.sparrowwallet.merged.module/META-INF/*']).join(',')
def jlinkOptions = ['--strip-native-commands', '--strip-java-debug-attributes', '--compress', 'zip-6', '--no-header-files', '--no-man-pages', '--ignore-signing-information', '--exclude-files', '**.png', '--exclude-resources', excludeGlobs]
if(os.isMacOsX()) {
jlinkOptions += ['--add-modules', 'java.desktop']
}
options = jlinkOptions
launcher {
name = 'frigate'
jvmArgs = ["--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
}
secondaryLauncher {
name = 'frigate-cli'
mainClass = 'com.sparrowwallet.frigate.cli.FrigateCli'
jvmArgs = ["--enable-native-access=duckdb.jdbc,com.sparrowwallet.drongo"]
}
jpackage {
imageName = os.isMacOsX() ? 'Frigate' : 'frigate'
installerName = imageName
appVersion = "${version}"
skipInstaller = !os.isLinux()
if(os.isWindows()) {
imageOptions = ['--win-console', '--resource-dir', 'src/main/deploy/package/windows/']
} else if(os.isMacOsX()) {
imageOptions = ['--icon', 'src/main/deploy/package/macos/frigate.icns', '--resource-dir', 'src/main/deploy/package/macos/', '--java-options', '-Dapple.awt.UIElement=true']
} else if(os.isLinux()) {
imageOptions = ['--resource-dir', 'src/main/deploy/package/linux/', '--icon', 'src/main/deploy/package/linux/frigate.png']
installerOptions = ['--linux-rpm-license-type', 'ASL 2.0', '--linux-deb-maintainer', 'mail@sparrowwallet.com']
}
}
}
tasks.jlink.finalizedBy('addUserWritePermission')
tasks.register('addUserWritePermission', Exec) {
if(os.isWindows()) {
commandLine 'icacls', layout.buildDirectory.dir('image/legal').get().toString(), '/grant', 'Users:(OI)(CI)F', '/T'
} else {
commandLine 'chmod', '-R', 'u+w', layout.buildDirectory.dir('image/legal').get().toString()
}
}
tasks.register('removeGroupWritePermission', Exec) {
commandLine 'chmod', '-R', 'g-w', layout.buildDirectory.dir('jpackage/frigate').get().toString()
}
tasks.register('packageZipDistribution', Zip) {
group = 'Other'
description = 'Packages a zip of the application image'
if(os.isWindows()) {
archiveFileName = "frigate-${version}-win-${releaseArch}.zip"
} else {
archiveFileName = "frigate-${version}-${releaseArch}.zip"
}
destinationDirectory = layout.buildDirectory.dir('jpackage')
preserveFileTimestamps = os.isMacOsX()
from(layout.buildDirectory.dir('jpackage')) {
include 'frigate/**'
include 'Frigate.app/**'
}
}
tasks.register('packageTarDistribution', Tar) {
group = 'Other'
description = 'Packages a tar.gz of the application image'
dependsOn removeGroupWritePermission
archiveFileName = "frigate-${version}-${releaseArch}.tar.gz"
destinationDirectory = layout.buildDirectory.dir('jpackage')
compression = Compression.GZIP
from(layout.buildDirectory.dir('jpackage')) {
include 'frigate/**'
}
}
extraJavaModuleInfo {
module('org.duckdb:duckdb_jdbc', 'duckdb.jdbc') {
exports('org.duckdb')
requires('java.sql')
}
module('com.github.arteam:simple-json-rpc-core', 'simple.json.rpc.core') {
exports('com.github.arteam.simplejsonrpc.core.annotation')
exports('com.github.arteam.simplejsonrpc.core.domain')
requires('com.fasterxml.jackson.core')
requires('com.fasterxml.jackson.annotation')
requires('com.fasterxml.jackson.databind')
requires('org.jetbrains.annotations')
}
module('com.github.arteam:simple-json-rpc-client', 'simple.json.rpc.client') {
exports('com.github.arteam.simplejsonrpc.client')
exports('com.github.arteam.simplejsonrpc.client.builder')
exports('com.github.arteam.simplejsonrpc.client.exception')
requires('com.fasterxml.jackson.core')
requires('com.fasterxml.jackson.databind')
requires('simple.json.rpc.core')
}
module('com.github.arteam:simple-json-rpc-server', 'simple.json.rpc.server') {
exports('com.github.arteam.simplejsonrpc.server')
requires('simple.json.rpc.core')
requires('com.google.common')
requires('org.slf4j')
requires('com.fasterxml.jackson.databind')
}
module('com.google.guava:listenablefuture|empty-to-avoid-conflict-with-guava', 'com.google.guava.listenablefuture')
module('com.google.code.findbugs:jsr305', 'com.google.code.findbugs.jsr305')
module('j2objc-annotations-2.8.jar', 'com.google.j2objc.j2objc.annotations', '2.8')
module('org.jcommander:jcommander', 'org.jcommander') {
exports('com.beust.jcommander')
}
module('eu.neilalexander:jnacl', 'jnacl') {
exports('com.neilalexander.jnacl.crypto')
}
}