Skip to content

Commit 97e35b9

Browse files
Merge branch 'master' into alexeyk/table-test-example
2 parents 4d811cb + 93c3816 commit 97e35b9

File tree

25 files changed

+405
-187
lines changed

25 files changed

+405
-187
lines changed

.claude/skills/migrate-groovy-to-java/SKILL.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
---
22
name: migrate-groovy-to-java
3-
description: migrate test groovy files to java
3+
description: >
4+
Converts Spock/Groovy test files in a Gradle module to equivalent JUnit 5 Java tests.
5+
Use when asked to "migrate groovy", "convert groovy to java", "g2j", or when a module
6+
has .groovy test files that need to be replaced with .java equivalents.
47
---
58

69
Migrate test Groovy files to Java using JUnit 5
@@ -18,6 +21,8 @@ When converting Groovy code to Java code, make sure that:
1821
- Ensure parameterized test names are human-readable (i.e. no hashcodes); instead add a description string as the first `Arguments.arguments(...)` value or index the test case
1922
- When converting tuples, create a light dedicated structure instead to keep the typing system
2023
- Instead of checking a state and throwing an exception, use JUnit asserts
24+
- Instead of using `assertTrue(a.equals(b))` or `assertFalse(a.equals(b))`, use `assertEquals(expected, actual)` and `assertNotEquals(unexpected, actual)`
25+
- Import frequently used types rather than using fully-qualified names inline, to improve readability
2126
- Do not wrap checked exceptions and throw a Runtime exception; prefer adding a throws clause at method declaration
2227
- Do not mark local variables `final`
2328
- Ensure variables are human-readable; avoid single-letter names and pre-define variables that are referenced multiple times

.github/CODEOWNERS

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@
5151
**/InferredProxy*.groovy @DataDog/apm-serverless
5252

5353
# @DataDog/apm-lang-platform-java
54-
/.circleci/ @DataDog/apm-lang-platform-java
5554
/.github/ @DataDog/apm-lang-platform-java
5655
/benchmark/ @DataDog/apm-lang-platform-java
5756
/components/ @DataDog/apm-lang-platform-java
58-
/dd-java-agent/instrumentation/java-*/ @DataDog/apm-lang-platform-java
57+
/dd-java-agent/instrumentation/java/ @DataDog/apm-lang-platform-java
5958
/dd-smoke-tests/concurrent/ @DataDog/apm-lang-platform-java
6059
/dd-smoke-tests/lib-injection/ @DataDog/apm-lang-platform-java
6160
/metadata/ @DataDog/apm-lang-platform-java
@@ -80,7 +79,7 @@
8079
/dd-smoke-tests/iast-propagation/ @DataDog/asm-java
8180
/dd-smoke-tests/iast-util/ @DataDog/asm-java
8281
/dd-smoke-tests/spring-security/ @DataDog/asm-java
83-
/dd-java-agent/instrumentation/commons-fileupload/ @DataDog/asm-java
82+
/dd-java-agent/instrumentation/commons-fileupload-1.5/ @DataDog/asm-java
8483
/dd-java-agent/instrumentation/spring/spring-security/ @DataDog/asm-java
8584
/dd-trace-api/src/main/java/datadog/trace/api/aiguard/ @DataDog/asm-java
8685
/dd-trace-api/src/main/java/datadog/trace/api/EventTracker.java @DataDog/asm-java
@@ -103,12 +102,12 @@
103102
/dd-java-agent/instrumentation/cucumber-5.4/ @DataDog/ci-app-libraries
104103
/dd-java-agent/instrumentation/jacoco-0.8.9/ @DataDog/ci-app-libraries
105104
/dd-java-agent/instrumentation/junit @DataDog/ci-app-libraries
106-
/dd-java-agent/instrumentation/karate/ @DataDog/ci-app-libraries
105+
/dd-java-agent/instrumentation/karate-1.0/ @DataDog/ci-app-libraries
107106
/dd-java-agent/instrumentation/scalatest-3.0.8/ @DataDog/ci-app-libraries
108-
/dd-java-agent/instrumentation/selenium/ @DataDog/ci-app-libraries
107+
/dd-java-agent/instrumentation/selenium-3.13/ @DataDog/ci-app-libraries
109108
/dd-java-agent/instrumentation/testng/ @DataDog/ci-app-libraries
110109
/dd-java-agent/instrumentation/gradle/ @DataDog/ci-app-libraries
111-
/dd-java-agent/instrumentation/gradle-testing/ @DataDog/ci-app-libraries
110+
/dd-java-agent/instrumentation/gradle-testing-5.1/ @DataDog/ci-app-libraries
112111
/dd-java-agent/instrumentation/maven @DataDog/ci-app-libraries
113112
/dd-java-agent/instrumentation/weaver-0.9/ @DataDog/ci-app-libraries
114113
/dd-smoke-tests/gradle/ @DataDog/ci-app-libraries
@@ -130,24 +129,24 @@
130129
/dd-java-agent/instrumentation/spark/ @DataDog/data-jobs-monitoring
131130

132131
# @DataDog/data-streams-monitoring
133-
/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/datastreams @DataDog/data-streams-monitoring
134-
/dd-trace-core/src/main/java/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
135-
/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
136-
/internal-api/src/main/java/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
137-
/dd-smoke-tests/datastreams/ @DataDog/data-streams-monitoring
138-
/internal-api/src/test/groovy/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
139-
**/datastreams/ @DataDog/data-streams-monitoring
140-
**/DataStreams* @DataDog/data-streams-monitoring
141-
**/dsmTest/** @DataDog/data-streams-monitoring
132+
/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/datastreams @DataDog/data-streams-monitoring
133+
/dd-trace-core/src/main/java/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
134+
/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
135+
/internal-api/src/main/java/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
136+
/dd-smoke-tests/datastreams/ @DataDog/data-streams-monitoring
137+
/internal-api/src/test/groovy/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
138+
**/datastreams/ @DataDog/data-streams-monitoring
139+
**/DataStreams* @DataDog/data-streams-monitoring
140+
**/dsmTest/** @DataDog/data-streams-monitoring
142141

143142
/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
144-
/dd-java-agent/instrumentation/avro/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
143+
/dd-java-agent/instrumentation/avro-1.11.3/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
145144
/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
146145
/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
147146
/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
148147
/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
149148
/dd-java-agent/instrumentation/confluent-schema-registry/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
150-
/dd-java-agent/instrumentation/google-pubsub/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
149+
/dd-java-agent/instrumentation/google-pubsub-1.116/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
151150
/dd-java-agent/instrumentation/grpc-1.5/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
152151
/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
153152
/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/ @DataDog/data-streams-monitoring @DataDog/apm-idm-java
@@ -183,7 +182,8 @@
183182
/dd-trace-core/src/test/groovy/datadog/trace/llmobs/ @DataDog/ml-observability
184183

185184
# @DataDog/database-monitoring
186-
datadog/trace/bootstrap/instrumentation/dbm @DataDog/database-monitoring @DataDog/apm-idm-java
185+
/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/dbm/ @DataDog/database-monitoring @DataDog/apm-idm-java
186+
/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/dbm/ @DataDog/database-monitoring @DataDog/apm-idm-java
187187

188188
# @DataDog/rum
189189
/internal-api/src/main/java/datadog/trace/api/rum/ @DataDog/rum
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
issuer: https://token.actions.githubusercontent.com
2+
3+
subject: repo:DataDog/dd-trace-java:ref:refs/heads/master
4+
5+
claim_pattern:
6+
event_name: (schedule|workflow_dispatch)
7+
ref: refs/heads/master
8+
ref_protected: "true"
9+
job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/update-smoke-test-latest-versions\.yaml@refs/heads/master
10+
11+
permissions:
12+
contents: write
13+
pull_requests: write

.github/workflows/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,14 @@ _Action:_ Create a PR updating the Grade dependencies and their locking files.
171171

172172
_Recovery:_ Manually trigger the action again.
173173

174+
### update-smoke-test-latest-versions [🔗](update-smoke-test-latest-versions.yaml)
175+
176+
_Trigger:_ Every week or manually.
177+
178+
_Action:_ Create a PR updating the pinned "latest" tool versions (Gradle, Maven, Maven Surefire) used by CI Visibility smoke tests.
179+
180+
_Recovery:_ Manually trigger the action again.
181+
174182
### update-jmxfetch-submodule [🔗](update-jmxfetch-submodule.yaml)
175183

176184
_Trigger:_ Monthly or manually
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
name: Update smoke test latest versions
2+
on:
3+
schedule:
4+
- cron: "0 5 * * 0"
5+
workflow_dispatch:
6+
7+
jobs:
8+
update-smoke-test-latest-versions:
9+
runs-on: ubuntu-latest
10+
name: Update smoke test latest versions
11+
permissions:
12+
contents: read
13+
id-token: write # Required for OIDC token federation
14+
steps:
15+
- uses: DataDog/dd-octo-sts-action@acaa02eee7e3bb0839e4272dacb37b8f3b58ba80 # v1.0.3
16+
id: octo-sts
17+
with:
18+
scope: DataDog/dd-trace-java
19+
policy: self.update-smoke-test-latest-versions.create-pr
20+
21+
- name: Checkout repository
22+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
23+
24+
- name: Define branch name
25+
id: define-branch
26+
run: |
27+
DATE=$(date +'%Y%m%d')
28+
echo "branch=ci/update-smoke-test-latest-versions-${DATE}" >> "$GITHUB_OUTPUT"
29+
30+
- name: Fetch latest Gradle version
31+
id: gradle
32+
run: |
33+
VERSION=$(curl -sf https://services.gradle.org/versions/current | jq -r '.version')
34+
if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then
35+
echo "::error::Failed to fetch latest Gradle version"
36+
exit 1
37+
fi
38+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
39+
echo "Latest Gradle version: $VERSION"
40+
41+
- name: Fetch latest stable Maven version
42+
id: maven
43+
run: |
44+
METADATA=$(curl -sf https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/maven-metadata.xml)
45+
# Get all versions, filter out alpha/beta/rc, take the latest
46+
VERSION=$(echo "$METADATA" \
47+
| xmllint --xpath '//versions/version/text()' - 2>/dev/null \
48+
| tr ' ' '\n' \
49+
| grep -v -E '(alpha|beta|rc)' \
50+
| sort -V \
51+
| tail -1)
52+
if [ -z "$VERSION" ]; then
53+
echo "::error::Failed to fetch latest stable Maven version"
54+
exit 1
55+
fi
56+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
57+
echo "Latest stable Maven version: $VERSION"
58+
59+
- name: Fetch latest stable Maven Surefire version
60+
id: surefire
61+
run: |
62+
METADATA=$(curl -sf https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml)
63+
# Get all versions, filter out alpha/beta, take the latest
64+
VERSION=$(echo "$METADATA" \
65+
| xmllint --xpath '//versions/version/text()' - 2>/dev/null \
66+
| tr ' ' '\n' \
67+
| grep -v -E '(alpha|beta)' \
68+
| sort -V \
69+
| tail -1)
70+
if [ -z "$VERSION" ]; then
71+
echo "::error::Failed to fetch latest stable Maven Surefire version"
72+
exit 1
73+
fi
74+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
75+
echo "Latest stable Maven Surefire version: $VERSION"
76+
77+
- name: Update properties files
78+
env:
79+
GRADLE_VERSION: ${{ steps.gradle.outputs.version }}
80+
MAVEN_VERSION: ${{ steps.maven.outputs.version }}
81+
SUREFIRE_VERSION: ${{ steps.surefire.outputs.version }}
82+
run: |
83+
printf '%s\n' \
84+
"# Pinned \"latest\" versions for CI Visibility Gradle smoke tests." \
85+
"# Updated automatically by the update-smoke-test-latest-versions workflow." \
86+
"gradle.version=${GRADLE_VERSION}" \
87+
> dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties
88+
89+
printf '%s\n' \
90+
"# Pinned \"latest\" versions for CI Visibility Maven smoke tests." \
91+
"# Updated automatically by the update-smoke-test-latest-versions workflow." \
92+
"maven.version=${MAVEN_VERSION}" \
93+
"maven-surefire.version=${SUREFIRE_VERSION}" \
94+
> dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties
95+
96+
- name: Check for changes
97+
id: check-changes
98+
run: |
99+
if [[ -z "$(git status -s)" ]]; then
100+
echo "No changes to commit."
101+
echo "has_changes=false" >> "$GITHUB_OUTPUT"
102+
else
103+
echo "has_changes=true" >> "$GITHUB_OUTPUT"
104+
fi
105+
106+
- name: Configure git
107+
if: steps.check-changes.outputs.has_changes == 'true'
108+
run: |
109+
git config user.name "github-actions[bot]"
110+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
111+
112+
- name: Create commit
113+
if: steps.check-changes.outputs.has_changes == 'true'
114+
id: create-commit
115+
run: |
116+
git add dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties \
117+
dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties
118+
git commit -m "chore: Update smoke test latest tool versions"
119+
echo "commit=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
120+
121+
- name: Push changes
122+
if: steps.check-changes.outputs.has_changes == 'true'
123+
uses: DataDog/commit-headless@05d7b7ee023e2c7d01c47832d420c2503cd416f3 # action/v2.0.3
124+
with:
125+
token: "${{ steps.octo-sts.outputs.token }}"
126+
branch: "${{ steps.define-branch.outputs.branch }}"
127+
head-sha: "${{ github.sha }}"
128+
create-branch: true
129+
command: push
130+
commits: "${{ steps.create-commit.outputs.commit }}"
131+
132+
- name: Create pull request
133+
if: steps.check-changes.outputs.has_changes == 'true'
134+
env:
135+
GH_TOKEN: ${{ steps.octo-sts.outputs.token }}
136+
run: |
137+
gh pr create --title "Update smoke test latest tool versions" \
138+
--base master \
139+
--head ${{ steps.define-branch.outputs.branch }} \
140+
--label "tag: dependencies" \
141+
--label "tag: no release notes" \
142+
--body "$(cat <<'EOF'
143+
# What Does This Do
144+
145+
This PR updates the pinned "latest" tool versions used by CI Visibility smoke tests:
146+
- Gradle: ${{ steps.gradle.outputs.version }}
147+
- Maven: ${{ steps.maven.outputs.version }}
148+
- Maven Surefire: ${{ steps.surefire.outputs.version }}
149+
150+
# Motivation
151+
152+
Keep smoke tests running against the latest stable versions of build tools.
153+
154+
# Contributor Checklist
155+
156+
- [ ] Verify smoke tests pass with the new versions
157+
EOF
158+
)"

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,19 @@ public class DebuggerTransformer implements ClassFileTransformer {
9595
SpanProbe.class);
9696
private static final String JAVA_IO_TMPDIR = "java.io.tmpdir";
9797
private static final boolean JAVA_AT_LEAST_19 = JavaVirtualMachine.isJavaVersionAtLeast(19);
98-
9998
public static Path DUMP_PATH = Paths.get(SystemProperties.get(JAVA_IO_TMPDIR), "debugger");
99+
private static final String[] SKIPPED_PACKAGES =
100+
new String[] {
101+
"com/datadog/debugger/agent/",
102+
"com/datadog/debugger/codeorigin/",
103+
"com/datadog/debugger/exception/",
104+
"com/datadog/debugger/instrumentation/",
105+
"com/datadog/debugger/probe/",
106+
"com/datadog/debugger/sink/",
107+
"com/datadog/debugger/symbol/",
108+
"com/datadog/debugger/uploader/",
109+
"com/datadog/debugger/util/"
110+
};
100111

101112
private final Config config;
102113
private final TransformerDefinitionMatcher definitionMatcher;
@@ -331,6 +342,16 @@ private boolean skipInstrumentation(ClassLoader loader, String classFilePath) {
331342
// in case of anonymous classes
332343
return true;
333344
}
345+
if (classFilePath.startsWith("com/datadog/debugger/")) {
346+
// skip classes/packages that are part of debugger agent to avoid
347+
// LinkageError: attempted duplicate class definition
348+
// while retransforming a class used by instrumentation
349+
for (int i = 0; i < SKIPPED_PACKAGES.length; i++) {
350+
if (classFilePath.startsWith(SKIPPED_PACKAGES[i])) {
351+
return true;
352+
}
353+
}
354+
}
334355
return false;
335356
}
336357

0 commit comments

Comments
 (0)