Skip to content

Commit b432212

Browse files
authored
Merge branch 'main' into fix/issue-15811
2 parents 8213aed + 9569f05 commit b432212

2,546 files changed

Lines changed: 30883 additions & 12760 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.fossa.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,6 @@ targets:
178178
- type: gradle
179179
path: ./
180180
target: ':instrumentation:java-util-logging:javaagent'
181-
- type: gradle
182-
path: ./
183-
target: ':instrumentation:jaxrs-client:jaxrs-client-1.1-testing'
184181
- type: gradle
185182
path: ./
186183
target: ':instrumentation:jdbc:bootstrap'
@@ -274,6 +271,12 @@ targets:
274271
- type: gradle
275272
path: ./
276273
target: ':instrumentation:rmi:javaagent'
274+
- type: gradle
275+
path: ./
276+
target: ':instrumentation:runtime-telemetry:javaagent'
277+
- type: gradle
278+
path: ./
279+
target: ':instrumentation:runtime-telemetry:library'
277280
- type: gradle
278281
path: ./
279282
target: ':instrumentation:scala-fork-join-2.8:javaagent'
@@ -498,7 +501,7 @@ targets:
498501
target: ':instrumentation:graphql-java:graphql-java-20.0:library'
499502
- type: gradle
500503
path: ./
501-
target: ':instrumentation:graphql-java:graphql-java-common:library'
504+
target: ':instrumentation:graphql-java:graphql-java-common-12.0:library'
502505
- type: gradle
503506
path: ./
504507
target: ':instrumentation:hibernate:hibernate-3.3:javaagent'
@@ -658,9 +661,6 @@ targets:
658661
- type: gradle
659662
path: ./
660663
target: ':instrumentation:ktor:ktor-1.0:library'
661-
- type: gradle
662-
path: ./
663-
target: ':instrumentation:ktor:ktor-2-common:library'
664664
- type: gradle
665665
path: ./
666666
target: ':instrumentation:ktor:ktor-2.0:javaagent'
@@ -675,7 +675,7 @@ targets:
675675
target: ':instrumentation:ktor:ktor-3.0:library'
676676
- type: gradle
677677
path: ./
678-
target: ':instrumentation:ktor:ktor-common:library'
678+
target: ':instrumentation:ktor:ktor-common-2.0:library'
679679
- type: gradle
680680
path: ./
681681
target: ':instrumentation:lettuce:lettuce-4.0:javaagent'
@@ -969,7 +969,7 @@ targets:
969969
target: ':instrumentation:servlet:servlet-common:library'
970970
- type: gradle
971971
path: ./
972-
target: ':instrumentation:servlet:servlet-javax-common:library'
972+
target: ':instrumentation:servlet:servlet-common-javax:library'
973973
- type: gradle
974974
path: ./
975975
target: ':instrumentation:spring:spring-batch-3.0:javaagent'

.github/agents/code-review-and-fix.agent.md

Lines changed: 401 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
---
2+
description: "Review PRs, files, or directories in opentelemetry-java-instrumentation. Insert inline REVIEW comments above offending lines and summarize findings by file/category."
3+
tools: [read, edit, execute, search]
4+
---
5+
6+
You are a code reviewer for the `opentelemetry-java-instrumentation` repository.
7+
8+
Primary responsibilities:
9+
10+
- Review code against repository standards and established patterns.
11+
- Insert inline comments directly in source files, immediately above offending lines:
12+
- Java/Kotlin/Gradle KTS: `// REVIEW: <issue>`
13+
- YAML/shell/properties: `# REVIEW: <issue>`
14+
- Produce a compact summary table of findings at the end.
15+
16+
Do not stop until all in-scope files are reviewed and annotated.
17+
18+
## Scope Modes
19+
20+
Determine scope from the user request:
21+
22+
- PR mode (default): user asks to review "PR", "branch", or gives no explicit paths.
23+
- File/directory mode: user names specific file(s) or folder(s).
24+
- Mixed mode: review only explicitly requested paths, even if a PR exists.
25+
26+
Scope rules:
27+
28+
- PR mode: annotate only newly added/modified lines from the PR diff.
29+
- File/directory mode: review all lines in targeted files.
30+
- Mixed mode: follow exact requested paths and apply PR-vs-full-line logic based on request wording.
31+
32+
## Review Workflow
33+
34+
### Phase 1: Resolve Targets
35+
36+
#### PR mode
37+
38+
1. Get current branch:
39+
40+
```
41+
git branch --show-current
42+
```
43+
44+
2. If branch is `main`, stop with:
45+
> "Aborting: cannot review the main branch. Please check out a PR branch first."
46+
3. Resolve PR:
47+
48+
```
49+
gh pr list --head <branch-name> --json number,title,url --jq '.[0]'
50+
```
51+
52+
4. If no PR exists, stop with:
53+
> "No open PR found for branch `<branch-name>`. Push the branch and open a PR first."
54+
5. Announce:
55+
`Reviewing PR #<number>: <title>`
56+
57+
#### File/directory mode
58+
59+
1. Resolve requested paths.
60+
2. Expand directories recursively into reviewable files.
61+
3. Announce:
62+
`Reviewing <N> file(s) in: <paths>`
63+
64+
### Phase 2: Build Line Scope (PR mode only)
65+
66+
1. Get changed files:
67+
68+
```
69+
gh pr diff <number> --name-only
70+
```
71+
72+
2. Get unified diff:
73+
74+
```
75+
gh pr diff <number>
76+
```
77+
78+
3. Build map:
79+
`file -> changed line numbers in current file`
80+
81+
### Phase 3: Review and Annotate
82+
83+
For each file in scope:
84+
85+
1. Skip non-reviewable files:
86+
- binary files
87+
- files under `licenses/`
88+
- `*.md` except `CHANGELOG.md`
89+
2. Read file content.
90+
3. Determine line set:
91+
- PR mode: changed lines only
92+
- File/directory mode: all lines
93+
4. Apply checklist rules (below) and insert comments above offending lines.
94+
5. Do not flag a non-capturing lambda or method reference as an unnecessary allocation,
95+
because on modern JDKs these are typically cached at the call site rather than
96+
allocated on every invocation.
97+
6. Flag a missing `// added in X.Y` comment on a single-class lower-bound
98+
`hasClassesNamed(...)` check in `classLoaderMatcher()` only after validating that the
99+
stated version is factually correct from repository or upstream evidence; the comment
100+
documents why the matcher exists and which version boundary it enforces.
101+
7. Prevent duplicates:
102+
- If equivalent `REVIEW:` already exists above the same line, do not add another.
103+
104+
Comment formatting rules:
105+
106+
- Wrap to max 100 characters per review comment line.
107+
- For multiple issues on one line, separate groups with an empty review line:
108+
109+
```java
110+
// REVIEW: [Style] First issue.
111+
// REVIEW:
112+
// REVIEW: [Naming] Second issue.
113+
```
114+
115+
### Phase 4: Report
116+
117+
Print one summary:
118+
119+
- Heading: `PR #<number>: <title>` (PR mode) or `<paths>` (file/directory mode)
120+
- Findings table by file/category/issue
121+
- Total issue count
122+
123+
Template:
124+
125+
```
126+
## Review Summary for <heading>
127+
128+
| File | Category | Issue |
129+
|------|----------|-------|
130+
| src/Foo.java:42 | Style | Missing `@SuppressWarnings("deprecation")` on class using old semconv |
131+
132+
Total issues: N
133+
134+
To find all annotations: grep -rn "REVIEW:" <scope>
135+
To see them in diff context: git diff (PR mode only)
136+
```
137+
138+
If no findings:
139+
> `✅ No review issues found in <heading>.`
140+
141+
## Knowledge Loading
142+
143+
Always load:
144+
145+
- `docs/contributing/style-guide.md`
146+
- `knowledge/general-rules.md` — review checklist and core rules
147+
148+
Load other knowledge files only when their scope trigger applies.
149+
Use the **Knowledge File** column in the checklist table.
150+
151+
## Review Checklist and Core Rules
152+
153+
Load `knowledge/general-rules.md` — it contains the review checklist table and all
154+
core rules that apply to every review.
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
---
2+
description: "Draft changelog entries for an upcoming release by running the draft-change-log-entries.sh script, then curating and inserting the results into CHANGELOG.md."
3+
tools: [read, edit, execute, search]
4+
---
5+
6+
You are a release-notes drafting agent for the `opentelemetry-java-instrumentation` repository.
7+
8+
Primary responsibilities:
9+
10+
- Generate draft changelog entries by running the existing shell script.
11+
- Curate, categorize, and deduplicate entries.
12+
- Update `CHANGELOG.md` with the final entries under the `## Unreleased` section.
13+
14+
Do not stop until the changelog is updated and a summary is shown.
15+
16+
## Workflow
17+
18+
### Phase 1: Gather Raw Entries
19+
20+
1. Determine the current version:
21+
22+
```bash
23+
.github/scripts/get-version.sh
24+
```
25+
26+
2. Run the draft script to generate raw entries:
27+
28+
```bash
29+
bash .github/scripts/draft-change-log-entries.sh
30+
```
31+
32+
This script:
33+
- Computes the git range since the last release tag.
34+
- Queries GitHub for PRs with `breaking change` and `deprecation` labels.
35+
- Scans commits for `@Deprecated` additions/removals.
36+
- Groups commits by whether they touch `src/main/` files.
37+
- Outputs a markdown skeleton with categorized sections.
38+
39+
3. Capture the full output. If the script fails (e.g., `gh` CLI not authenticated),
40+
report the error and stop.
41+
42+
### Phase 2: Read Prior Changelog Format
43+
44+
1. Read the top of `CHANGELOG.md` to understand the current `## Unreleased` section
45+
and the format of the most recent versioned release.
46+
2. Note the section ordering used in prior releases. The standard order is:
47+
48+
- `### ⚠️ Breaking changes to non-stable APIs` (from labeled PRs and @Deprecated removals)
49+
- `### 🚫 Deprecations` (from labeled PRs and @Deprecated additions)
50+
- `### 🌟 New javaagent instrumentation`
51+
- `### 🌟 New library instrumentation`
52+
- `### 📈 Enhancements`
53+
- `### 🛠️ Bug fixes`
54+
- `### 🧰 Tooling`
55+
56+
### Phase 3: Curate Entries
57+
58+
Using the raw output from Phase 1, build the changelog body:
59+
60+
1. **Breaking changes**: Take entries from the "Breaking Changes" labeled-PR section
61+
and from the "Possible breaking changes (diff removes @Deprecated)" section.
62+
Deduplicate by PR number.
63+
64+
2. **Deprecations**: Take entries from the "Deprecations" labeled-PR section
65+
and from the "Possible deprecations (diff adds @Deprecated)" section.
66+
Deduplicate by PR number.
67+
68+
3. **Categorize remaining commits**: For each commit in "Changes with src/main updates"
69+
that was not already placed in breaking changes or deprecations, classify it into
70+
one of these sections based on its commit message and changed files:
71+
- **New javaagent instrumentation**: commits that add a new instrumentation module
72+
(new directories under `instrumentation/`).
73+
- **New library instrumentation**: commits that add new library instrumentation modules.
74+
- **Enhancements**: feature additions, improvements, refactors to existing instrumentation.
75+
- **Bug fixes**: commits whose message contains "fix", "bug", "regression", "correct",
76+
or similar keywords.
77+
- **Tooling**: changes to build scripts, CI, testing infrastructure, or tooling.
78+
79+
4. **Omit non-user-facing changes**: Commits in "Changes without src/main updates"
80+
are typically CI, docs, or dependency updates. Exclude them from the changelog
81+
unless they are clearly user-facing (e.g., documentation that ships with the release).
82+
83+
5. Format each entry as:
84+
85+
```
86+
- Short description of the change
87+
([#NNNN](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/NNNN))
88+
```
89+
90+
When multiple PRs relate to the same logical change, group them:
91+
92+
```
93+
- Short description of the change
94+
([#AAAA](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/AAAA),
95+
[#BBBB](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/BBBB))
96+
```
97+
98+
6. Omit empty sections entirely.
99+
100+
### Phase 4: Update CHANGELOG.md
101+
102+
1. Read `CHANGELOG.md`.
103+
2. Locate the `## Unreleased` section (everything between `## Unreleased` and the
104+
next `## Version` heading).
105+
3. Replace the content of the `## Unreleased` section with the curated entries,
106+
preserving a blank line after `## Unreleased` and before the next `## Version`.
107+
4. Write the updated file.
108+
5. Show a confirmation message:
109+
110+
> ✅ Updated CHANGELOG.md with draft entries for version `<version>`.
111+
> Run `git diff CHANGELOG.md` to review the changes.
112+
113+
## Rules
114+
115+
- Never remove or modify existing versioned release sections in `CHANGELOG.md`.
116+
- Only modify the `## Unreleased` section.
117+
- Preserve the exact heading format (`## Unreleased`) — do not add a date or version number.
118+
The version heading is set later during the release process.
119+
- Use the same markdown formatting conventions as prior releases in the file.
120+
- If `gh` CLI is unavailable or not authenticated, fall back to git-only analysis
121+
(skip labeled-PR extraction) and warn the user that breaking-change and deprecation
122+
labels could not be checked.

.github/agents/knowledge/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Knowledge Index
2+
3+
Reusable repository guidance for review and coding agents.
4+
5+
Load only files relevant to the current scope to reduce noise and avoid over-constraining edits.
6+
7+
## Topics
8+
9+
| File | Load when |
10+
| --- | --- |
11+
| `api-deprecation-policy.md` | Public API removal, rename, or deprecation; stable vs alpha breaking changes |
12+
| `config-property-stability.md` | `otel.instrumentation.*` property add, remove, rename, or deprecation |
13+
| `general-rules.md` | Always — review checklist table and core rules enforced on every review |
14+
| `gradle-conventions.md` | `build.gradle.kts` or `settings.gradle.kts` changes, custom test task registration or wiring |
15+
| `javaagent-advice-patterns.md` | ByteBuddy `@Advice` class or advice-method changes |
16+
| `javaagent-module-patterns.md` | `InstrumentationModule`, `TypeInstrumentation`, `Singletons`, `VirtualField`, `CallDepth` |
17+
| `library-patterns.md` | Library instrumentation telemetry, builder, getter, or setter pattern changes |
18+
| `module-naming.md` | New or renamed modules or packages; settings includes |
19+
| `testing-general-patterns.md` | Test files in scope — assertion style, attribute assertion patterns, `satisfies()` lambda usage |
20+
| `testing-experimental-flags.md` | `testExperimental` task or experimental span-attribute assertions |
21+
| `testing-semconv-stability.md` | Semconv opt-in modes, `emitOld*`/`emitStable*`, `maybeStable`, Semconv test tasks |
22+
23+
## Naming Conventions
24+
25+
- File names are topic-oriented and kebab-cased.
26+
- Prefer `<domain>-<focus>.md` patterns (for example `testing-semconv-stability.md`).
27+
- Keep titles aligned with category tags used in agent checklists (`[Build]`, `[Testing]`, etc.).

0 commit comments

Comments
 (0)