@@ -23,15 +23,24 @@ 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
2728default:
2829 tags: [ "arch:amd64" ]
2930
31+ .fan_in:
32+ stage: tests
33+ image: registry.ddbuild.io/images/base/gbi-ubuntu_2204-slim:release
34+ script:
35+ - echo "done"
36+
3037.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
3240 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
3544 KUBERNETES_CPU_REQUEST: 8
3645 KUBERNETES_MEMORY_REQUEST: 6Gi
3746 cache:
@@ -42,14 +51,15 @@ default:
4251 - .gradle/caches
4352 - .gradle/notifications
4453 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
4655 paths:
4756 - .gradle/caches/$GRADLE_VERSION
4857 - .gradle/$GRADLE_VERSION/executionHistory
4958 - workspace
5059 policy: $BUILD_CACHE_POLICY
5160 before_script:
5261 - export GRADLE_USER_HOME=`pwd`/.gradle
62+ - export GRADLE_ARGS=" --build-cache --stacktrace --no-daemon --parallel --max-workers=$GRADLE_WORKERS"
5363 # for weird reasons, gradle will always "chmod 700" the .gradle folder
5464 # with Gitlab caching, .gradle is always owned by root and thus gradle's chmod invocation fails
5565 # This dance is a hack to have .gradle owned by the Gitlab runner user
@@ -61,21 +71,24 @@ default:
6171
6272build:
6373 extends: .gradle_build
64- stage: build
6574 variables:
6675 BUILD_CACHE_POLICY: push
76+ BUILD_CACHE_TYPE: lib
6777 DEPENDENCY_CACHE_POLICY: pull
6878 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
7081 - echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env
7182 - echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env
7283 - echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
7384 artifacts:
85+ when: always
7486 paths:
7587 - 'workspace/dd-java-agent/build/libs/*.jar'
7688 - 'workspace/dd-trace-api/build/libs/*.jar'
7789 - 'workspace/dd-trace-ot/build/libs/*.jar'
7890 - 'upstream.env'
91+ - '.gradle/daemon/*/*.out.log'
7992 reports:
8093 dotenv: build.env
8194
@@ -90,6 +103,94 @@ build_and_populate_dep_cache:
90103 - when: manual
91104 allow_failure: true
92105
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+
93194deploy_to_profiling_backend:
94195 stage: publish
95196 needs: [ build ]
@@ -165,6 +266,8 @@ deploy_to_sonatype:
165266 extends: .gradle_build
166267 stage: publish
167268 needs: [ build ]
269+ variables:
270+ BUILD_CACHE_TYPE: lib
168271 rules:
169272 - if: '$POPULATE_CACHE'
170273 when: never
@@ -180,7 +283,7 @@ deploy_to_sonatype:
180283 - 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)
181284 - 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)
182285 - 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
184287 artifacts:
185288 paths:
186289 - 'workspace/dd-java-agent/build/libs/*.jar'
0 commit comments