Skip to content
Merged
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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
9 changes: 9 additions & 0 deletions jib-common/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
plugins {
id("com.ryandens.plugin-conventions")
}

dependencies {
implementation(project(":plugin"))
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")
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ryandens.javaagent;
package com.ryandens.javaagent.jib;

import java.io.File;
import javax.inject.Inject;
Expand All @@ -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.
*
* <p>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}.
* <p>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 {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
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
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 org.gradle.api.Action
import com.ryandens.javaagent.JavaagentPlugin
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

/**
Expand All @@ -28,6 +26,10 @@ import java.util.Optional
class JavaagentJibExtension :
JibGradlePluginExtension<JibExtensionConfiguration>,
JavaagentPlugin {
companion object {
const val COPY_AGENTS_TASK_NAME = "copyAgentsToJibDir"
}

override fun getExtraConfigType(): Optional<Class<JibExtensionConfiguration>> = Optional.of(JibExtensionConfiguration::class.java)

override fun extendContainerBuildPlan(
Expand Down Expand Up @@ -80,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)
}
Expand All @@ -100,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.JavaagentJibExtension"
extension.configuration(
Action<JibExtensionConfiguration> { extensionConfiguration ->
extensionConfiguration.javaagentFiles.set(
project.provider {
javaagentConfiguration
.get()
.files
.map { File(destinationDirectory.get().asFile, it.name) }
.toList()
},
)
},
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.ryandens.javaagent.jib.JavaagentJibExtension
56 changes: 56 additions & 0 deletions jib/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
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>("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)
dependsOn(":jib-common:jar")
dependsOn(":plugin:jar")
}

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")
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.JavaagentJibPlugin"
tags.set(listOf("javaagent", "instrumentation", "docker", "jib"))
compatibility {
features {
configurationCache = true
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.ryandens;


public final class HelloWorld {

public static void main(final String[] args) {
System.out.println("Hello World!");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.ryandens;

import org.junit.jupiter.api.Test;

final class HelloWorldTest {

@Test
void test() {
System.out.println("Hello test!");
}
}
Original file line number Diff line number Diff line change
@@ -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<Project> {
@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<JibExtensionConfiguration> { extensionConfiguration ->
extensionConfiguration.javaagentFiles.set(
project.provider {
javaagentConfiguration
.get()
.files
.map { File(destinationDirectory.get(), it.name) }
.toList()
},
)
},
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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" })
}
}
35 changes: 0 additions & 35 deletions plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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>("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")
Expand Down Expand Up @@ -71,18 +48,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"
Expand Down

This file was deleted.

2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down