From ae8d8fb6e5240e02cf59735d7072195fa38827b1 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Fri, 10 Apr 2026 11:39:34 +0200 Subject: [PATCH 1/4] Upgrade project to Java 26 --- .github/workflows/unit-test.yml | 2 +- Dockerfile | 2 +- README.md | 4 ++-- build.gradle | 4 ++-- buildSrc/build.gradle | 2 +- gradle/gradle-daemon-jvm.properties | 20 ++++++++++---------- qodana.yaml | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index ad9ec237..fa2beb31 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -33,7 +33,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: temurin - java-version: 25 + java-version: 26 - name: Setup project and upload dependency graph uses: gradle/actions/setup-gradle@v6 diff --git a/Dockerfile b/Dockerfile index a09edd6a..3383436a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:25-alpine AS builder +FROM eclipse-temurin:26-alpine AS builder WORKDIR /app diff --git a/README.md b/README.md index 983197cd..7dbba195 100644 --- a/README.md +++ b/README.md @@ -55,11 +55,11 @@ And it's done! ## How to set up the project -1. Install JDK 25 (or higher) +1. Install JDK 26 (or higher) 2. Clone the project and move into its folder 3. Run the command `./gradlew build -x test` 4. Import the project inside your IDE as a Gradle project -5. Ensure your IDE is correctly configured to use a Java 25 (or higher) JDK +5. Ensure your IDE is correctly configured to use a Java 26 (or higher) JDK ## How to run the bot locally diff --git a/build.gradle b/build.gradle index 38bdd381..40fe80f7 100644 --- a/build.gradle +++ b/build.gradle @@ -30,12 +30,12 @@ version = '2.0' description = 'Telegram bot to convert medias into the format required to be used as Telegram stickers' java.toolchain { - languageVersion = JavaLanguageVersion.of(25) + languageVersion = JavaLanguageVersion.of(26) vendor = JvmVendorSpec.ADOPTIUM } updateDaemonJvm { - languageVersion = JavaLanguageVersion.of(25) + languageVersion = JavaLanguageVersion.of(26) vendor = JvmVendorSpec.ADOPTIUM } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index e4bfac92..0d772edd 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -7,6 +7,6 @@ repositories { } java.toolchain { - languageVersion = JavaLanguageVersion.of(25) + languageVersion = JavaLanguageVersion.of(26) vendor = JvmVendorSpec.ADOPTIUM } diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index a6a88292..59adfd73 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,12 +1,12 @@ #This file is generated by updateDaemonJvm -toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/dcd2068273614ddddeba9b7cbf486173/redirect -toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/c7dbcf54bacc4c888b93cc42ef334a2a/redirect -toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/dcd2068273614ddddeba9b7cbf486173/redirect -toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/c7dbcf54bacc4c888b93cc42ef334a2a/redirect -toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/f2eb759b13be68e51cbe892c2e95efbe/redirect -toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/9fafe4c46611108fb1379058ea84c17b/redirect -toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/dcd2068273614ddddeba9b7cbf486173/redirect -toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/c7dbcf54bacc4c888b93cc42ef334a2a/redirect -toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/303c95a051768711e2ec6e0c82bc7dbb/redirect +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/39e8ce74cee3e629d6fade20d237fff5/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/b7f6da648647bf05d05a14cdca409f73/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/39e8ce74cee3e629d6fade20d237fff5/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/b7f6da648647bf05d05a14cdca409f73/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/b5e76458e870841069679392d5855834/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ef59bf670a5688da71dc8f2e9d1f8b76/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/39e8ce74cee3e629d6fade20d237fff5/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/b7f6da648647bf05d05a14cdca409f73/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/06340fb34ff0b1b2e0cde9562b75744e/redirect toolchainVendor=ADOPTIUM -toolchainVersion=25 +toolchainVersion=26 diff --git a/qodana.yaml b/qodana.yaml index 2ef4e14c..d73f7776 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -5,4 +5,4 @@ include: - name: VulnerableLibrariesGlobal # bump: Qodana /qodana-jvm-community:([\d.]+)/ docker:jetbrains/qodana-jvm-community|/^[\d]{4}\.\d+$/|sort linter: jetbrains/qodana-jvm-community:2025.3 -projectJDK: temurin-25 +projectJDK: temurin-26 From ac9e789ebc49b4605b3e7e9e94a770a0b0bf70f8 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Fri, 10 Apr 2026 12:28:04 +0200 Subject: [PATCH 2/4] Handle process instance in a try-with-resources --- .../github/stickerifier/stickerify/process/ProcessHelper.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java b/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java index 624fb2af..67d28045 100644 --- a/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java +++ b/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java @@ -34,9 +34,8 @@ public final class ProcessHelper { */ public static String executeCommand(final String... command) throws ProcessException, InterruptedException { SEMAPHORE.acquire(); - try { - var process = new ProcessBuilder(command).redirectErrorStream(true).start(); + try (var process = new ProcessBuilder(command).redirectErrorStream(true).start()) { var output = new StringJoiner("\n"); var readerThread = Thread.ofVirtual().start(() -> { try (var reader = process.inputReader(UTF_8)) { From 03189d2cee5e56b6e74e001d2afa9119791dace5 Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Fri, 10 Apr 2026 12:28:40 +0200 Subject: [PATCH 3/4] Slightly improve code readability --- .../com/github/stickerifier/stickerify/media/MediaHelper.java | 4 ++-- .../github/stickerifier/stickerify/process/ProcessHelper.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/stickerifier/stickerify/media/MediaHelper.java b/src/main/java/com/github/stickerifier/stickerify/media/MediaHelper.java index af26601f..dabdcc3f 100644 --- a/src/main/java/com/github/stickerifier/stickerify/media/MediaHelper.java +++ b/src/main/java/com/github/stickerifier/stickerify/media/MediaHelper.java @@ -247,8 +247,7 @@ private static boolean isAnimatedStickerCompliant(File file, String mimeType) th try { var sticker = GSON.fromJson(uncompressedContent, AnimationDetails.class); - boolean isAnimationCompliant = isAnimationCompliant(sticker); - if (isAnimationCompliant) { + if (isAnimationCompliant(sticker)) { try { return Files.size(file.toPath()) <= MAX_ANIMATION_FILE_SIZE; } catch (IOException e) { @@ -504,6 +503,7 @@ private static String[] buildFfmpegCommand(String[] baseCommand, String... addit var commands = new String[baseCommand.length + additionalOptions.length]; System.arraycopy(baseCommand, 0, commands, 0, baseCommand.length); System.arraycopy(additionalOptions, 0, commands, baseCommand.length, additionalOptions.length); + return commands; } diff --git a/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java b/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java index 67d28045..ad720d82 100644 --- a/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java +++ b/src/main/java/com/github/stickerifier/stickerify/process/ProcessHelper.java @@ -72,6 +72,7 @@ private static int getMaxConcurrentProcesses() { if (value < 1) { throw new IllegalArgumentException("The environment variable CONCURRENT_PROCESSES must be >= 1 (was " + concurrentProcesses + ")"); } + return value; } From 0000bb671ad445f4ee8e8dba63fec8d406850c7a Mon Sep 17 00:00:00 2001 From: Roberto Cella Date: Fri, 10 Apr 2026 13:33:46 +0200 Subject: [PATCH 4/4] Configure image parameter in qodana action to prevent its warning --- .github/workflows/unit-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index fa2beb31..91da2e21 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -69,6 +69,8 @@ jobs: use-caches: false post-pr-comment: false pr-mode: false + # bump: Qodana /qodana-jvm-community:([\d.]+)/ docker:jetbrains/qodana-jvm-community|/^[\d]{4}\.\d+$/|sort + args: --image jetbrains/qodana-jvm-community:2025.3 - name: Upload results to GitHub uses: github/codeql-action/upload-sarif@v4