Moved and renamed blogs & fixed broken links#869
Moved and renamed blogs & fixed broken links#869gardener-prow[bot] merged 6 commits intogardener:masterfrom
Conversation
📝 WalkthroughWalkthroughThis pull request addresses broken links identified by the Algolia Crawler by correcting URL slugs and directory paths, primarily by fixing incorrect capitalization and path structures. Additionally, it adds missing YAML front matter to multiple blog index pages and adjusts the default blog sidebar collapse state. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~15 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Tip Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs). Comment |
🧹 Preview RemovedThe preview for this PR is no longer available since the PR has been closed. |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.vitepress/theme/blog-sidebar.ts (1)
30-43:⚠️ Potential issue | 🟠 MajorFix month sorting — parseInt receives month names, not numbers.
parseInt(item.text)receives names like"January","March", etc. from frontmatter (due touseTitleFromFrontmatter: trueanduseFolderTitleFromIndexFile: true).parseInt("January")returnsNaN, causing_.orderByto produce undefined sort order.This was broken for 2025 before; now that month
_index.mdfiles exist for 2020, 2021, 2022, 2024, 2025, and 2026, the else-branch fires for all years and months render in random order everywhere.Month folders are named
01–12, so extract and parse that numeric segment from the item's path instead:🔢 Proposed fix — sort by the numeric month folder name extracted from the URL
- yearItem.items = _.orderBy(yearItem.items, [(item: any) => parseInt(item.text)], ['desc']); + yearItem.items = _.orderBy(yearItem.items, [(item: any) => { + // Month folders are named "01"–"12"; extract from link or base + const base: string = item.link ?? item.base ?? ''; + const segments = base.replace(/\/$/, '').split('/'); + return parseInt(segments[segments.length - 1], 10); + }], ['desc']);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.vitepress/theme/blog-sidebar.ts around lines 30 - 43, The current sorting uses parseInt(item.text) (in the _.orderBy call on yearItem.items) which receives month names ("January" etc.) and returns NaN; instead extract the numeric month folder segment from the item's link (the path segment that is "01".."12") and sort by parseInt(thatSegment, 10). Replace the comparator for yearItem.items with one that derives the month number from item.link (split on '/' and pick the segment corresponding to the month folder, then parseInt(..., 10)), and apply the same extraction/parse approach in the nested monthItem.items ordering (where you already split item.link) so both uses of _.orderBy sort by the numeric month folder value rather than item.text.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@website/archived/blog/2019/06.11-Manually-Adding-a-Node-to-an-Existing-Cluster.md`:
- Line 11: The markdown link "../2021/01.25-machine-controller-manager.md" in
the sentence is broken because the archived directory has no 2021 content;
update that link target to point to the actual active blog post
"01.25-machine-controller-manager.md" in the 2021 blog (e.g.,
/blog/2021/01/01.25-machine-controller-manager.md) so the link resolves to the
existing article.
---
Outside diff comments:
In @.vitepress/theme/blog-sidebar.ts:
- Around line 30-43: The current sorting uses parseInt(item.text) (in the
_.orderBy call on yearItem.items) which receives month names ("January" etc.)
and returns NaN; instead extract the numeric month folder segment from the
item's link (the path segment that is "01".."12") and sort by
parseInt(thatSegment, 10). Replace the comparator for yearItem.items with one
that derives the month number from item.link (split on '/' and pick the segment
corresponding to the month folder, then parseInt(..., 10)), and apply the same
extraction/parse approach in the nested monthItem.items ordering (where you
already split item.link) so both uses of _.orderBy sort by the numeric month
folder value rather than item.text.
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (46)
website/blog/2018/06/images/blog-antipattern.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-aws-efs.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-https.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-kubernetes-enable.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-kubetail.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-namespaceisolation.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-s3-shared-storage.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-service-common-stack.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/blog-service-service-stack.pngis excluded by!**/*.pngwebsite/blog/2018/06/images/teaser-1.svgis excluded by!**/*.svgwebsite/blog/2018/06/images/teaser.svgis excluded by!**/*.svgwebsite/blog/2018/07/images/teaser-patched-1.svgis excluded by!**/*.svgwebsite/blog/2018/07/images/teaser-patched.svgis excluded by!**/*.svgwebsite/blog/2018/12/images/cookie.jpgis excluded by!**/*.jpgwebsite/blog/2018/12/images/slider/cookie-00.jpgis excluded by!**/*.jpgwebsite/blog/2018/12/images/slider/cookie-01.jpgis excluded by!**/*.jpgwebsite/blog/2018/12/images/slider/cookie-02.jpgis excluded by!**/*.jpgwebsite/blog/2018/12/images/slider/cookie-03.jpgis excluded by!**/*.jpgwebsite/blog/2018/12/images/slider/cookie-05.jpgis excluded by!**/*.jpgwebsite/blog/2019/06/images/teaser-1.pngis excluded by!**/*.pngwebsite/blog/2019/06/images/teaser-1.svgis excluded by!**/*.svgwebsite/blog/2019/06/images/teaser-2.gifis excluded by!**/*.gifwebsite/blog/2019/06/images/teaser-2.pngis excluded by!**/*.pngwebsite/blog/2019/06/images/teaser.svgis excluded by!**/*.svgwebsite/blog/2020/05/images/github-mark-logo-green.svgis excluded by!**/*.svgwebsite/blog/2020/05/images/slack-logo-green.svgis excluded by!**/*.svgwebsite/blog/2020/05/images/twitter-logo-green.svgis excluded by!**/*.svgwebsite/blog/2020/05/images/website-screen-L.pngis excluded by!**/*.pngwebsite/blog/2020/05/images/website-screen.pngis excluded by!**/*.pngwebsite/blog/2020/10/images/00-001.pngis excluded by!**/*.pngwebsite/blog/2020/10/images/00-002.pngis excluded by!**/*.pngwebsite/blog/2020/10/images/00-003.pngis excluded by!**/*.pngwebsite/blog/2020/10/images/00-004.pngis excluded by!**/*.pngwebsite/blog/2020/11/images/01-001.svgis excluded by!**/*.svgwebsite/blog/2020/12/images/00.pngis excluded by!**/*.pngwebsite/blog/2020/12/images/01.pngis excluded by!**/*.pngwebsite/blog/2021/01/images/mcm-00.pngis excluded by!**/*.pngwebsite/blog/2021/01/images/mcm-01.pngis excluded by!**/*.pngwebsite/blog/2021/02/images/gardener-01.pngis excluded by!**/*.pngwebsite/blog/2021/02/images/gardener-02.pngis excluded by!**/*.pngwebsite/blog/2021/02/images/gardener-03.pngis excluded by!**/*.pngwebsite/blog/2024/04/images/kubecon-eu2024.pngis excluded by!**/*.pngwebsite/blog/2024/04/images/shoot-cluster-with-registry-cache.pngis excluded by!**/*.pngwebsite/blog/2024/05/images/hackathon202405-team.jpgis excluded by!**/*.jpgwebsite/blog/2024/11/images/promcon2024.jpegis excluded by!**/*.jpegwebsite/blog/2024/12/images/hackathon202412-team.jpgis excluded by!**/*.jpg
📒 Files selected for processing (86)
.vitepress/theme/blog-sidebar.tswebsite/archived/blog/2019/06.11-Manually-Adding-a-Node-to-an-Existing-Cluster.mdwebsite/blog/2018/06/06.11-anti-patterns.mdwebsite/blog/2018/06/06.11-auditing-kubernetes-for-secure-setup.mdwebsite/blog/2018/06/06.11-big-things-come-in-small-packages.mdwebsite/blog/2018/06/06.11-hardening-the-gardener-community-setup.mdwebsite/blog/2018/06/06.11-kubernetes-is-available-in-docker-for-mac-17-12-ce.mdwebsite/blog/2018/06/06.11-namespace-isolation.mdwebsite/blog/2018/06/06.11-namespace-scope.mdwebsite/blog/2018/06/06.11-readwritemany-dynamically-provisioned-persistent-volumes-using-amazon-efs.mdwebsite/blog/2018/06/06.11-shared-storage-with-s3-backend.mdwebsite/blog/2018/06/06.11-watching-logs-of-several-pods.mdwebsite/blog/2018/06/_index.mdwebsite/blog/2018/06/images/blog-aws-efs.sketchwebsite/blog/2018/06/images/blog-https.sketchwebsite/blog/2018/06/images/blog-kubetail.sketchwebsite/blog/2018/06/images/blog-namespaceisolation.sketchwebsite/blog/2018/06/images/blog-s3-shared-storage.sketchwebsite/blog/2018/06/images/teaser-1.sketchwebsite/blog/2018/06/images/teaser.sketchwebsite/blog/2018/07/07.11-hibernate-a-cluster-to-save-money.mdwebsite/blog/2018/07/_index.mdwebsite/blog/2018/12/12.22-cookies-are-dangerous.mdwebsite/blog/2018/12/12.25-gardener-cookies.mdwebsite/blog/2018/12/_index.mdwebsite/blog/2019/05/05.24-cluster-api-machine-abstractions-kubecon-talk.mdwebsite/blog/2019/05/_index.mdwebsite/blog/2019/06/06.11-feature-flags-in-kubernetes-applications.mdwebsite/blog/2019/06/06.11-organizing-access-using-kubeconfig-files.mdwebsite/blog/2019/06/_index.mdwebsite/blog/2019/06/images/teaser-1.sketchwebsite/blog/2019/06/images/teaser.sketchwebsite/blog/2020/05/05.11-new-website-same-green-flower.mdwebsite/blog/2020/05/_index.mdwebsite/blog/2020/08/08.06-gardener-v1.8.0-released.mdwebsite/blog/2020/08/_index.mdwebsite/blog/2020/09/09.11-gardener-v1.9-and-v1.10-released.mdwebsite/blog/2020/09/_index.mdwebsite/blog/2020/10/10.19-gardener-integrates-with-kubevirt.mdwebsite/blog/2020/10/10.19-shoot-reconciliation-details.mdwebsite/blog/2020/10/_index.mdwebsite/blog/2020/11/11.04-gardener-v1.11-and-v1.12-released.mdwebsite/blog/2020/11/11.20-case-study-migrating-etcd-volumes-in-production.mdwebsite/blog/2020/11/11.23-gardener-v1.13-released.mdwebsite/blog/2020/11/_index.mdwebsite/blog/2020/12/12.03-stackit-kubernetes-engine-with-gardener.mdwebsite/blog/2020/12/_index.mdwebsite/blog/2021/01/01.25-machine-controller-manager.mdwebsite/blog/2021/01/_index.mdwebsite/blog/2021/02/02.01-happy-anniversary-gardener.mdwebsite/blog/2021/02/_index.mdwebsite/blog/2021/09/09.12-navigating-cloud-native-security.mdwebsite/blog/2021/09/_index.mdwebsite/blog/2022/02/02.17-gardener-community-meeting-february.mdwebsite/blog/2022/02/_index.mdwebsite/blog/2022/03/03.23-gardener-community-meeting-march.mdwebsite/blog/2022/03/_index.mdwebsite/blog/2022/06/06.17-gardener-community-meeting-june.mdwebsite/blog/2022/06/_index.mdwebsite/blog/2022/10/10.06-gardener-community-meeting-october.mdwebsite/blog/2022/10/10.20-gardener-community-meeting-october-2.mdwebsite/blog/2022/10/_index.mdwebsite/blog/2023/03/03-27-high-availability-and-zone-outage-toleration.mdwebsite/blog/2023/03/_index.mdwebsite/blog/2024/04/04-05-kubecon-cloudnativecon-europe-2024-highlights.mdwebsite/blog/2024/04/04-18-spinkube-gardener-shoot-cluster.mdwebsite/blog/2024/04/04-22-gardener's-registry-cache-extension-another-cost-saving-win-and-more.mdwebsite/blog/2024/04/_index.mdwebsite/blog/2024/05/05-21-innovation-unleashed-a-deep-dive-into-the-5th-gardener-community-hackathon.mdwebsite/blog/2024/05/_index.mdwebsite/blog/2024/10/10-24-gardener-kubecon-cloudnativecon-na-2024-announcement.mdwebsite/blog/2024/10/_index.mdwebsite/blog/2024/11/11-06-promcon-eu-2024.mdwebsite/blog/2024/11/11-09-demo.mdwebsite/blog/2024/11/_index.mdwebsite/blog/2024/12/12-08-unleashing-potential-highlights-from-the-6th-gardener-community-hackathon.mdwebsite/blog/2024/12/_index.mdwebsite/blog/2025/03/03-18-gardener-kubecon-cloudnativecon-europe-2025-announcement.mdwebsite/blog/2025/04/04-17-leaner-clusters-lower-bills.mdwebsite/blog/2025/05/05-12-gardener-neonephos.mdwebsite/blog/2025/06/06-17-taking-gardener-to-the-next-level-highlights-from-the-7th-gardener-community-hackathon-in-schelklingen.mdwebsite/blog/2026/01/_index.mdwebsite/blog/2026/02/_index.mdwebsite/community/review-meetings/2022-community.mdwebsite/community/review-meetings/2025-reviews.mdwebsite/documentation/guides/administer-shoots/scalability.md
| --- | ||
|
|
||
| Gardener has an excellent ability to [automatically scale machines](../2021/01.25-Machine-Controller-Manager.md) for the cluster. From the point of view of scalability, there is **no need for manual intervention**. | ||
| Gardener has an excellent ability to [automatically scale machines](../2021/01.25-machine-controller-manager.md) for the cluster. From the point of view of scalability, there is **no need for manual intervention**. |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check whether the lowercase target exists in the archived folder
fd --type f "01.25-machine-controller-manager.md" website/archived/
# Also check for the old mixed-case file to confirm it was renamed (not duplicated)
fd --type f "01.25-Machine-Controller-Manager.md" website/archived/Repository: gardener/documentation
Length of output: 48
🏁 Script executed:
#!/bin/bash
# List files in the 2021 directory
ls -la website/archived/blog/2021/ 2>/dev/null || echo "Directory does not exist"
# Search for any file with "machine" in the name
fd --type f "machine" website/archived/blog/Repository: gardener/documentation
Length of output: 90
🏁 Script executed:
#!/bin/bash
# Check what actually exists in archived/blog/
ls -la website/archived/blog/ 2>/dev/null | head -20
# Search for any file with "machine" in name anywhere in archived/
fd --type f "machine" website/archived/Repository: gardener/documentation
Length of output: 276
🏁 Script executed:
#!/bin/bash
# Search for machine-controller-manager files anywhere in website/
fd --type f "machine-controller-manager" website/
# Also check if there's a 2021 directory anywhere
find website/ -type d -name "2021"Repository: gardener/documentation
Length of output: 140
The link target does not exist in the archived directory.
The link points to ../2021/01.25-machine-controller-manager.md, which would resolve to website/archived/blog/2021/01.25-machine-controller-manager.md. However, there is no 2021 directory in the archived blog structure (only 2018 and 2019 exist). The actual file exists at website/blog/2021/01/01.25-machine-controller-manager.md in the active (non-archived) blog directory. The link target is broken and needs to be corrected to point to the correct file location or replaced with a valid link.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@website/archived/blog/2019/06.11-Manually-Adding-a-Node-to-an-Existing-Cluster.md`
at line 11, The markdown link "../2021/01.25-machine-controller-manager.md" in
the sentence is broken because the archived directory has no 2021 content;
update that link target to point to the actual active blog post
"01.25-machine-controller-manager.md" in the 2021 blog (e.g.,
/blog/2021/01/01.25-machine-controller-manager.md) so the link resolves to the
existing article.
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: BoHristova The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
LGTM label has been added. DetailsGit tree hash: 3b91d31abea95ba9f5e49cb55fe8e87260971625 |
How to categorize this PR?
/kind enhancement
What this PR does / why we need it:
This PR:
Which issue(s) this PR fixes:
Fixes #825
Special notes for your reviewer:

How the blogs left side navigation looks now:
Summary by CodeRabbit
New Features
Bug Fixes
Chores