Repository navigation
Changelog parsing re-parses a large CHANGELOG.md for every version (38 of 59 minutes on aws-sdk-rust) #47333
Replies: 1 comment
|
I found a second problem in the same runs. I think it's worth discussing here rather than in #47334. We saw no benefit from a warm package cache for this repository. We restored the previous run's cache on the next run and spent the same time on the same eight branches: 703 s on I traced this to We could fix this by storing a sentinel for "looked, found nothing" and treating it as a hit until its TTL expires. With the existing TTL logic from Written with the same AI agent as the report above (Claude Code, Claude Fable 5.1); the timings are from our runs. |
Uh oh!
There was an error while loading. Please reload this page.
How are you running Renovate?
Self-hosted
Which platform you running Renovate on?
github.com
Which version of Renovate are you using?
44.176.2
Please tell us more about your question or problem
getReleaseNotesMdre-parses the whole changelog for every version in an upgrade. It callssectionizeat each heading level (1 to 7), callingmarkdown.parseand splitting the file into lines each time. That means seven parses of the same text per version, repeated for every upgrade in the branch, even though the result is unchanged.We barely notice this with most changelogs, but spend most of our run parsing a large monorepo changelog.
awslabs/aws-sdk-rusthas a 10.8 MBCHANGELOG.md. Parsing it seven times takes about 1.4 s per version on an M-series laptop, and longer on our Graviton agent. For anaws-sdk-ec2security PR covering three upgrades and about 184 intermediate versions, we spent 658 s parsing it. Across eight aws-sdk crate branches, we spent 38 of 59 minutes here, with no output at debug level.We get no release notes for that time: the headings are dates (
October 22nd, 2026) and the GitHub releases are namedrelease-YYYY-MM-DD, so no version matches. We never reach the platform-limit cut-off from #45503 either, because no notes accumulate.With one parse per repository run, we can reuse the heading positions for every level and version. In a local benchmark against that changelog, I measured 35 ms per version, down from 1384 ms, after a single 190 ms parse. I have a change ready and will open a PR referencing this discussion.
You can reproduce this with any repository that depends on an outdated
aws-sdk-*crate. The cost is in parsing the upstream changelog, regardless of the repository being renovated.I wrote this analysis and the change with an AI agent (Claude Code, Claude Fable 5.1). The measurements are from our own runs.
Logs (if relevant)
Debug logs from one branch, with Buildkite timestamps. Between
Fetching changelogand creating the PR, we are parsing the changelog as described above:All reactions