@@ -23,15 +23,24 @@ variables:
23
23
DEPENDENCY_CACHE_POLICY : pull
24
24
BUILD_CACHE_POLICY : pull
25
25
GRADLE_VERSION : " 8.4" # must match gradle-wrapper.properties
26
+ JAVA_BUILD_IMAGE_VERSION : " v25.01"
26
27
27
28
default :
28
29
tags : [ "arch:amd64" ]
29
30
31
+ .fan_in :
32
+ stage : tests
33
+ image : registry.ddbuild.io/images/base/gbi-ubuntu_2204-slim:release
34
+ script :
35
+ - echo "done"
36
+
30
37
.gradle_build : &gradle_build
31
- image : ghcr.io/datadog/dd-trace-java-docker-build:v25.01-base
38
+ image : ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-base
39
+ stage : build
32
40
variables :
33
- GRADLE_OPTS : " -Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M'"
34
- GRADLE_ARGS : " -PskipTests --build-cache --stacktrace --no-daemon --parallel --max-workers=2"
41
+ GRADLE_OPTS : " -Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
42
+ MAVEN_OPTS : " -Xms64M -Xmx512M"
43
+ GRADLE_WORKERS : 2
35
44
KUBERNETES_CPU_REQUEST : 8
36
45
KUBERNETES_MEMORY_REQUEST : 6Gi
37
46
cache :
@@ -42,14 +51,15 @@ default:
42
51
- .gradle/caches
43
52
- .gradle/notifications
44
53
policy : $DEPENDENCY_CACHE_POLICY
45
- - key : $CI_PIPELINE_ID # Incremental build cache. Shared by all jobs in the pipeline
54
+ - key : $CI_PIPELINE_ID-$BUILD_CACHE_TYPE # Incremental build cache. Shared by all jobs in the pipeline of the same type
46
55
paths :
47
56
- .gradle/caches/$GRADLE_VERSION
48
57
- .gradle/$GRADLE_VERSION/executionHistory
49
58
- workspace
50
59
policy : $BUILD_CACHE_POLICY
51
60
before_script :
52
61
- export GRADLE_USER_HOME=`pwd`/.gradle
62
+ - export GRADLE_ARGS=" --build-cache --stacktrace --no-daemon --parallel --max-workers=$GRADLE_WORKERS"
53
63
# for weird reasons, gradle will always "chmod 700" the .gradle folder
54
64
# with Gitlab caching, .gradle is always owned by root and thus gradle's chmod invocation fails
55
65
# This dance is a hack to have .gradle owned by the Gitlab runner user
@@ -61,21 +71,24 @@ default:
61
71
62
72
build :
63
73
extends : .gradle_build
64
- stage : build
65
74
variables :
66
75
BUILD_CACHE_POLICY : push
76
+ BUILD_CACHE_TYPE : lib
67
77
DEPENDENCY_CACHE_POLICY : pull
68
78
script :
69
- - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar $GRADLE_ARGS
79
+ - if [ $CI_PIPELINE_SOURCE == "schedule" ] ; then ./gradlew resolveAndLockAll --write-locks; fi
80
+ - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar -PskipTests $GRADLE_ARGS
70
81
- echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env
71
82
- echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env
72
83
- echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
73
84
artifacts :
85
+ when : always
74
86
paths :
75
87
- ' workspace/dd-java-agent/build/libs/*.jar'
76
88
- ' workspace/dd-trace-api/build/libs/*.jar'
77
89
- ' workspace/dd-trace-ot/build/libs/*.jar'
78
90
- ' upstream.env'
91
+ - ' .gradle/daemon/*/*.out.log'
79
92
reports :
80
93
dotenv : build.env
81
94
@@ -90,6 +103,94 @@ build_and_populate_dep_cache:
90
103
- when : manual
91
104
allow_failure : true
92
105
106
+ spotless :
107
+ extends : .gradle_build
108
+ stage : tests
109
+ needs : []
110
+ script :
111
+ - export JAVA_HOME=$JAVA_11_HOME
112
+ - ./gradlew spotlessCheck $GRADLE_ARGS
113
+
114
+ test_published_artifacts :
115
+ extends : .gradle_build
116
+ image : ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-7 # Needs Java7 for some tests
117
+ stage : tests
118
+ needs : [ build ]
119
+ rules :
120
+ - if : ' $POPULATE_CACHE'
121
+ when : never
122
+ - when : on_success
123
+ variables :
124
+ BUILD_CACHE_TYPE : lib
125
+ script :
126
+ - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)
127
+ - rm -rf "${mvn_local_repo}/com/datadoghq"
128
+ - export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text)
129
+ - export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text)
130
+ - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
131
+ - ./gradlew publishToMavenLocal $GRADLE_ARGS
132
+ - cd test-published-dependencies
133
+ - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
134
+ - ./gradlew check --info $GRADLE_ARGS
135
+ after_script :
136
+ - .circleci/collect_reports.sh
137
+ artifacts :
138
+ when : always
139
+ paths :
140
+ - ./check_reports
141
+
142
+ muzzle :
143
+ extends : .gradle_build
144
+ needs : [ build ]
145
+ stage : tests
146
+ parallel : 8
147
+ rules :
148
+ - if : ' $POPULATE_CACHE'
149
+ when : never
150
+ - when : on_success
151
+ variables :
152
+ BUILD_CACHE_TYPE : test
153
+ script :
154
+ - export SKIP_BUILDSCAN="true"
155
+ - echo CI_NODE_INDEX=$CI_NODE_INDEX
156
+ - echo CI_NODE_TOTAL=CI_NODE_TOTAL
157
+ - ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS
158
+ - sort workspace/build/muzzleTasks > sortedMuzzleTasks
159
+ - split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit
160
+ - export NODE_ZERO_INDEX=$((CI_NODE_INDEX - 1))
161
+ - ./gradlew `cat muzzleSplit${NODE_ZERO_INDEX} | xargs` $GRADLE_ARGS
162
+ after_script :
163
+ - .circleci/collect_reports.sh
164
+ artifacts :
165
+ when : always
166
+ paths :
167
+ - ./reports
168
+ - ' .gradle/daemon/*/*.out.log'
169
+
170
+ muzzle-dep-report :
171
+ extends : .gradle_build
172
+ needs : [ build ]
173
+ stage : tests
174
+ variables :
175
+ BUILD_CACHE_TYPE : test
176
+ script :
177
+ - export SKIP_BUILDSCAN="true"
178
+ - ./gradlew generateMuzzleReport muzzleInstrumentationReport $GRADLE_ARGS
179
+ after_script :
180
+ - .circleci/collect_muzzle_deps.sh
181
+ artifacts :
182
+ when : always
183
+ paths :
184
+ - ./reports
185
+ - ' .gradle/daemon/*/*.out.log'
186
+
187
+ required :
188
+ extends : .fan_in
189
+ needs :
190
+ - spotless
191
+ - muzzle
192
+ - test_published_artifacts
193
+
93
194
deploy_to_profiling_backend :
94
195
stage : publish
95
196
needs : [ build ]
@@ -165,6 +266,8 @@ deploy_to_sonatype:
165
266
extends : .gradle_build
166
267
stage : publish
167
268
needs : [ build ]
269
+ variables :
270
+ BUILD_CACHE_TYPE : lib
168
271
rules :
169
272
- if : ' $POPULATE_CACHE'
170
273
when : never
@@ -180,7 +283,7 @@ deploy_to_sonatype:
180
283
- export SONATYPE_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.sonatype_password --with-decryption --query "Parameter.Value" --out text)
181
284
- export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text)
182
285
- export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text)
183
- - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository $GRADLE_ARGS
286
+ - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository -PskipTests $GRADLE_ARGS
184
287
artifacts :
185
288
paths :
186
289
- ' workspace/dd-java-agent/build/libs/*.jar'
0 commit comments