From 57799c011a69404d2bde8cd342908a9cb506feef Mon Sep 17 00:00:00 2001 From: Ryan Dens Date: Sun, 26 Apr 2026 15:52:12 -0700 Subject: [PATCH 1/4] :recycle: extract jib plugin to its own project --- jib-common/build.gradle.kts | 20 +++++++ .../jib}/JibExtensionConfiguration.java | 7 ++- .../javaagent/jib}/JavaagentJibExtension.kt | 5 +- ....gradle.extension.JibGradlePluginExtension | 1 + jib/build.gradle.kts | 53 +++++++++++++++++++ .../JavaagentJibExtensionFunctionalTest.kt | 6 +-- .../main/java/com/ryandens/HelloWorld.java | 9 ++++ .../java/com/ryandens/HelloWorldTest.java | 11 ++++ .../javaagent/jib}/JavaagentJibPluginTest.kt | 4 +- plugin/build.gradle.kts | 12 ----- ....gradle.extension.JibGradlePluginExtension | 1 - settings.gradle.kts | 2 +- 12 files changed, 105 insertions(+), 26 deletions(-) create mode 100644 jib-common/build.gradle.kts rename {plugin/src/main/java/com/ryandens/javaagent => jib-common/src/main/java/com/ryandens/javaagent/jib}/JibExtensionConfiguration.java (88%) rename {plugin/src/main/kotlin/com/ryandens/javaagent => jib-common/src/main/kotlin/com/ryandens/javaagent/jib}/JavaagentJibExtension.kt (97%) create mode 100644 jib-common/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension create mode 100644 jib/build.gradle.kts rename {plugin/src/functionalTest/kotlin/com/ryandens/javaagent => jib/src/functionalTest/kotlin}/JavaagentJibExtensionFunctionalTest.kt (97%) create mode 100644 jib/src/functionalTest/resources/hello-world-project/src/main/java/com/ryandens/HelloWorld.java create mode 100644 jib/src/functionalTest/resources/hello-world-project/src/test/java/com/ryandens/HelloWorldTest.java rename {plugin/src/test/kotlin/com/ryandens/javaagent => jib/src/test/kotlin/com/ryandens/javaagent/jib}/JavaagentJibPluginTest.kt (90%) delete mode 100644 plugin/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension diff --git a/jib-common/build.gradle.kts b/jib-common/build.gradle.kts new file mode 100644 index 00000000..82ce81be --- /dev/null +++ b/jib-common/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + id("com.ryandens.plugin-conventions") +} + +val plugin: Configuration by configurations.creating + +configurations { + compileOnly { + extendsFrom(plugin) + } + testImplementation { + extendsFrom(plugin) + } +} + +dependencies { + implementation(project(":plugin")) + plugin("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") + plugin("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") +} diff --git a/plugin/src/main/java/com/ryandens/javaagent/JibExtensionConfiguration.java b/jib-common/src/main/java/com/ryandens/javaagent/jib/JibExtensionConfiguration.java similarity index 88% rename from plugin/src/main/java/com/ryandens/javaagent/JibExtensionConfiguration.java rename to jib-common/src/main/java/com/ryandens/javaagent/jib/JibExtensionConfiguration.java index c101d447..c90e2732 100644 --- a/plugin/src/main/java/com/ryandens/javaagent/JibExtensionConfiguration.java +++ b/jib-common/src/main/java/com/ryandens/javaagent/jib/JibExtensionConfiguration.java @@ -1,4 +1,4 @@ -package com.ryandens.javaagent; +package com.ryandens.javaagent.jib; import java.io.File; import javax.inject.Inject; @@ -11,9 +11,8 @@ * Extra configuration for {@link JavaagentJibExtension}. Declares the javaagent files that should * be copied into the container image and referenced via {@code -javaagent} JVM flags. * - *

Instances are created by Jib's plugin extension mechanism via {@link - * org.gradle.api.model.ObjectFactory}, so this class must have a single-argument constructor - * accepting {@link ObjectFactory}. + *

Instances are created by Jib's plugin extension mechanism via {@link ObjectFactory}, so this + * class must have a single-argument constructor accepting {@link ObjectFactory}. */ public class JibExtensionConfiguration { diff --git a/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentJibExtension.kt b/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt similarity index 97% rename from plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentJibExtension.kt rename to jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt index b5d867a2..5656ebe7 100644 --- a/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentJibExtension.kt +++ b/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt @@ -1,4 +1,4 @@ -package com.ryandens.javaagent +package com.ryandens.javaagent.jib import com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath import com.google.cloud.tools.jib.api.buildplan.ContainerBuildPlan @@ -10,6 +10,7 @@ import com.google.cloud.tools.jib.gradle.JibExtension import com.google.cloud.tools.jib.gradle.extension.GradleData import com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger +import com.ryandens.javaagent.JavaagentPlugin import org.gradle.api.Action import org.gradle.api.GradleException import org.gradle.api.NamedDomainObjectProvider @@ -105,7 +106,7 @@ class JavaagentJibExtension : jibExtension?.pluginExtensions { extensionParametersSpec -> extensionParametersSpec.pluginExtension { extension -> - extension.implementation = "com.ryandens.javaagent.JavaagentJibExtension" + extension.implementation = "com.ryandens.javaagent.jib.JavaagentJibExtension" extension.configuration( Action { extensionConfiguration -> extensionConfiguration.javaagentFiles.set( diff --git a/jib-common/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension b/jib-common/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension new file mode 100644 index 00000000..da8f8a4b --- /dev/null +++ b/jib-common/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension @@ -0,0 +1 @@ +com.ryandens.javaagent.jib.JavaagentJibExtension \ No newline at end of file diff --git a/jib/build.gradle.kts b/jib/build.gradle.kts new file mode 100644 index 00000000..1d12c1dc --- /dev/null +++ b/jib/build.gradle.kts @@ -0,0 +1,53 @@ +import org.gradle.kotlin.dsl.assign +import org.gradle.plugin.compatibility.compatibility + +plugins { + id("com.ryandens.plugin-conventions") +} + +val plugin: Configuration by configurations.creating + +configurations { + compileOnly { + extendsFrom(plugin) + } + testImplementation { + extendsFrom(plugin) + } +} + +tasks.named("pluginUnderTestMetadata") { + // adds dependencies with the plugin configuration to the plugin classpath + pluginClasspath.setFrom(pluginClasspath.plus(plugin.files)) + // avoid warnings + dependsOn(tasks.compileKotlin) + dependsOn(tasks.compileJava) + dependsOn(tasks.processResources) +} + +dependencies { + plugin("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") + plugin("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") + implementation(project(":jib-common")) + + testImplementation("org.jetbrains.kotlin:kotlin-test") + testImplementation("org.jetbrains.kotlin:kotlin-test-junit") + testImplementation("org.apache.commons:commons-compress:1.28.0") +} + +gradlePlugin { + plugins { + create("javaagentJibPlugin") { + id = "com.ryandens.javaagent-jib" + displayName = "Javaagent Jib Plugin" + description = "Automatically includes javaagents in OCI images created by Jib" + implementationClass = "com.ryandens.javaagent.jib.JavaagentJibExtension" + tags.set(listOf("javaagent", "instrumentation", "docker", "jib")) + compatibility { + features { + configurationCache = true + } + } + } + } +} diff --git a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentJibExtensionFunctionalTest.kt b/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt similarity index 97% rename from plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentJibExtensionFunctionalTest.kt rename to jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt index 596d6d9e..dd5d4b59 100644 --- a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentJibExtensionFunctionalTest.kt +++ b/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt @@ -1,5 +1,3 @@ -package com.ryandens.javaagent - import org.apache.commons.compress.archivers.ArchiveInputStream import org.apache.commons.compress.archivers.ArchiveStreamFactory import org.apache.commons.compress.archivers.tar.TarArchiveEntry @@ -42,7 +40,7 @@ class JavaagentJibExtensionFunctionalTest { val result = createAndBuildJavaagentProject(dependencies, listOf("jibBuildTar")) // Verify the result - assertTrue(result.output.contains("Running extension: com.ryandens.javaagent.JavaagentJibExtension")) + assertTrue(result.output.contains("Running extension: com.ryandens.javaagent.jib.JavaagentJibExtension")) // verify the agent was added to entrypoint assertTrue(File(functionalTestDir, JIB_IMAGE).exists()) @@ -70,7 +68,7 @@ class JavaagentJibExtensionFunctionalTest { val result = createAndBuildJavaagentProject(dependencies, listOf("jibBuildTar")) // Verify the result - assertTrue(result.output.contains("Running extension: com.ryandens.javaagent.JavaagentJibExtension")) + assertTrue(result.output.contains("Running extension: com.ryandens.javaagent.jib.JavaagentJibExtension")) // verify the agent was added to entrypoint assertTrue(File(functionalTestDir, JIB_IMAGE).exists()) diff --git a/jib/src/functionalTest/resources/hello-world-project/src/main/java/com/ryandens/HelloWorld.java b/jib/src/functionalTest/resources/hello-world-project/src/main/java/com/ryandens/HelloWorld.java new file mode 100644 index 00000000..e1a04c65 --- /dev/null +++ b/jib/src/functionalTest/resources/hello-world-project/src/main/java/com/ryandens/HelloWorld.java @@ -0,0 +1,9 @@ +package com.ryandens; + + +public final class HelloWorld { + + public static void main(final String[] args) { + System.out.println("Hello World!"); + } +} \ No newline at end of file diff --git a/jib/src/functionalTest/resources/hello-world-project/src/test/java/com/ryandens/HelloWorldTest.java b/jib/src/functionalTest/resources/hello-world-project/src/test/java/com/ryandens/HelloWorldTest.java new file mode 100644 index 00000000..f02b7888 --- /dev/null +++ b/jib/src/functionalTest/resources/hello-world-project/src/test/java/com/ryandens/HelloWorldTest.java @@ -0,0 +1,11 @@ +package com.ryandens; + +import org.junit.jupiter.api.Test; + +final class HelloWorldTest { + + @Test + void test() { + System.out.println("Hello test!"); + } +} \ No newline at end of file diff --git a/plugin/src/test/kotlin/com/ryandens/javaagent/JavaagentJibPluginTest.kt b/jib/src/test/kotlin/com/ryandens/javaagent/jib/JavaagentJibPluginTest.kt similarity index 90% rename from plugin/src/test/kotlin/com/ryandens/javaagent/JavaagentJibPluginTest.kt rename to jib/src/test/kotlin/com/ryandens/javaagent/jib/JavaagentJibPluginTest.kt index fd203d24..3b103daf 100644 --- a/plugin/src/test/kotlin/com/ryandens/javaagent/JavaagentJibPluginTest.kt +++ b/jib/src/test/kotlin/com/ryandens/javaagent/jib/JavaagentJibPluginTest.kt @@ -1,7 +1,7 @@ /* * This Kotlin source file was generated by the Gradle 'init' task. */ -package com.ryandens.javaagent +package com.ryandens.javaagent.jib import com.google.cloud.tools.jib.gradle.JibExtension import org.gradle.testfixtures.ProjectBuilder @@ -24,6 +24,6 @@ class JavaagentJibPluginTest { assertNotNull(project.configurations.findByName("javaagent")) val ext = project.extensions.getByType(JibExtension::class.java) - assertTrue(ext.pluginExtensions.get().any { it.implementation == "com.ryandens.javaagent.JavaagentJibExtension" }) + assertTrue(ext.pluginExtensions.get().any { it.implementation == "com.ryandens.javaagent.jib.JavaagentJibExtension" }) } } diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 43d959c1..3ef96035 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -71,18 +71,6 @@ gradlePlugin { } } } - create("javaagentJibPlugin") { - id = "com.ryandens.javaagent-jib" - displayName = "Javaagent Jib Plugin" - description = "Automatically includes javaagents in OCI images created by Jib" - implementationClass = "com.ryandens.javaagent.JavaagentJibExtension" - tags.set(listOf("javaagent", "instrumentation", "docker", "jib")) - compatibility { - features { - configurationCache = true - } - } - } create("javaagentTestPlugin") { id = "com.ryandens.javaagent-test" displayName = "Javaagent Test Plugin" diff --git a/plugin/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension b/plugin/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension deleted file mode 100644 index 7a5291b9..00000000 --- a/plugin/src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension +++ /dev/null @@ -1 +0,0 @@ -com.ryandens.javaagent.JavaagentJibExtension \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 9beb6f0a..302fd62e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,7 +8,7 @@ plugins { } rootProject.name = "javaagent-plugin" -include("plugin", "simple-agent", "otel") +include("jib-common", "jib", "plugin", "simple-agent", "otel") val isCI = providers.environmentVariable("CI").isPresent From b2dfdbbcd58356968226bd9602571342e4cd01aa Mon Sep 17 00:00:00 2001 From: Ryan Dens Date: Sun, 26 Apr 2026 16:16:41 -0700 Subject: [PATCH 2/4] :bug: update task dependencies --- jib/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jib/build.gradle.kts b/jib/build.gradle.kts index 1d12c1dc..8a1fe6da 100644 --- a/jib/build.gradle.kts +++ b/jib/build.gradle.kts @@ -23,6 +23,8 @@ tasks.named("pluginUnderTestMetadata") { dependsOn(tasks.compileKotlin) dependsOn(tasks.compileJava) dependsOn(tasks.processResources) + dependsOn(":jib-common:jar") + dependsOn(":plugin:jar") } dependencies { From 262fb61e4dedc96727c79bdf1874792027a994f0 Mon Sep 17 00:00:00 2001 From: Ryan Dens Date: Sun, 26 Apr 2026 16:37:22 -0700 Subject: [PATCH 3/4] :recycle: extract jib-specific logic from jib-common to jib-extension --- jib-common/build.gradle.kts | 15 +----- .../javaagent/jib/JavaagentJibExtension.kt | 30 ++--------- jib/build.gradle.kts | 3 +- .../javaagent/jib/JavaagentJibPlugin.kt | 52 +++++++++++++++++++ plugin/build.gradle.kts | 23 -------- 5 files changed, 61 insertions(+), 62 deletions(-) create mode 100644 jib/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibPlugin.kt diff --git a/jib-common/build.gradle.kts b/jib-common/build.gradle.kts index 82ce81be..4371586b 100644 --- a/jib-common/build.gradle.kts +++ b/jib-common/build.gradle.kts @@ -2,19 +2,8 @@ plugins { id("com.ryandens.plugin-conventions") } -val plugin: Configuration by configurations.creating - -configurations { - compileOnly { - extendsFrom(plugin) - } - testImplementation { - extendsFrom(plugin) - } -} - dependencies { implementation(project(":plugin")) - plugin("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") - plugin("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") + compileOnly("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") + compileOnly("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") } diff --git a/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt b/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt index 5656ebe7..ea8adba2 100644 --- a/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt +++ b/jib-common/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibExtension.kt @@ -6,18 +6,15 @@ import com.google.cloud.tools.jib.api.buildplan.FileEntriesLayer import com.google.cloud.tools.jib.api.buildplan.FileEntry import com.google.cloud.tools.jib.api.buildplan.FilePermissions import com.google.cloud.tools.jib.api.buildplan.LayerObject -import com.google.cloud.tools.jib.gradle.JibExtension import com.google.cloud.tools.jib.gradle.extension.GradleData import com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger import com.ryandens.javaagent.JavaagentPlugin -import org.gradle.api.Action import org.gradle.api.GradleException import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.tasks.Copy -import java.io.File import java.util.Optional /** @@ -29,6 +26,10 @@ import java.util.Optional class JavaagentJibExtension : JibGradlePluginExtension, JavaagentPlugin { + companion object { + const val COPY_AGENTS_TASK_NAME = "copyAgentsToJibDir" + } + override fun getExtraConfigType(): Optional> = Optional.of(JibExtensionConfiguration::class.java) override fun extendContainerBuildPlan( @@ -81,7 +82,7 @@ class JavaagentJibExtension : ) { val destinationDirectory = project.layout.buildDirectory.dir("jib-agents") val copyAgents = - project.tasks.register("copyAgentsToJibDir", Copy::class.java) { + project.tasks.register(COPY_AGENTS_TASK_NAME, Copy::class.java) { it.from(javaagentConfiguration) it.into(destinationDirectory) } @@ -101,26 +102,5 @@ class JavaagentJibExtension : } else { throw IllegalStateException("Should not be possible") } - - val jibExtension: JibExtension? = project.extensions.findByType(JibExtension::class.java) - - jibExtension?.pluginExtensions { extensionParametersSpec -> - extensionParametersSpec.pluginExtension { extension -> - extension.implementation = "com.ryandens.javaagent.jib.JavaagentJibExtension" - extension.configuration( - Action { extensionConfiguration -> - extensionConfiguration.javaagentFiles.set( - project.provider { - javaagentConfiguration - .get() - .files - .map { File(destinationDirectory.get().asFile, it.name) } - .toList() - }, - ) - }, - ) - } - } } } diff --git a/jib/build.gradle.kts b/jib/build.gradle.kts index 8a1fe6da..20e731e8 100644 --- a/jib/build.gradle.kts +++ b/jib/build.gradle.kts @@ -30,6 +30,7 @@ tasks.named("pluginUnderTestMetadata") { dependencies { plugin("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") plugin("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") + implementation(project(":plugin")) implementation(project(":jib-common")) testImplementation("org.jetbrains.kotlin:kotlin-test") @@ -43,7 +44,7 @@ gradlePlugin { id = "com.ryandens.javaagent-jib" displayName = "Javaagent Jib Plugin" description = "Automatically includes javaagents in OCI images created by Jib" - implementationClass = "com.ryandens.javaagent.jib.JavaagentJibExtension" + implementationClass = "com.ryandens.javaagent.jib.JavaagentJibPlugin" tags.set(listOf("javaagent", "instrumentation", "docker", "jib")) compatibility { features { diff --git a/jib/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibPlugin.kt b/jib/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibPlugin.kt new file mode 100644 index 00000000..e11944dd --- /dev/null +++ b/jib/src/main/kotlin/com/ryandens/javaagent/jib/JavaagentJibPlugin.kt @@ -0,0 +1,52 @@ +package com.ryandens.javaagent.jib + +import com.google.cloud.tools.jib.gradle.JibExtension +import com.ryandens.javaagent.JavaagentBasePlugin +import org.gradle.api.Action +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.Copy +import java.io.File + +/** + * Plugin for using the [JavaagentJibExtension] with Google's jib plugin + * + * We [Suppress] `unused` here, but the class is used by virtue of being published to Gradle Plugin portal + */ +@Suppress("unused") +class JavaagentJibPlugin : Plugin { + @OptIn(ExperimentalStdlibApi::class) + override fun apply(project: Project) { + project.pluginManager.apply(JavaagentJibExtension::class.java) + + val javaagentConfiguration = project.configurations.named(JavaagentBasePlugin.CONFIGURATION_NAME) + + val destinationDirectory = + project.tasks + .named( + JavaagentJibExtension.COPY_AGENTS_TASK_NAME, + Copy::class.java, + ).map { it.destinationDir } + + val jibExtension: JibExtension? = project.extensions.findByType(JibExtension::class.java) + + jibExtension?.pluginExtensions { extensionParametersSpec -> + extensionParametersSpec.pluginExtension { extension -> + extension.implementation = "com.ryandens.javaagent.jib.JavaagentJibExtension" + extension.configuration( + Action { extensionConfiguration -> + extensionConfiguration.javaagentFiles.set( + project.provider { + javaagentConfiguration + .get() + .files + .map { File(destinationDirectory.get(), it.name) } + .toList() + }, + ) + }, + ) + } + } + } +} diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 3ef96035..f0c6e68f 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -4,30 +4,7 @@ plugins { id("com.ryandens.plugin-conventions") } -val plugin: Configuration by configurations.creating - -configurations { - compileOnly { - extendsFrom(plugin) - } - testImplementation { - extendsFrom(plugin) - } -} - -tasks.named("pluginUnderTestMetadata") { - // adds dependencies with the plugin configuration to the plugin classpath - pluginClasspath.setFrom(pluginClasspath.plus(plugin.files)) - // avoid warnings - dependsOn(tasks.compileKotlin) - dependsOn(tasks.compileJava) - dependsOn(tasks.processResources) -} - dependencies { - plugin("com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0") - plugin("com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:3.5.3") - testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit") testImplementation("org.apache.commons:commons-compress:1.28.0") From 23114372b14f59c133fd8bb3ad05a98698e697d4 Mon Sep 17 00:00:00 2001 From: Ryan Dens Date: Sun, 26 Apr 2026 16:53:30 -0700 Subject: [PATCH 4/4] :bookmark: tag new release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5354330f..dae9f0b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,5 +5,5 @@ org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAME --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED org.gradle.configuration-cache=true org.gradle.caching=true -version=0.12.0 +version=0.12.1 group=com.ryandens