import com.netflix.gradle.plugins.deb.Deb import com.netflix.gradle.plugins.rpm.Rpm import org.gradle.jvm.tasks.Jar plugins { java application id("com.netflix.nebula.ospackage") version "12.3.0" } group = "tech.bitgoblin" version = "0.3.13" description = "Automated video transcoder service" java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } application { mainClass.set("tech.bitgoblin.dragoon.Main") } repositories { mavenCentral() } dependencies { implementation("commons-cli:commons-cli:1.3.1") implementation("org.tomlj:tomlj:1.0.0") implementation("org.apache.logging.log4j:log4j-api:2.19.0") implementation("org.apache.logging.log4j:log4j-core:2.19.0") testImplementation("junit:junit:4.11") } tasks.test { useJUnit() } // Fat JAR val fatJar by tasks.registering(Jar::class) { archiveBaseName.set("dragoon") archiveClassifier.set("") duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { attributes["Main-Class"] = "tech.bitgoblin.dragoon.Main" } from(sourceSets.main.get().output) dependsOn(configurations.runtimeClasspath) from({ configurations.runtimeClasspath.get() .filter { it.name.endsWith("jar") } .map { zipTree(it) } }) } // ---------------- Deb ---------------- tasks.register("build-deb") { dependsOn(fatJar) // Required package metadata packageName = project.name version = project.version.toString() release = "1" requires("openjdk-21-jre") requires("ffmpeg") user = project.name permissionGroup = project.name // Copy app files from(fatJar) into("/opt/dragoon") { rename { "dragoon.jar" } } from("packaging/opt/dragoon/log4j2.xml") { into("/opt/dragoon") } // config files from("packaging/etc/dragoon") { into("/etc/dragoon") } // systemd from("packaging/systemd/dragoon.service") { into("/etc/systemd/system") } } // ---------------- Rpm ---------------- tasks.register("build-rpm") { dependsOn(fatJar) packageName = project.name version = project.version.toString() release = "1" requires("java-21-openjdk") requires("ffmpeg-free") user = project.name permissionGroup = project.name from(fatJar) into("/opt/dragoon") { rename { "dragoon.jar" } } from("packaging/opt/dragoon/log4j2.xml") { into("/opt/dragoon") } from("packaging/etc/dragoon") { into("/etc/dragoon") } from("packaging/systemd/dragoon.service") { into("/etc/systemd/system") } postInstall(file("packaging/scripts/postinstall.sh")) } // Task to build both tasks.register("package-all") { dependsOn("build-deb", "build-rpm") }