Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 0 additions & 105 deletions build.gradle

This file was deleted.

106 changes: 106 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import com.github.stickerifier.stickerify.JlinkJavaLauncher
import com.github.stickerifier.stickerify.JlinkTask
import io.spring.gradle.nullability.NullabilityOptions
import org.gradle.internal.buildconfiguration.DaemonJvmPropertiesConfigurator
import org.gradle.kotlin.dsl.support.serviceOf

plugins {
java
application
alias(libs.plugins.spring.nullability)
}

repositories {
mavenCentral()
}

dependencies {
implementation(libs.gson)
implementation(libs.jspecify)
implementation(libs.logback.classic)
implementation(libs.logstash.logback.encoder)
implementation(libs.telegram.bot.api)
implementation(libs.tika)

constraints {
add("implementation", libs.jackson.core)
}

testImplementation(libs.hamcrest)
testImplementation(libs.junit.jupiter)
testImplementation(libs.mockwebserver)
testRuntimeOnly(libs.junit.platform)
}

group = "com.github.stickerifier"
version = "2.0"
description = "Telegram bot to convert medias into the format required to be used as Telegram stickers"

java.toolchain {
languageVersion = JavaLanguageVersion.of(26)
vendor = JvmVendorSpec.ADOPTIUM
}

tasks.named<UpdateDaemonJvm>(DaemonJvmPropertiesConfigurator.TASK_NAME) {
languageVersion = JavaLanguageVersion.of(26)
vendor = JvmVendorSpec.ADOPTIUM
}

val jlink = tasks.register<JlinkTask>("jlink") {
description = "Generates a minimal JRE for the project with compact object headers archive."

options = listOf("--strip-debug", "--no-header-files", "--no-man-pages", "--ignore-modified-runtime")
modules = listOf(
"java.instrument", // for junit
"java.naming", // for logback
"java.sql", // for tika
"jdk.unsupported" // for gson
)
includeModulePath = false
javaCompiler = javaToolchains.compilerFor(java.toolchain)

val execOps = serviceOf<ExecOperations>()
doLast {
val javaExe = outputDirectory.file("jre/bin/java").get().asFile.absolutePath
execOps.exec {
commandLine(javaExe, "-XX:+UseCompactObjectHeaders", "-Xshare:dump")
}
}
}

val CompileOptions.nullability: NullabilityOptions
get() = (this as ExtensionAware).extensions["nullability"] as NullabilityOptions

tasks.named<JavaCompile>(JavaPlugin.COMPILE_TEST_JAVA_TASK_NAME) {
options.nullability.checking = "tests"
}

tasks.test {
inputs.dir(jlink.map { it.outputDirectory.get().asFile })
javaLauncher = providers.provider { JlinkJavaLauncher(jlink.get()) }

useJUnitPlatform()
jvmArgs("--enable-final-field-mutation=ALL-UNNAMED")

testLogging {
events("started", "passed", "failed", "skipped")
}
}

application {
mainClass = "com.github.stickerifier.stickerify.runner.Main"
applicationDefaultJvmArgs = listOf("-XX:+UseCompactObjectHeaders", "-XX:+UseShenandoahGC", "-XX:ShenandoahGCMode=generational", "--enable-final-field-mutation=ALL-UNNAMED")
}

distributions {
main {
contents {
from(jlink)
}
}
}

tasks.named<CreateStartScripts>(ApplicationPlugin.TASK_START_SCRIPTS_NAME) {
(unixStartScriptGenerator as TemplateBasedScriptGenerator).template = resources.text.fromFile("src/main/resources/customUnixStartScript.txt")
(windowsStartScriptGenerator as TemplateBasedScriptGenerator).template = resources.text.fromFile("src/main/resources/customWindowsStartScript.txt")
}
2 changes: 1 addition & 1 deletion buildSrc/build.gradle → buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id('java-library')
`java-library`
}

repositories {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@
import org.gradle.api.file.FileSystemOperations;
import org.gradle.api.file.ProjectLayout;
import org.gradle.api.logging.LogLevel;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.jvm.toolchain.JavaCompiler;
import org.gradle.jvm.toolchain.JavaToolchainService;
import org.gradle.process.ExecOperations;
import org.jetbrains.annotations.NotNull;

Expand All @@ -39,7 +37,7 @@ public abstract class JlinkTask extends DefaultTask {
public abstract DirectoryProperty getOutputDirectory();

@Nested
protected abstract Property<@NotNull JavaCompiler> getJavaCompiler();
public abstract Property<JavaCompiler> getJavaCompiler();

@Inject
protected abstract FileSystemOperations getFs();
Expand All @@ -48,14 +46,14 @@ public abstract class JlinkTask extends DefaultTask {
protected abstract ExecOperations getExec();

@Inject
public JlinkTask(ProjectLayout layout, JavaToolchainService javaToolchain) {
public JlinkTask(ProjectLayout layout) {
setGroup("build");
setDescription("Generates a custom Java runtime image using jlink.");

getOptions().convention(List.of());
getModules().convention(List.of("ALL-MODULE-PATH"));
getIncludeModulePath().convention(true);
getOutputDirectory().convention(layout.getBuildDirectory().dir(getName()));

var toolchain = getProject().getExtensions().getByType(JavaPluginExtension.class).getToolchain();
getJavaCompiler().convention(javaToolchain.compilerFor(toolchain));
}

@TaskAction
Expand Down
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
org.gradle.cache=true
org.gradle.configuration-cache=true
org.gradle.isolated-projects=true
org.gradle.jvmargs=-Dfile.encoding=UTF-8
5 changes: 0 additions & 5 deletions settings.gradle

This file was deleted.

5 changes: 5 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}

rootProject.name = "Stickerify"
2 changes: 2 additions & 0 deletions src/test/resources/junit-platform.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
junit.jupiter.testclass.order.default=org.junit.jupiter.api.ClassOrderer$Random
junit.jupiter.testmethod.order.default=org.junit.jupiter.api.MethodOrderer$Random
Loading