Skip to content

Commit 2adbf49

Browse files
breedx-splklaurit
andauthored
Switch CSA bundling to pure gradle (#2287)
* work in progress * update version * work around jar exploding * cleanup * add classdata extension classes and merge service files. * restore publishing and clean up boneyard * cleanup * modify building the csa jar a bit * add dependency --------- Co-authored-by: Lauri Tulmin <[email protected]>
1 parent 92fe947 commit 2adbf49

File tree

2 files changed

+112
-101
lines changed

2 files changed

+112
-101
lines changed

agent-csa-bundle/build-agent-csa-fat-jar.sh

Lines changed: 0 additions & 85 deletions
This file was deleted.

agent-csa-bundle/build.gradle.kts

Lines changed: 112 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,128 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
12

23
plugins {
34
id("maven-publish")
45
id("signing")
6+
id("com.gradleup.shadow")
57
}
68

7-
dependencies {
8-
implementation(project(":agent"))
9-
}
9+
// This should be updated for every CSA release, eventually in dependencyManagement?
10+
11+
val csaVersion = "25.4.0-1327"
12+
val otelInstrumentationVersion: String by rootProject.extra
1013

11-
// This should be updated for every CSA release
12-
val csaVersion = "25.3.0-1321"
1314
base.archivesName.set("splunk-otel-javaagent-csa")
1415

16+
val csaReleases: Configuration by configurations.creating {
17+
isCanBeResolved = true
18+
isCanBeConsumed = false
19+
}
20+
21+
val splunkAgent: Configuration by configurations.creating {
22+
isCanBeResolved = true
23+
isCanBeConsumed = false
24+
}
25+
26+
repositories {
27+
ivy {
28+
// Required to source artifact directly from github release page
29+
// https://github.com/signalfx/csa-releases/releases/download/<version>/oss-agent-mtagent-extension-deployment.jar
30+
url = uri("https://github.com/")
31+
metadataSources {
32+
artifact()
33+
}
34+
patternLayout {
35+
ivy("[organisation]/[module]/releases/download/[revision]/[artifact].[ext]")
36+
artifact("[organisation]/[module]/releases/download/[revision]/[artifact].[ext]")
37+
}
38+
}
39+
}
40+
41+
dependencies {
42+
splunkAgent(project(":agent", configuration = "shadow"))
43+
csaReleases("signalfx:csa-releases:$csaVersion") {
44+
artifact {
45+
name = "oss-agent-mtagent-extension-deployment"
46+
extension = "jar"
47+
}
48+
}
49+
}
50+
1551
tasks {
16-
val bundleSecureApp by registering(Exec::class) {
17-
description = "Bundle the Cisco SecureApp with splunk-otel-java"
18-
dependsOn(":agent:assemble")
19-
isIgnoreExitValue = false
20-
commandLine("./build-agent-csa-fat-jar.sh", version, csaVersion)
21-
outputs.file(File("build/splunk-otel-javaagent-csa-$version.jar"))
52+
// This exists purely to get the extension jar into our build dir
53+
val copyCsaJar by registering(Jar::class) {
54+
archiveFileName.set("oss-agent-mtagent-extension-deployment.jar")
55+
from(zipTree(csaReleases.singleFile))
2256
}
2357

24-
jar {
25-
inputs.files(bundleSecureApp)
58+
// Extract and rename extension classes
59+
val extractExtensionClasses by registering(Copy::class) {
60+
dependsOn(copyCsaJar)
61+
from(zipTree(copyCsaJar.get().archiveFile))
62+
into("build/ext-exploded")
63+
}
64+
65+
// Rename class to classdata
66+
val renameClasstoClassdata by registering(Copy::class) {
67+
dependsOn(extractExtensionClasses)
68+
from("build/ext-exploded/com/cisco/mtagent/adaptors/")
69+
into("build/ext-exploded/com/cisco/mtagent/adaptors/")
70+
include("AgentOSSAgentExtension.class", "AgentOSSAgentExtensionUtil.class")
71+
rename("AgentOSSAgentExtension.class", "AgentOSSAgentExtension.classdata")
72+
rename("AgentOSSAgentExtensionUtil.class", "AgentOSSAgentExtensionUtil.classdata")
73+
}
74+
75+
// Copy service file so path on disk matches path in jar
76+
val copyServiceFile by registering(Copy::class) {
77+
dependsOn(extractExtensionClasses)
78+
from("build/ext-exploded/META-INF/services/")
79+
into("build/ext-exploded/inst/META-INF/services/")
2680
}
2781

28-
assemble {
29-
dependsOn(bundleSecureApp)
82+
val shadowCsaClasses by registering(ShadowJar::class) {
83+
archiveFileName.set("shadow-csa-classes.jar")
84+
dependsOn(copyServiceFile, renameClasstoClassdata, splunkAgent)
85+
86+
from(zipTree(splunkAgent.singleFile))
87+
88+
// Include the example properties file
89+
from("otel-extension-system.properties") {
90+
into("/")
91+
}
92+
93+
// Add the two extension class(data) files:
94+
from("build/ext-exploded/com/cisco/mtagent/adaptors/") {
95+
into("inst/com/cisco/mtagent/adaptors/")
96+
include("AgentOSSAgentExtension.classdata", "AgentOSSAgentExtensionUtil.classdata")
97+
}
98+
// Merge service descriptor files
99+
mergeServiceFiles {
100+
include("inst/META-INF/services/io.opentelemetry.javaagent.extension.AgentListener")
101+
}
102+
from("build/ext-exploded/") {
103+
include("inst/META-INF/services/io.opentelemetry.javaagent.extension.AgentListener")
104+
}
105+
}
106+
107+
jar {
108+
dependsOn(shadowCsaClasses)
109+
from(zipTree(shadowCsaClasses.get().archiveFile.get()))
110+
from(copyCsaJar.get().archiveFile.get())
111+
112+
manifest {
113+
attributes(
114+
mapOf(
115+
"Main-Class" to "io.opentelemetry.javaagent.OpenTelemetryAgent",
116+
"Agent-Class" to "com.splunk.opentelemetry.javaagent.SplunkAgent",
117+
"Premain-Class" to "com.splunk.opentelemetry.javaagent.SplunkAgent",
118+
"Can-Redefine-Classes" to "true",
119+
"Can-Retransform-Classes" to "true",
120+
"Implementation-Vendor" to "Splunk",
121+
"Implementation-Version" to "splunk-${project.version}-otel-$otelInstrumentationVersion",
122+
"Cisco-Secure-Application-Version" to csaVersion,
123+
)
124+
)
125+
}
30126
}
31127

32128
publishing {
@@ -36,7 +132,7 @@ tasks {
36132
groupId = "com.splunk"
37133
version = project.version.toString()
38134

39-
artifact(bundleSecureApp)
135+
artifact(jar)
40136

41137
pom {
42138
name.set("splunk-otel-java with Cisco SecureApp bundle")

0 commit comments

Comments
 (0)