Skip to content

Commit 1748645

Browse files
authored
Update changelog for upcoming release (#16475)
1 parent 947277b commit 1748645

3 files changed

Lines changed: 244 additions & 1 deletion

File tree

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/scripts/draft-change-log-entries.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ declare -A deprecated_added_commits
4848
declare -A deprecated_removed_commits
4949

5050
format_commit_msg() {
51-
git log --format=%s -n 1 "$1" | sed -E 's, *\(#([0-9]+)\)$, ([#\1](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/\1)),'
51+
git log --format=%s -n 1 "$1" | sed -E 's, *\(#([0-9]+)\)$,\n ([#\1](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/\1)),'
5252
}
5353

5454
while IFS= read -r commit_hash; do

CHANGELOG.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,127 @@
22

33
## Unreleased
44

5+
### ⚠️ Breaking changes to non-stable APIs
6+
7+
- Remove deprecated AWS Lambda v2.2 wrappers and `forceFlush(int, TimeUnit)` overload
8+
([#16170](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16170))
9+
- Remove deprecated HTTP client/server methods
10+
([#16167](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16167))
11+
- Remove deprecated database instrumentation methods and classes
12+
([#16164](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16164))
13+
- Remove deprecated peer-service mapping APIs
14+
([#16165](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16165))
15+
- Make runtime-telemetry deprecated classes now internal
16+
([#16173](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16173))
17+
- Remove `AttributesExtractorUtil`
18+
([#16152](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16152))
19+
- Remove marker interface from `SqlClientAttributesGetter`
20+
([#16205](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16205))
21+
- Merge network/server getter methods into DB attribute getters
22+
([#16264](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16264),
23+
[#16268](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16268))
24+
- Rename SQL sanitizer classes to SQL analyzer
25+
([#16269](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16269))
26+
- Rename internal common module packages to follow new naming convention
27+
([#16284](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16284),
28+
[#16308](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16308),
29+
[#16327](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16327),
30+
[#16341](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16341),
31+
[#16373](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16373))
32+
33+
### 🚫 Deprecations
34+
35+
- Deprecated individual runtime-telemetry module classes in favor of unified module
36+
([#16087](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16087))
37+
- Deprecated old HTTP server query parameter methods in favor of sensitive query param handling
38+
([#16097](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16097))
39+
- Deprecated old RPC attributes getter methods in favor of new ones supporting stable semantic
40+
conventions
41+
([#16130](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16130))
42+
- Deprecated old ClickHouse instrumentation methods as part of simplification
43+
([#16206](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16206))
44+
- Deprecated old R2DBC methods in favor of ones supporting `db.system.name`
45+
([#16251](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16251))
46+
- Deprecated old `DbClientAttributesGetter` methods; added `getErrorType()` with implementations
47+
([#16276](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16276))
48+
- Deprecated old RPC metrics methods in favor of ones supporting stable semantic conventions
49+
([#16298](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16298))
50+
- Deprecated old `DbClientAttributesGetter` methods; added `getDbName()` to better support
51+
old/stable semconv split
52+
([#16318](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16318))
53+
54+
### 📈 Enhancements
55+
56+
- Add server address and port attributes for Spymemcached
57+
([#15242](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15242))
58+
- Add Kafka Connect as a built-in JMX metrics target
59+
([#15561](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15561))
60+
- Convert Lettuce instrumentation to use `Instrumenter`
61+
([#15838](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15838))
62+
- Apply stable semantic conventions to Camel JMX metrics
63+
([#16088](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16088))
64+
- Add `jvm.file_descriptor.limit` metric
65+
([#16174](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16174))
66+
- Run gRPC client callbacks with parent context
67+
([#16175](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16175))
68+
- SQL summary: handle `EXPLAIN` statements
69+
([#16184](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16184))
70+
- Simplify InfluxDB instrumentation
71+
([#16207](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16207))
72+
- Update histogram buckets for `db.client.operation.duration`
73+
([#16222](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16222))
74+
- SQL summary: support Oracle dblink syntax
75+
([#16230](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16230))
76+
- Add instrumentation for ZIO HTTP server route
77+
([#16232](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16232))
78+
- Remove network attributes under database stable semconv flag
79+
([#16257](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16257))
80+
- Support Javalin 7
81+
([#16261](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16261))
82+
- gRPC: initial stable semconv support
83+
([#16304](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16304))
84+
- Populate `os.version` resource attribute
85+
([#16311](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16311))
86+
- Camel: don't emit db spans under stable semconv
87+
([#16275](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16275))
88+
- Dubbo: stable semconv support
89+
([#16352](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16352))
90+
- Update the OpenTelemetry SDK version to 1.60.0
91+
([#16407](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16407))
92+
- Use new stable `LogRecordBuilder.setException()`
93+
([#16423](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16423))
94+
- Configure `semconv-stability.opt-in` with declarative config API
95+
([#16443](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16443))
96+
- Support `otel.event.name`
97+
([#16220](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16220))
98+
99+
### 🛠️ Bug fixes
100+
101+
- SQL sanitizer now treats double-quoted fragments as string literals by default
102+
([#15582](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15582))
103+
- Clear recorded exception when request completes
104+
([#16138](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16138))
105+
- Clear URL connection state after ending span
106+
([#16155](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16155))
107+
- Fix Spring declarative config with environment variable substitution
108+
([#15775](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15775))
109+
- Fix Ktor server send pipeline error handling
110+
([#16192](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16192))
111+
- Logging appenders: `KeyValue` attributes should take priority over MDC
112+
([#16239](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16239))
113+
- Create new `PekkoRouteHolder` for each request
114+
([#16258](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16258))
115+
- Tomcat JMX: ignore negative thread and session limits
116+
([#16355](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16355))
117+
- `server.port` is required on HTTP client spans
118+
([#16388](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16388))
119+
- Fix Ktor server instrumentation resolving peer address
120+
([#16392](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16392))
121+
- Fix class cast exception in servlet instrumentation
122+
([#16403](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16403))
123+
- Fix empty response body on Jetty HttpClient 9.4.24–9.4.43
124+
([#16406](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16406))
125+
5126
## Version 2.25.0 (2026-02-13)
6127

7128
### ⚠️ Breaking changes to non-stable APIs

0 commit comments

Comments
 (0)