changelog: source bundle entries from the CDN with a per-product registry#3470
Open
cotti wants to merge 1 commit into
Open
changelog: source bundle entries from the CDN with a per-product registry#3470cotti wants to merge 1 commit into
cotti wants to merge 1 commit into
Conversation
…stry
Source the individual changelog entries that make up a bundle from the
public CDN by default, scoped to the bundle's product(s), instead of the
local folder. Because the bundle filter is content-based (an entry's
products/prs/issues live inside the YAML, not its name) and CloudFront has
no ListObjects, a per-product entry index ({product}/changelog/registry.json)
is published on upload so the client can enumerate then fetch+filter.
- Add bundle.use_local_changelogs opt-out, plus automatic local fallback
when no concrete product can scope the per-product CDN fetch.
- Extend RegistryBuilder/RegistryKey to write and pass-through the entry
index (scrubber recognizes {product}/changelog/registry.json).
- Add CdnChangelogEntryFetcher and centralize CDN base resolution in
ChangelogCdn (shared with the changelog directive's cdn: mode).
- Emit cdn_url from `changelog bundle --plan` so CI can poll for the
scrubbed bundle ({base}/{product}/bundle/{file}).
- Harden entry sourcing: a registry-listed entry that has not yet
propagated to the CDN is retried with short backoff and cache-busting;
a persistent miss fails the bundle instead of silently shipping an
incomplete release.
dotnet format, AOT publish (0 trim/AOT warnings), and the affected unit
tests all pass; cli-schema.json regenerated for the new --plan output.
Co-authored-by: Cursor <cursoragent@cursor.com>
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Stacked on
changelog_directive_s3. Base this against that branch and merge it first; the diff shown here is only this change.Summary
Source the individual changelog entries that make up a bundle from the public CDN by default (scoped to the bundle's product), instead of the local
docs/changelog/folder. This makes bundles reflect what was actually published to S3 — i.e. with private references scrubbed — and decouples bundle creation from a checkout that happens to hold every entry.The bundle filter is content-based: whether an entry belongs in a bundle depends on the
products/prs/issuesfields inside the YAML, not on the file name. CloudFront has noListObjects, so we publish a small per-product index on upload and the client enumerates → fetches → filters.What changed
uploadnow writes{product}/changelog/registry.jsonalongside the existing bundle registry (RegistryBuilder/RegistryKey); the scrubber key allow-list recognizes it.CdnChangelogEntryFetcherdownloads the entry index and each entry; CDN base resolution is centralized inChangelogCdn(shared with the changelog directive'scdn:mode).bundle.use_local_changelogs: trueforces the local folder, and we fall back to local automatically when no concrete product can scope the per-product CDN fetch.--plancdn_url:changelog bundle --plannow emitscdn_url({base}/{product}/bundle/{file}) so CI can poll for the scrubbed bundle.docs/cli-schema.jsonregenerated.Verification
dotnet format --verify-no-changes: cleandotnet publish -c Release(docs-builder): 0 trim/AOT warningsElastic.Documentation.Configuration.Tests(409/409) andElastic.Changelog.Tests(732/732): passcli-schema.jsonmatches-- __schemaoutputTest plan
uploadpublishes{product}/changelog/registry.jsonand individual entriesbundle(default) fetches scrubbed entries from the CDN and applies the content filterbundlewithuse_local_changelogs: trueuses the local folderbundle --plansurfaces a correctcdn_urlMade with Cursor