Add temporary changelog migrate-from-web command - #3794
Open
cotti wants to merge 3 commits into
Open
Conversation
|
Label error. Requires exactly 1 of: automation, breaking, bug, changelog:skip, chore, ci, dependencies, documentation, enhancement, feature, fix, redesign. Found: |
Restacked on the scrubber-ownership chain: the scrubber Lambda owns the
public bundle/{product}/registry.json manifests and the shallow per-tree
maps (#3738), and the client-side refresh machinery is retired (#3760).
The migration command now writes YAML bundle objects only; the S3 events
those creates emit trigger the reconciliation that materializes the
manifests. Tests assert no registry.json is ever PUT.
cotti
force-pushed
the
changelog-migrate-from-web
branch
from
August 6, 2026 15:44
45a28a0 to
e9c26c7
Compare
cotti
changed the base branch from
main
to
changelog-retire-client-registry-refresh
August 6, 2026 15:44
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.
Summary
Adds
docs-builder changelog migrate-from-web, the deliberately temporary one-off migration command tracked by elastic/docs-eng-team#736 (epic: elastic/docs-eng-team#656). It migrates release notes that were published before the changelog pipeline existed into the S3 bundle store, and will be deleted once the rollout (elastic/docs-eng-team#683) completes.Design follows the direction set in the review on #3681: plain code, minimal surface, no new schemas/envelopes/frameworks, delete-after-use. The whole feature is one folder (
src/services/Elastic.Changelog/Migration/, 3 files), one small checked-in config, and one CLI method — all marked TEMPORARY.Note
Restacked 2026-08-06 onto the registry-ownership chain (#3738 ← #3760 ← this): with the scrubber Lambda owning the public manifests and the client-side refresh retired, the command now writes YAML bundle objects only — the earlier best-effort
RegistryBuilderrefresh was removed, and tests assert noregistry.jsonis ever PUT.How it works
config/migrate-from-web.yml(product id →owner/repo/path/ref/cutoff). Nothing runs implicitly for all products.--versionsnarrows a run further; versions above the cutoff are always skipped (they belong to the live pipeline).raw.githubusercontent.comat the pinned commit SHA in the config.## {version}sections (typed### …subsections →BundledEntrywith PR references extracted; prose → bundledescription, preserved verbatim) into the existingBundleshape thatchangelog uploadpublishes. No new fields or schemas.bundle/{product}/{version}.yamlwithIf-None-Match: *. Existing keys are skipped (identical vs. different content is distinguished via ETag), 412 races are reported as skips, nothing is ever overwritten. No registry writes: the scrubber Lambda materializesbundle/{product}/registry.jsonand the shallow per-tree maps from the S3 events these creates emit (Move public changelog registry ownership to the scrubber Lambda #3738; client-side refresh retired in Retire the client-side changelog registry refresh #3760).created/would-create/skipped/failed+ reason + ETag), printed as a Markdown table ready to paste into the tracking issue.Content source: Markdown at a pinned ref, not live HTML
Per the issue's preference, the command fetches the raw Markdown that backed the published pages instead of scraping elastic.co HTML: it is the authoritative source (the site is rendered from it), structured (headings/bullets/PR links survive intact), and a pinned SHA makes runs reproducible. For the EDOT Java pilot the config pins
9a61ce4f, the last hand-authored state ofdocs/release-notes/index.mdbefore elastic/elastic-otel-java#1023 switched that repo to native bundle YAMLs.Create-only mechanism
HEAD (
GetObjectMetadata) first — so skips can report the existing object's ETag and whether content is identical — then a conditionalPutObjectwithIf-None-Match: *as the actual race guard (a concurrent create surfaces as HTTP 412 and is reported as a skip). This mirrors the machinery from the closed #3715 but implemented locally in the temporary service to keep shared surface area at zero.Running the EDOT Java pilot
Actual dry-run output (abridged — 13 releases parsed, 1.0.0 through 1.10.0):
Temporary
The command, its service folder, config file, and docs page are all explicitly marked TEMPORARY (help text, XML docs, docs page warning) and will be removed after elastic/docs-eng-team#683.
Test plan
#123refs, prose preservation, unrecognized-subsection warnings, serialized YAML round-trips throughReleaseNotesSerialization)If-None-Match: *; second run over the same scope is a no-op (all skips, zero PUTs)failedwith reason, non-zero exit--versionsscope filteringregistry.json(asserted after the restack onto Retire the client-side changelog registry refresh #3760)dotnet formatclean ·./build.sh build --skip-dirty-check✓ · AOT publish zero warnings ✓ ·Elastic.Changelog.Tests877/877 on the restacked chain ✓ ·cli-schema.jsonregenerated and verified ✓Refs: elastic/docs-eng-team#736, elastic/docs-eng-team#656, elastic/docs-eng-team#683