1
+ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
1
2
2
3
plugins {
3
4
id(" maven-publish" )
4
5
id(" signing" )
6
+ id(" com.gradleup.shadow" )
5
7
}
6
8
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
10
13
11
- // This should be updated for every CSA release
12
- val csaVersion = " 25.3.0-1321"
13
14
base.archivesName.set(" splunk-otel-javaagent-csa" )
14
15
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
+
15
51
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))
22
56
}
23
57
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/" )
26
80
}
27
81
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
+ }
30
126
}
31
127
32
128
publishing {
@@ -36,7 +132,7 @@ tasks {
36
132
groupId = " com.splunk"
37
133
version = project.version.toString()
38
134
39
- artifact(bundleSecureApp )
135
+ artifact(jar )
40
136
41
137
pom {
42
138
name.set(" splunk-otel-java with Cisco SecureApp bundle" )
0 commit comments