Conversation
content/get-started/migration/ was the only Get Started subsection that owned deep content. Its 22 files were all container-specific despite the product-neutral name, so readers arriving for Libraries found nothing there. Guardener was documented twice across two sections, each page pointing at the other and neither a superset of the other. - Move 25 files to content/chainguard/containers/migration/, taking dfc and Image Matcher with them. Every page keeps a Hugo alias for its old URL. - Merge the two Guardener pages into chainguard/guardener/dockerfile-migration/. Nothing dropped. - Rebuild get-started/migration/_index.md as a thin cross-product router matching its sibling hubs, covering Containers, Libraries, the API, and Guardener. - Trim migrations-overview.md from 257 to 198 lines, cutting a product explainer and a resources link farm that duplicated the sections around it. - Point the Containers landing banner, titled "Migrate to Chainguard Containers", at the migration section instead of the Using page, and raise Migration's weight so it follows About. The two section roots use an anchored nginx.conf rule rather than Hugo aliases. A generated alias is a greedy prefix that would misroute the flat legacy URLs whose targets moved into subfolders, and would swallow /chainguard/migration-guides/ as well. All 73 legacy URLs resolve through nginx serving the built site. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Mark Drake <mark@chainguard.dev>
✅ Deploy Preview for ornate-narwhal-088216 ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
matthewhelmke
approved these changes
Aug 28, 2026
matthewhelmke
left a comment
Collaborator
There was a problem hiding this comment.
Another step in the right direction! The site IA keeps getting better, tysm!!
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.
Type of change
Documentation Update
/get-started/migration/to/chainguard/containers/migration/, with Hugo aliases on every page/get-started/migration/as a thin cross-product router covering Containers, Libraries, the API, and Guardenermigrations-overview.mdand repoint the Containers landing banner at the migration sectionWhat should this PR do?
resolves https://linear.app/chainguard/issue/DOCS-117/migration-docs-cleanup-reorg-fixes
Move the container-specific migration docs under Chainguard Containers, and turn the Get Started migration page into a product-neutral router that serves Libraries and API readers as well.
Why are we making this change?
content/get-started/migration/was the only Get Started subsection that owned deep content — its siblings are thin hubs. All 22 of its files were container-specific despite the product-neutral name, so readers arriving for Libraries found nothing relevant. Guardener was documented twice across two sections, with each page pointing at the other and neither a superset of the other.What are the acceptance criteria?
/get-started/migration/stays a live page (it is never aliased) and routes to all four productsThe
/chainguard/migration/section root uses a hand-writtennginx.confrule anchored with/?$rather than a Hugo alias. A generated alias is a greedy prefix that would misroute the flat legacy URLs whose targets moved into subfolders (alpine-compatibilityintocompatibility/,migrating-pythonintomigration-guides/) and would swallow/chainguard/migration-guides/as well. This is a deliberate exception to the alias-first convention and is worth a reviewer's eye.How should this PR be tested?
Any documentation published to Chainguard Academy is reviewed carefully for accuracy. GUI procedures, API commands, and CLI code snippets in a draft are run and tested thoroughly — by both the author and the reviewer — to confirm they work exactly as written. This helps ensure that readers can follow along and get the same results. See the
edurepo's README./get-started/migration/and confirm the hub links out to Containers, Libraries, API, and Guardener/chainguard/migration/,/chainguard/migration/alpine-compatibility/,/chainguard/migration-guides/migrating-python/— and confirm each redirects rather than 404s/chainguard/containers/and confirm the "Migrate to Chainguard Containers" banner now lands on the migration section