@@ -23,17 +23,25 @@ variables:
2323 DEPENDENCY_CACHE_POLICY : pull
2424 BUILD_CACHE_POLICY : pull
2525 GRADLE_VERSION : " 8.4" # must match gradle-wrapper.properties
26+ JAVA_BUILD_IMAGE_VERSION : " v25.01"
2627 REPO_NOTIFICATION_CHANNEL : " #apm-java-escalations"
2728
28-
2929default :
3030 tags : [ "arch:amd64" ]
3131
32+ .fan_in :
33+ stage : tests
34+ image : registry.ddbuild.io/images/base/gbi-ubuntu_2204-slim:release
35+ script :
36+ - echo "done"
37+
3238.gradle_build : &gradle_build
33- image : ghcr.io/datadog/dd-trace-java-docker-build:v25.01-base
39+ image : ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-base
40+ stage : build
3441 variables :
35- GRADLE_OPTS : " -Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M'"
36- GRADLE_ARGS : " -PskipTests --build-cache --stacktrace --no-daemon --parallel --max-workers=2"
42+ GRADLE_OPTS : " -Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
43+ MAVEN_OPTS : " -Xms64M -Xmx512M"
44+ GRADLE_WORKERS : 2
3745 KUBERNETES_CPU_REQUEST : 8
3846 KUBERNETES_MEMORY_REQUEST : 6Gi
3947 cache :
@@ -44,14 +52,15 @@ default:
4452 - .gradle/caches
4553 - .gradle/notifications
4654 policy : $DEPENDENCY_CACHE_POLICY
47- - key : $CI_PIPELINE_ID # Incremental build cache. Shared by all jobs in the pipeline
55+ - key : $CI_PIPELINE_ID-$BUILD_CACHE_TYPE # Incremental build cache. Shared by all jobs in the pipeline of the same type
4856 paths :
4957 - .gradle/caches/$GRADLE_VERSION
5058 - .gradle/$GRADLE_VERSION/executionHistory
5159 - workspace
5260 policy : $BUILD_CACHE_POLICY
5361 before_script :
5462 - export GRADLE_USER_HOME=`pwd`/.gradle
63+ - export GRADLE_ARGS=" --build-cache --stacktrace --no-daemon --parallel --max-workers=$GRADLE_WORKERS"
5564 # for weird reasons, gradle will always "chmod 700" the .gradle folder
5665 # with Gitlab caching, .gradle is always owned by root and thus gradle's chmod invocation fails
5766 # This dance is a hack to have .gradle owned by the Gitlab runner user
@@ -63,21 +72,24 @@ default:
6372
6473build :
6574 extends : .gradle_build
66- stage : build
6775 variables :
6876 BUILD_CACHE_POLICY : push
77+ BUILD_CACHE_TYPE : lib
6978 DEPENDENCY_CACHE_POLICY : pull
7079 script :
71- - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar $GRADLE_ARGS
80+ - if [ $CI_PIPELINE_SOURCE == "schedule" ] ; then ./gradlew resolveAndLockAll --write-locks; fi
81+ - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar -PskipTests $GRADLE_ARGS
7282 - echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env
7383 - echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env
7484 - echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
7585 artifacts :
86+ when : always
7687 paths :
7788 - ' workspace/dd-java-agent/build/libs/*.jar'
7889 - ' workspace/dd-trace-api/build/libs/*.jar'
7990 - ' workspace/dd-trace-ot/build/libs/*.jar'
8091 - ' upstream.env'
92+ - ' .gradle/daemon/*/*.out.log'
8193 reports :
8294 dotenv : build.env
8395
@@ -92,6 +104,94 @@ build_and_populate_dep_cache:
92104 - when : manual
93105 allow_failure : true
94106
107+ spotless :
108+ extends : .gradle_build
109+ stage : tests
110+ needs : []
111+ script :
112+ - export JAVA_HOME=$JAVA_11_HOME
113+ - ./gradlew spotlessCheck $GRADLE_ARGS
114+
115+ test_published_artifacts :
116+ extends : .gradle_build
117+ image : ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-7 # Needs Java7 for some tests
118+ stage : tests
119+ needs : [ build ]
120+ rules :
121+ - if : ' $POPULATE_CACHE'
122+ when : never
123+ - when : on_success
124+ variables :
125+ BUILD_CACHE_TYPE : lib
126+ script :
127+ - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)
128+ - rm -rf "${mvn_local_repo}/com/datadoghq"
129+ - 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)
130+ - 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)
131+ - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
132+ - ./gradlew publishToMavenLocal $GRADLE_ARGS
133+ - cd test-published-dependencies
134+ - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
135+ - ./gradlew check --info $GRADLE_ARGS
136+ after_script :
137+ - .circleci/collect_reports.sh
138+ artifacts :
139+ when : always
140+ paths :
141+ - ./check_reports
142+
143+ muzzle :
144+ extends : .gradle_build
145+ needs : [ build ]
146+ stage : tests
147+ parallel : 8
148+ rules :
149+ - if : ' $POPULATE_CACHE'
150+ when : never
151+ - when : on_success
152+ variables :
153+ BUILD_CACHE_TYPE : test
154+ script :
155+ - export SKIP_BUILDSCAN="true"
156+ - echo CI_NODE_INDEX=$CI_NODE_INDEX
157+ - echo CI_NODE_TOTAL=CI_NODE_TOTAL
158+ - ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS
159+ - sort workspace/build/muzzleTasks > sortedMuzzleTasks
160+ - split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit
161+ - export NODE_ZERO_INDEX=$((CI_NODE_INDEX - 1))
162+ - ./gradlew `cat muzzleSplit${NODE_ZERO_INDEX} | xargs` $GRADLE_ARGS
163+ after_script :
164+ - .circleci/collect_reports.sh
165+ artifacts :
166+ when : always
167+ paths :
168+ - ./reports
169+ - ' .gradle/daemon/*/*.out.log'
170+
171+ muzzle-dep-report :
172+ extends : .gradle_build
173+ needs : [ build ]
174+ stage : tests
175+ variables :
176+ BUILD_CACHE_TYPE : test
177+ script :
178+ - export SKIP_BUILDSCAN="true"
179+ - ./gradlew generateMuzzleReport muzzleInstrumentationReport $GRADLE_ARGS
180+ after_script :
181+ - .circleci/collect_muzzle_deps.sh
182+ artifacts :
183+ when : always
184+ paths :
185+ - ./reports
186+ - ' .gradle/daemon/*/*.out.log'
187+
188+ required :
189+ extends : .fan_in
190+ needs :
191+ - spotless
192+ - muzzle
193+ - test_published_artifacts
194+
95195deploy_to_profiling_backend :
96196 stage : publish
97197 needs : [ build ]
@@ -167,6 +267,8 @@ deploy_to_sonatype:
167267 extends : .gradle_build
168268 stage : publish
169269 needs : [ build ]
270+ variables :
271+ BUILD_CACHE_TYPE : lib
170272 rules :
171273 - if : ' $POPULATE_CACHE'
172274 when : never
@@ -182,7 +284,7 @@ deploy_to_sonatype:
182284 - 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)
183285 - 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)
184286 - 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)
185- - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository $GRADLE_ARGS
287+ - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository -PskipTests $GRADLE_ARGS
186288 artifacts :
187289 paths :
188290 - ' workspace/dd-java-agent/build/libs/*.jar'
0 commit comments