Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion .github/workflows/run-system-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ jobs:
build:
runs-on:
group: APM Larger Runners
# Keep in sync with the JAVA_PROFILER_REF default in .gitlab-ci.yml. When non-empty,
# we clone DataDog/java-profiler at this ref, build :ddprof-lib:assembleReleaseJar
# and inject it via -Pddprof.jar=<path> instead of the published Maven artifact.
env:
JAVA_PROFILER_REF: "paul.fournillon/wallclock-taskblock"
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
Expand All @@ -39,17 +44,51 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-

# Mirrors the `build_java_profiler_ddprof` GitLab job: clone java-profiler at
# JAVA_PROFILER_REF, build :ddprof-lib:assembleReleaseJar with JDK 21 (Gradle 9.x),
# and stage the resulting jar under custom-ddprof/ddprof.jar.
# assembleRelease is the native link/assemble task only; the packaged jar is assembleReleaseJar.
- name: Build custom ddprof.jar from java-profiler
if: ${{ env.JAVA_PROFILER_REF != '' }}
run: |
set -euo pipefail
mkdir -p custom-ddprof
SRCDIR="${RUNNER_TEMP}/java-profiler-src"
rm -rf "$SRCDIR"
git clone --depth 1 --branch "$JAVA_PROFILER_REF" https://github.com/DataDog/java-profiler.git "$SRCDIR"
(
cd "$SRCDIR"
chmod +x ./gradlew
JAVA_HOME="$JAVA_HOME_21_X64" PATH="$JAVA_HOME_21_X64/bin:$PATH" ./gradlew --version
JAVA_HOME="$JAVA_HOME_21_X64" PATH="$JAVA_HOME_21_X64/bin:$PATH" \
./gradlew :ddprof-lib:assembleReleaseJar -Pskip-tests -Pskip-gtest --no-daemon
)
JAR=$(find "$SRCDIR/ddprof-lib/build/libs" -maxdepth 1 -type f -name 'ddprof-*.jar' ! -name '*-sources*' ! -name '*-javadoc*' | head -1)
if [ -z "$JAR" ] || [ ! -f "$JAR" ]; then
echo "No ddprof jar found under $SRCDIR/ddprof-lib/build/libs" >&2
ls -laR "$SRCDIR/ddprof-lib/build" 2>/dev/null || true
exit 1
fi
cp "$JAR" "$GITHUB_WORKSPACE/custom-ddprof/ddprof.jar"
echo "DDPROF_JAR=$GITHUB_WORKSPACE/custom-ddprof/ddprof.jar" >> "$GITHUB_ENV"
ls -la "$GITHUB_WORKSPACE/custom-ddprof/"

- name: Build dd-trace-java
env:
ORG_GRADLE_PROJECT_akkaRepositoryToken: ${{ secrets.AKKA_REPO_TOKEN }}
run: |
DDPROF_ARG=""
if [ -n "${DDPROF_JAR:-}" ] && [ -f "$DDPROF_JAR" ]; then
echo "Injecting custom ddprof.jar: $DDPROF_JAR"
DDPROF_ARG="-Pddprof.jar=$DDPROF_JAR"
fi
GRADLE_OPTS="-Xms2g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC" \
JAVA_HOME=$JAVA_HOME_8_X64 \
JAVA_8_HOME=$JAVA_HOME_8_X64 \
JAVA_11_HOME=$JAVA_HOME_11_X64 \
JAVA_17_HOME=$JAVA_HOME_17_X64 \
JAVA_21_HOME=$JAVA_HOME_21_X64 \
./gradlew clean :dd-java-agent:shadowJar \
./gradlew clean :dd-java-agent:shadowJar $DDPROF_ARG \
--build-cache --parallel --stacktrace --no-daemon --max-workers=4

- name: Upload artifact
Expand Down
174 changes: 163 additions & 11 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ variables:
description: "Enable flaky tests"
value: "false"

JAVA_PROFILER_REF:
description: "When non-empty, clone DataDog/java-profiler at this Git ref (branch or tag), build ddprof, and use it as ddprof.jar for Gradle jobs instead of the Maven dependency."
value: "paul.fournillon/wallclock-taskblock"

# One pipeline injection package size ratchet
OCI_PACKAGE_MAX_SIZE_BYTES: 40_000_000
LIB_INJECTION_IMAGE_MAX_SIZE_BYTES: 40_000_000
Expand Down Expand Up @@ -172,9 +176,21 @@ default:
echo "Failed to find base ref for PR" >&2
fi

# When build_java_profiler_ddprof ran, its artifact is available at custom-ddprof/ddprof.jar.
# Append root project property expected by dd-java-agent/ddprof-lib/build.gradle.
.inject_custom_ddprof_jar: &inject_custom_ddprof_jar
- |
if [ -f "${CI_PROJECT_DIR}/custom-ddprof/ddprof.jar" ]; then
echo "ddprof.jar=${CI_PROJECT_DIR}/custom-ddprof/ddprof.jar" >> gradle.properties
echo "Using custom ddprof.jar from java-profiler build"
fi

.gradle_build: &gradle_build
image: ${BUILDER_IMAGE_REPO}:${BUILDER_IMAGE_VERSION_PREFIX}base
stage: build
needs:
- job: build_java_profiler_ddprof
optional: true
variables:
MAVEN_OPTS: "-Xms256M -Xmx1024M"
GRADLE_WORKERS: 6
Expand Down Expand Up @@ -224,6 +240,7 @@ default:
org.gradle.java.installations.auto-download=false
org.gradle.java.installations.fromEnv=$JAVA_HOMES
EOF
- *inject_custom_ddprof_jar
- mkdir -p .gradle
- export GRADLE_USER_HOME=$(pwd)/.gradle
# replace maven central part by MAVEN_REPOSITORY_PROXY in .mvn/wrapper/maven-wrapper.properties
Expand Down Expand Up @@ -293,8 +310,114 @@ dd-octo-sts-pre-release-check:
max: 2
when: always

# Builds java-profiler from JAVA_PROFILER_REF and publishes custom-ddprof/ddprof.jar for downstream Gradle jobs.
# Uses :ddprof-lib:assembleReleaseJar (not assembleRelease, which is native-only). JDK 21+ for release + JDK 17+ for Gradle 9.
build_java_profiler_ddprof:
image: ${BUILDER_IMAGE_REPO}:${BUILDER_IMAGE_VERSION_PREFIX}base
stage: build
rules:
- if: '$JAVA_PROFILER_REF =~ /.+/'
when: on_success
variables:
FF_USE_FASTZIP: "true"
CACHE_COMPRESSION_LEVEL: "slowest"
KUBERNETES_CPU_REQUEST: 10
KUBERNETES_MEMORY_REQUEST: 20Gi
KUBERNETES_MEMORY_LIMIT: 20Gi
before_script:
- |
# java-profiler uses Gradle 9.x; Gradle requires JVM 17+. Builder image default java is often JDK 8.
if [ -n "${JAVA_21_HOME:-}" ] && [ -x "${JAVA_21_HOME}/bin/java" ]; then
export JAVA_HOME="$JAVA_21_HOME"
elif [ -n "${JAVA_17_HOME:-}" ] && [ -x "${JAVA_17_HOME}/bin/java" ]; then
export JAVA_HOME="$JAVA_17_HOME"
else
shopt -s nullglob
for d in /usr/lib/jvm/java-21-* /usr/lib/jvm/temurin-21-* /usr/lib/jvm/java-17-*; do
if [ -x "${d}/bin/java" ]; then
export JAVA_HOME="$d"
break
fi
done
shopt -u nullglob
fi
if [ -z "${JAVA_HOME:-}" ] || ! [ -x "${JAVA_HOME}/bin/java" ]; then
echo "Could not find JDK 17+ for Gradle 9 (set JAVA_21_HOME or JAVA_17_HOME, or install JDK 21 under /usr/lib/jvm)." >&2
ls -la /usr/lib/jvm 2>/dev/null || true
exit 1
fi
export PATH="${JAVA_HOME}/bin:${PATH}"
java -version
script:
- |
set -euo pipefail
mkdir -p "${CI_PROJECT_DIR}/custom-ddprof"
SRCDIR="${CI_PROJECT_DIR}/java-profiler-src"
rm -rf "$SRCDIR"
git clone --depth 1 --branch "$JAVA_PROFILER_REF" https://github.com/DataDog/java-profiler.git "$SRCDIR"
cd "$SRCDIR"
export ORG_GRADLE_PROJECT_mavenRepositoryProxy="$MAVEN_REPOSITORY_PROXY"
export ORG_GRADLE_PROJECT_gradlePluginProxy="$GRADLE_PLUGIN_PROXY"
PROFILER_GRADLE_INIT="${CI_PROJECT_DIR}/java-profiler-init.gradle"
cat > "$PROFILER_GRADLE_INIT" <<'EOF'
def mavenRepositoryProxy = System.getenv('MAVEN_REPOSITORY_PROXY')
def gradlePluginProxy = System.getenv('GRADLE_PLUGIN_PROXY') ?: mavenRepositoryProxy

def addPluginRepositories = { repositories ->
if (gradlePluginProxy) {
repositories.maven { url = uri(gradlePluginProxy) }
}
if (mavenRepositoryProxy && mavenRepositoryProxy != gradlePluginProxy) {
repositories.maven { url = uri(mavenRepositoryProxy) }
}
}

def addMavenRepositories = { repositories ->
if (mavenRepositoryProxy) {
repositories.maven { url = uri(mavenRepositoryProxy) }
}
}

beforeSettings { settings ->
settings.pluginManagement {
repositories {
addPluginRepositories(delegate)
}
}
}

allprojects {
buildscript {
repositories {
addPluginRepositories(delegate)
}
}
repositories {
addMavenRepositories(delegate)
}
}
EOF
chmod +x ./gradlew
./gradlew --version
# assembleRelease is the native link/assemble task only; the packaged jar is assembleReleaseJar.
./gradlew --init-script "$PROFILER_GRADLE_INIT" :ddprof-lib:assembleReleaseJar -Pskip-tests -Pskip-gtest
JAR=$(find ddprof-lib/build/libs -maxdepth 1 -type f \( -name 'ddprof-*.jar' \) ! -name '*-sources*' ! -name '*-javadoc*' | head -1)
if [ -z "$JAR" ] || [ ! -f "$JAR" ]; then
echo "No ddprof jar found under ddprof-lib/build/libs" >&2
ls -la ddprof-lib/build/libs 2>/dev/null || ls -laR ddprof-lib/build 2>/dev/null || true
exit 1
fi
cp "$JAR" "${CI_PROJECT_DIR}/custom-ddprof/ddprof.jar"
ls -la "${CI_PROJECT_DIR}/custom-ddprof/"
artifacts:
when: on_success
paths:
- custom-ddprof/ddprof.jar

build:
needs:
- job: build_java_profiler_ddprof
optional: true
- job: maven-central-pre-release-check
optional: true
- job: dd-octo-sts-pre-release-check
Expand Down Expand Up @@ -405,7 +528,9 @@ publish-artifacts-to-s3:
spotless:
extends: .gradle_build
stage: tests
needs: []
needs:
- job: build_java_profiler_ddprof
optional: true
variables:
GRADLE_MEMORY_MAX: 6G
script:
Expand All @@ -415,15 +540,19 @@ spotless:
check-instrumentation-naming:
extends: .gradle_build
stage: tests
needs: [ ]
needs:
- job: build_java_profiler_ddprof
optional: true
script:
- ./gradlew --version
- ./gradlew checkInstrumentationNaming

config-inversion-linter:
extends: .gradle_build
stage: tests
needs: []
needs:
- job: build_java_profiler_ddprof
optional: true
script:
- ./gradlew --version
- ./gradlew checkConfigurations
Expand All @@ -432,7 +561,10 @@ test_published_artifacts:
extends: .gradle_build
image: ${BUILDER_IMAGE_REPO}:${BUILDER_IMAGE_VERSION_PREFIX}7 # Needs Java7 for some tests
stage: tests
needs: [ build ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build
variables:
CACHE_TYPE: "lib"
script:
Expand All @@ -459,7 +591,10 @@ test_published_artifacts:

.check_job:
extends: .gradle_build
needs: [ build ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build
stage: tests
variables:
CACHE_TYPE: "lib"
Expand Down Expand Up @@ -495,7 +630,9 @@ test_published_artifacts:

check_build_src:
extends: .check_job
needs: []
needs:
- job: build_java_profiler_ddprof
optional: true
variables:
GRADLE_TARGET: ":buildSrc:build"

Expand Down Expand Up @@ -530,7 +667,10 @@ check_debugger:

muzzle:
extends: .gradle_build
needs: [ build_tests ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build_tests
stage: tests
rules:
- if: '$CI_COMMIT_BRANCH =~ /^mq-working-branch-/'
Expand Down Expand Up @@ -568,7 +708,10 @@ muzzle:

muzzle-dep-report:
extends: .gradle_build
needs: [ build_tests ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build_tests
stage: tests
rules:
- if: '$CI_COMMIT_BRANCH =~ /^mq-working-branch-/'
Expand Down Expand Up @@ -611,7 +754,10 @@ muzzle-dep-report:
extends: .gradle_build
image: ${BUILDER_IMAGE_REPO}:${BUILDER_IMAGE_VERSION_PREFIX}$testJvm
tags: [ "docker-in-docker:amd64" ] # use docker-in-docker runner for testcontainers
needs: [ build_tests ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build_tests
stage: tests
variables:
GRADLE_PARAMS: "-PskipFlakyTests"
Expand Down Expand Up @@ -919,7 +1065,10 @@ deploy_to_di_backend:manual:
deploy_to_maven_central:
extends: .gradle_build
stage: publish
needs: [ build ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build
variables:
CACHE_TYPE: "lib"
rules:
Expand Down Expand Up @@ -947,7 +1096,10 @@ deploy_to_maven_central:
deploy_snapshot_with_ddprof_snapshot:
extends: .gradle_build
stage: publish
needs: [ build ]
needs:
- job: build_java_profiler_ddprof
optional: true
- build
variables:
CACHE_TYPE: "lib"
rules:
Expand Down
Loading