Skip to content

Commit 5d8d682

Browse files
authored
Merge branch 'master' into sarahchen6/update-dd-octo-sts
2 parents 3215bed + b394d50 commit 5d8d682

File tree

30 files changed

+363
-135
lines changed

30 files changed

+363
-135
lines changed

.github/CODEOWNERS

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,19 @@
1313
/.gitlab-ci.yml @DataDog/apm-release-platform
1414

1515
# @DataDog/apm-sdk-api-java
16-
/dd-trace-ot/ @DataDog/apm-sdk-api-java
16+
/dd-java-agent/agent-otel @DataDog/apm-sdk-api-java
17+
/dd-smoke-tests/sample-trace @DataDog/apm-sdk-api-java
18+
/dd-trace-core/src/main/java/datadog/trace/core/baggage @DataDog/apm-sdk-api-java
19+
/dd-trace-core/src/test/groovy/datadog/trace/core/baggage @DataDog/apm-sdk-api-java
20+
/dd-trace-core/src/main/java/datadog/trace/core/propagation @DataDog/apm-sdk-api-java
21+
/dd-trace-core/src/test/groovy/datadog/trace/core/propagation @DataDog/apm-sdk-api-java
22+
/dd-trace-core/src/main/java/datadog/trace/core/scopemanager @DataDog/apm-sdk-api-java
23+
/dd-trace-core/src/test/groovy/datadog/trace/core/scopemanager @DataDog/apm-sdk-api-java
24+
/dd-trace-ot/ @DataDog/apm-sdk-api-java
25+
/internal-api/src/main/java/datadog/trace/bootstrap @DataDog/apm-sdk-api-java
26+
/internal-api/src/test/groovy/datadog/trace/bootstrap @DataDog/apm-sdk-api-java
27+
/internal-api/src/main/java/datadog/trace/api/sampling @DataDog/apm-sdk-api-java
28+
/internal-api/src/test/groovy/datadog/trace/api/sampling @DataDog/apm-sdk-api-java
1729

1830
# @DataDog/apm-serverless
1931
/dd-trace-core/src/main/java/datadog/trace/lambda/ @DataDog/apm-serverless

.github/workflows/analyze-changes.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
${{ runner.os }}-gradle-
4141
4242
- name: Initialize CodeQL
43-
uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
43+
uses: github/codeql-action/init@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
4444
with:
4545
languages: 'java'
4646
build-mode: 'manual'
@@ -57,7 +57,7 @@ jobs:
5757
--build-cache --parallel --stacktrace --no-daemon --max-workers=4
5858
5959
- name: Perform CodeQL Analysis and upload results to GitHub Security tab
60-
uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
60+
uses: github/codeql-action/analyze@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
6161

6262
trivy:
6363
name: Analyze changes with Trivy
@@ -122,7 +122,7 @@ jobs:
122122
TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db
123123

124124
- name: Upload Trivy scan results to GitHub Security tab
125-
uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
125+
uses: github/codeql-action/upload-sarif@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
126126
if: always()
127127
with:
128128
sarif_file: 'trivy-results.sarif'

.github/workflows/update-docker-build-image.yaml

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ jobs:
2626

2727
- name: Checkout the repository
2828
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
29-
- name: Pick a branch name
30-
id: define-branch
31-
run: echo "branch=ci/update-docker-build-image-$(date +'%Y%m%d')" >> $GITHUB_OUTPUT
32-
- name: Define the Docker build image tage to use
29+
- name: Define the Docker build image tag to use
3330
id: define-tag
3431
run: |
3532
if [ -n "${{ github.event.inputs.tag }}" ]; then
@@ -51,7 +48,32 @@ jobs:
5148
- name: Update the Docker build image in GitLab CI config
5249
run: |
5350
sed -i -E 's|(BUILDER_IMAGE_VERSION_PREFIX:)[^#]*([#].*)|\1 "${{ steps.define-tag.outputs.tag }}-" \2|' .gitlab-ci.yml
54-
- name: Commit and push changes
51+
- name: Check if changes should be committed
52+
id: check-changes
53+
run: |
54+
if [[ -z "$(git status -s)" ]]; then
55+
echo "No changes to commit, exiting."
56+
echo "commit_changes=false" >> "$GITHUB_OUTPUT"
57+
exit 0
58+
else
59+
echo "commit_changes=true" >> "$GITHUB_OUTPUT"
60+
fi
61+
- name: Download ghcommit CLI
62+
if: steps.check-changes.outputs.commit_changes == 'true'
63+
run: |
64+
curl https://github.com/planetscale/ghcommit/releases/download/v0.1.48/ghcommit_linux_amd64 -o /usr/local/bin/ghcommit -L
65+
chmod +x /usr/local/bin/ghcommit
66+
- name: Pick a branch name
67+
if: steps.check-changes.outputs.commit_changes == 'true'
68+
id: define-branch
69+
run: echo "branch=ci/update-docker-build-image-$(date +'%Y%m%d')" >> $GITHUB_OUTPUT
70+
- name: Create branch
71+
if: steps.check-changes.outputs.commit_changes == 'true'
72+
run: |
73+
git checkout -b ${{ steps.define-branch.outputs.branch }}
74+
git push -u origin ${{ steps.define-branch.outputs.branch }} --force
75+
- name: Commit changes
76+
if: steps.check-changes.outputs.commit_changes == 'true'
5577
env:
5678
GITHUB_TOKEN: ${{ steps.octo-sts.outputs.token }}
5779
run: |
@@ -77,6 +99,7 @@ jobs:
7799
command: push
78100
commits: "${{ steps.create-commit.outputs.commit }}"
79101
- name: Create pull request
102+
if: steps.check-changes.outputs.commit_changes == 'true'
80103
env:
81104
GH_TOKEN: ${{ steps.octo-sts.outputs.token }}
82105
run: |

.github/workflows/update-jmxfetch-submodule.yaml

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,45 @@ jobs:
1010
runs-on: ubuntu-latest
1111
permissions:
1212
contents: read
13-
id-token: write
13+
id-token: write # Required for OIDC token federation
1414
steps:
1515
- uses: DataDog/dd-octo-sts-action@acaa02eee7e3bb0839e4272dacb37b8f3b58ba80 # v1.0.3
1616
id: octo-sts
1717
with:
18-
scope: ${{ github.repository }}
18+
scope: DataDog/dd-trace-java
1919
policy: self.update-jmxfetch-submodule.create-pr
20+
2021
- name: Checkout repository
2122
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
2223
- name: Update Submodule
2324
run: |
2425
git submodule update --remote -- dd-java-agent/agent-jmxfetch/integrations-core
26+
- name: Check if changes should be committed
27+
id: check-changes
28+
run: |
29+
if [[ -z "$(git status -s)" ]]; then
30+
echo "No changes to commit, exiting."
31+
echo "commit_changes=false" >> "$GITHUB_OUTPUT"
32+
exit 0
33+
else
34+
echo "commit_changes=true" >> "$GITHUB_OUTPUT"
35+
fi
2536
- name: Pick a branch name
37+
if: steps.check-changes.outputs.commit_changes == 'true'
2638
id: define-branch
2739
run: echo "branch=ci/update-jmxfetch-submodule-$(date +'%Y%m%d')" >> $GITHUB_OUTPUT
2840
- name: Commit changes
41+
if: steps.check-changes.outputs.commit_changes == 'true'
2942
id: create-commit
3043
run: |
3144
git config user.name "github-actions[bot]"
3245
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
33-
34-
if [[ -z "$(git status -s)" ]]; then
35-
echo "No changes to commit, exiting."
36-
exit 0;
37-
fi
38-
39-
git commit -a -m "Update agent-jmxfetch submodule"
46+
git add dd-java-agent/agent-jmxfetch/integrations-core
47+
git commit -m "Update agent-jmxfetch submodule"
4048
echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
4149
- name: Push changes
4250
uses: DataDog/commit-headless@1186485b788f57eedaaadb19919781698b4d262f # action/v1.0.0
43-
if: ${{ steps.create-commit.outputs.commit != '' }}
51+
if: ${{ steps.check-changes.outputs.commit_changes == 'true' && steps.create-commit.outputs.commit != '' }}
4452
with:
4553
token: "${{ steps.octo-sts.outputs.token }}"
4654
branch: "${{ steps.define-branch.outputs.branch }}"
@@ -50,7 +58,7 @@ jobs:
5058
command: push
5159
commits: "${{ steps.create-commit.outputs.commit }}"
5260
- name: Create pull request
53-
if: ${{ steps.create-commit.outputs.commit != '' }}
61+
if: ${{ steps.check-changes.outputs.commit_changes == 'true' && steps.create-commit.outputs.commit != '' }}
5462
env:
5563
GH_TOKEN: "${{ steps.octo-sts.outputs.token }}"
5664
run: |

buildSrc/src/test/groovy/CallSiteInstrumentationPluginTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class CallSiteInstrumentationPluginTest extends Specification {
2828
2929
dependencies {
3030
implementation group: 'net.bytebuddy', name: 'byte-buddy', version: '1.17.5'
31-
implementation group: 'com.google.auto.service', name: 'auto-service-annotations', version: '1.0-rc7'
31+
implementation group: 'com.google.auto.service', name: 'auto-service-annotations', version: '1.1.1'
3232
}
3333
'''
3434

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public abstract class AbstractTestModule {
3030
protected final Codeowners codeowners;
3131
protected final LinesResolver linesResolver;
3232
private final Consumer<AgentSpan> onSpanFinish;
33+
protected final SpanTagsPropagator tagsPropagator;
3334

3435
public AbstractTestModule(
3536
AgentSpanContext sessionSpanContext,
@@ -63,6 +64,7 @@ public AbstractTestModule(
6364
}
6465

6566
span = spanBuilder.start();
67+
tagsPropagator = new SpanTagsPropagator(span);
6668

6769
span.setSpanType(InternalSpanTypes.TEST_MODULE_END);
6870
span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_TEST_MODULE);

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public abstract class AbstractTestSession {
4646
protected final SourcePathResolver sourcePathResolver;
4747
protected final Codeowners codeowners;
4848
protected final LinesResolver linesResolver;
49+
protected final SpanTagsPropagator tagPropagator;
4950

5051
public AbstractTestSession(
5152
String projectName,
@@ -93,6 +94,7 @@ public AbstractTestSession(
9394
}
9495

9596
span = spanBuilder.start();
97+
tagPropagator = new SpanTagsPropagator(span);
9698

9799
span.setSpanType(InternalSpanTypes.TEST_SESSION_END);
98100
span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_TEST_SESSION);

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/utils/SpanUtils.java renamed to dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/SpanTagsPropagator.java

Lines changed: 64 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package datadog.trace.civisibility.utils;
1+
package datadog.trace.civisibility.domain;
22

33
import datadog.trace.api.civisibility.execution.TestStatus;
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -14,28 +14,51 @@
1414
import java.util.function.BinaryOperator;
1515
import java.util.function.Consumer;
1616

17-
public class SpanUtils {
18-
public static final Consumer<AgentSpan> DO_NOT_PROPAGATE_CI_VISIBILITY_TAGS = span -> {};
17+
public class SpanTagsPropagator {
18+
public static final Consumer<AgentSpan> NOOP_PROPAGATOR = span -> {};
1919

20-
public static Consumer<AgentSpan> propagateCiVisibilityTagsTo(AgentSpan parentSpan) {
21-
return childSpan -> propagateCiVisibilityTags(parentSpan, childSpan);
20+
private final AgentSpan parentSpan;
21+
private final Object tagPropagationLock = new Object();
22+
23+
public SpanTagsPropagator(AgentSpan parentSpan) {
24+
this.parentSpan = parentSpan;
25+
}
26+
27+
public void propagateCiVisibilityTags(AgentSpan childSpan) {
28+
mergeTestFrameworks(getFrameworks(childSpan));
29+
propagateStatus(childSpan);
30+
}
31+
32+
public void propagateStatus(AgentSpan childSpan) {
33+
synchronized (tagPropagationLock) {
34+
unsafePropagateStatus(childSpan);
35+
}
36+
}
37+
38+
public void mergeTestFrameworks(Collection<TestFramework> testFrameworks) {
39+
synchronized (tagPropagationLock) {
40+
unsafeMergeTestFrameworks(testFrameworks);
41+
}
2242
}
2343

24-
public static void propagateCiVisibilityTags(AgentSpan parentSpan, AgentSpan childSpan) {
25-
mergeTestFrameworks(parentSpan, getFrameworks(childSpan));
26-
propagateStatus(parentSpan, childSpan);
44+
public void propagateTags(AgentSpan childSpan, TagMergeSpec<?>... specs) {
45+
synchronized (tagPropagationLock) {
46+
for (TagMergeSpec<?> spec : specs) {
47+
unsafePropagateTag(childSpan, spec);
48+
}
49+
}
2750
}
2851

29-
public static void mergeTestFrameworks(AgentSpan span, Collection<TestFramework> testFrameworks) {
30-
Collection<TestFramework> spanFrameworks = getFrameworks(span);
31-
Collection<TestFramework> merged = merge(spanFrameworks, testFrameworks);
32-
setFrameworks(span, merged);
52+
private void unsafeMergeTestFrameworks(Collection<TestFramework> childFrameworks) {
53+
Collection<TestFramework> parentFrameworks = getFrameworks(parentSpan);
54+
Collection<TestFramework> merged = merge(parentFrameworks, childFrameworks);
55+
setFrameworks(merged);
3356
}
3457

35-
private static Collection<TestFramework> getFrameworks(AgentSpan span) {
58+
static Collection<TestFramework> getFrameworks(AgentSpan span) {
3659
Object nameTag = span.getTag(Tags.TEST_FRAMEWORK);
3760
Object versionTag = span.getTag(Tags.TEST_FRAMEWORK_VERSION);
38-
if (nameTag == null && versionTag == null) {
61+
if (nameTag == null) {
3962
return Collections.emptyList();
4063
}
4164

@@ -45,9 +68,11 @@ private static Collection<TestFramework> getFrameworks(AgentSpan span) {
4568

4669
} else if (nameTag instanceof Collection) {
4770
Iterator<String> names = ((Collection<String>) nameTag).iterator();
48-
Iterator<String> versions = ((Collection<String>) versionTag).iterator();
71+
Iterator<String> versions =
72+
versionTag != null ? ((Collection<String>) versionTag).iterator() : null;
4973
while (names.hasNext()) {
50-
frameworks.add(new TestFramework(names.next(), versions.next()));
74+
String version = (versions != null && versions.hasNext()) ? versions.next() : null;
75+
frameworks.add(new TestFramework(names.next(), version));
5176
}
5277

5378
} else {
@@ -79,7 +104,7 @@ private static Collection<TestFramework> merge(
79104
return merged;
80105
}
81106

82-
private static void setFrameworks(AgentSpan span, Collection<TestFramework> frameworks) {
107+
private void setFrameworks(Collection<TestFramework> frameworks) {
83108
if (frameworks.isEmpty()) {
84109
return;
85110
}
@@ -90,7 +115,7 @@ private static void setFrameworks(AgentSpan span, Collection<TestFramework> fram
90115
if (framework.getVersion() != null) {
91116
tags.put(Tags.TEST_FRAMEWORK_VERSION, framework.getVersion());
92117
}
93-
span.setAllTags(tags);
118+
parentSpan.setAllTags(tags);
94119
return;
95120
}
96121
Collection<String> names = new ArrayList<>(frameworks.size());
@@ -102,10 +127,10 @@ private static void setFrameworks(AgentSpan span, Collection<TestFramework> fram
102127
Map<String, Collection<String>> tags = new HashMap<>();
103128
tags.put(Tags.TEST_FRAMEWORK, names);
104129
tags.put(Tags.TEST_FRAMEWORK_VERSION, versions);
105-
span.setAllTags(tags);
130+
parentSpan.setAllTags(tags);
106131
}
107132

108-
private static void propagateStatus(AgentSpan parentSpan, AgentSpan childSpan) {
133+
private void unsafePropagateStatus(AgentSpan childSpan) {
109134
TestStatus childStatus = (TestStatus) childSpan.getTag(Tags.TEST_STATUS);
110135
if (childStatus == null) {
111136
return;
@@ -131,25 +156,32 @@ private static void propagateStatus(AgentSpan parentSpan, AgentSpan childSpan) {
131156
}
132157
}
133158

134-
public static void propagateTags(AgentSpan parentSpan, AgentSpan childSpan, String... tagNames) {
135-
for (String tagName : tagNames) {
136-
parentSpan.setTag(tagName, childSpan.getTag(tagName));
159+
public static class TagMergeSpec<T> {
160+
private final String tagKey;
161+
private final BinaryOperator<T> mergeFunction;
162+
163+
TagMergeSpec(String tagKey, BinaryOperator<T> mergeFunction) {
164+
this.tagKey = tagKey;
165+
this.mergeFunction = mergeFunction;
166+
}
167+
168+
public static <T> TagMergeSpec<T> of(String key, BinaryOperator<T> mergeFunction) {
169+
return new TagMergeSpec<>(key, mergeFunction);
137170
}
138-
}
139171

140-
public static <T> void propagateTag(AgentSpan parentSpan, AgentSpan childSpan, String tagName) {
141-
propagateTag(parentSpan, childSpan, tagName, (p, c) -> c);
172+
public static TagMergeSpec<Object> of(String tagKey) {
173+
return new TagMergeSpec<>(tagKey, (parent, child) -> child);
174+
}
142175
}
143176

144-
public static <T> void propagateTag(
145-
AgentSpan parentSpan, AgentSpan childSpan, String tagName, BinaryOperator<T> mergeStrategy) {
146-
T childTag = (T) childSpan.getTag(tagName);
177+
private <T> void unsafePropagateTag(AgentSpan childSpan, TagMergeSpec<T> spec) {
178+
T childTag = (T) childSpan.getTag(spec.tagKey);
147179
if (childTag != null) {
148-
T parentTag = (T) parentSpan.getTag(tagName);
180+
T parentTag = (T) parentSpan.getTag(spec.tagKey);
149181
if (parentTag == null) {
150-
parentSpan.setTag(tagName, childTag);
182+
parentSpan.setTag(spec.tagKey, childTag);
151183
} else {
152-
parentSpan.setTag(tagName, mergeStrategy.apply(parentTag, childTag));
184+
parentSpan.setTag(spec.tagKey, spec.mergeFunction.apply(parentTag, childTag));
153185
}
154186
}
155187
}

0 commit comments

Comments
 (0)