원클릭으로
원클릭으로
Platform Documentation Release Skill
Write and edit vCluster Docusaurus documentation. Use this skill when working with .mdx or .md files in the vcluster-docs repository. Handles vale linting, partials discovery, link validation, versioned docs, and release processes.
Archive End-of-Life vCluster documentation versions. Use this skill when creating EOL documentation branches for vCluster or Platform versions. Handles branch creation, Docusaurus configuration, link fixing, Netlify deployment, and main branch updates.
Manages the Kubernetes compatibility matrix data and React component. Use when adding/removing K8s versions, updating conformance test results, or documenting known issues.
Generate MDX config reference partials from vCluster JSON schema. Use when automation is skipped for alpha releases or when manually refreshing config docs.
Upgrades Docusaurus to latest version in vCluster documentation. Use when upgrading Docusaurus packages from older to newer versions. Handles package updates, compatibility fixes, testing, and rollback procedures.
| name | vcluster-docs-releaser |
| description | vCluster Documentation Release Skill |
This skill automates the vCluster documentation release process, handling version updates, configuration changes, and SEO setup for new vCluster releases.
Starting with vCluster v0.33, docs versioning happens at rc-1, NOT on release day.
vcluster/ on main as usual. If a change needs to land in the upcoming release, add the backport-v0.33 label to the PRThe config flip PR changes only the version visibility in docusaurus.config.js:
lastVersion to point to the new versionThis separation means all the heavy lifting (version creation, content, link fixes) is done during the rc-1 window, and release day is a low-risk config change.
Trigger this skill when:
Note: This skill is for vCluster releases only. Platform releases have a separate skill (platform-docs-releaser).
Before starting:
npm run docusaurus docs:version:vcluster X.Y.Zvcluster_versions.json and vcluster_versioned_docs/version-X.Y.Z/ exist.md files in vcluster_versioned_docs/version-X.Y.Z/cli/When: Only if next branch contains preview docs that need to go to main
Process:
Check if next has unique content:
git log --oneline --no-merges origin/next ^main | grep -v "Merge remote-tracking branch"
If next has content to merge:
next → main with squash mergedocs: merge next branch for vX.Y releaseMerge command:
gh pr create --base main --head next \
--title "docs: merge next branch for vX.Y release" \
--body "Squash merge of preview docs from next branch"
# After review:
gh pr merge <pr-number> --squash
Note: Currently next only has merge commits, so this step can be skipped for now.
At rc-1, the version is added to the build but hidden from the dropdown. Do NOT change lastVersion, SEO, netlify redirect, or announcement bar — those are Part 4 (release day).
docusaurus.config.js — vCluster plugin configAdd the new version to onlyIncludeVersions and versions with hidden/unreleased flags:
lastVersion: "0.YY.0", // DO NOT CHANGE — stays on current stable
onlyIncludeVersions: ["current", "0.XX.0", "0.YY.0", ...], // Add new version
versions: {
current: {
label: "main 🚧",
},
"0.XX.0": { // NEW ENTRY — hidden pre-release
label: "v0.XX",
banner: "unreleased", // Shows warning banner on every page
badge: true,
noIndex: true, // Prevents search engine indexing
},
"0.YY.0": { // KEEP as-is — still current stable
label: "v0.YY Stable",
banner: "none",
badge: true,
},
// ... rest unchanged
}
src/config/versionConfig.js — hide from dropdownAdd the version to the hidden array so it doesn't appear in the version dropdown:
export const vclusterHiddenVersions = ["0.XX.0"];
export const platformHiddenVersions = [];
This is the single source of truth for hiding versions. Two custom components consume it:
src/theme/DocSidebar/Desktop/Content/index.js): filters useVersions() and passes visible names to DocsVersionDropdownNavbarItem versions propsrc/theme/TOCCollapsible/index.js): filters useVersions() before renderingResult: the version is built, accessible via direct URL (e.g., /docs/vcluster/0.XX.0/), shows the "unreleased" banner, but does not appear in the dropdown.
AI performs:
ls -la vcluster_versioned_docs/version-0.XX.0/ls vcluster_versioned_docs/version-0.XX.0/cli/*.md | wc -l (expect 90+)vclusterHiddenVersions array in versionConfig.js)User performs:
npm run build (not AI's responsibility)vcluster/manage/upgrade/supported_versions.mdxThis is the release-day action. All heavy work was done at rc-1. This PR only flips visibility.
PR title: docs: expose vCluster 0.XX docs in version dropdown
PR body: "Config flip to make the pre-deployed v0.XX docs visible in the version dropdown. All content was deployed at rc-1."
src/config/versionConfig.js — unhide from dropdownexport const vclusterHiddenVersions = []; // Remove the version string
docusaurus.config.js — promote to stablelastVersion: "0.XX.0", // Was 0.YY.0 — now points to new version
versions: {
"0.XX.0": {
label: "v0.XX Stable", // Was "v0.XX" — add "Stable"
banner: "none", // Was "unreleased" — remove banner
badge: true,
// noIndex removed — allow search engine indexing
},
"0.YY.0": {
label: "v0.YY", // Was "v0.YY Stable" — demote
banner: "none",
badge: true,
},
}
src/config/docsearch.js — update stable version for searchvcluster: {
pluginId: "vcluster",
stableVersion: "0.XX.0", // Was "0.YY.0" — update to new stable
stableLabel: "v0.XX Stable",
},
This drives search modal version boosting (stable docs get pageRank: 120, others get 60 or 20) and the default version filter on the /docs/search page. Without this update, search will continue biasing toward the old stable version.
docusaurus.config.js — SEO sitemap prioritiesif (item.url.match(/\/vcluster\/0\.XX\.0\//) ||
item.url.match(/\/platform\/X\.Y\.0\//)) {
return { ...item, priority: 1.0, changefreq: 'daily' };
}
docusaurus.config.js — announcement barannouncementBar: {
id: "vcluster-0-XX-release",
content: '... vCluster 0.XX ...',
},
netlify.toml — redirectCRITICAL: Add the redirect for the new lastVersion AND remove the redirect for the previous lastVersion (0.YY.0). The previous version is still in onlyIncludeVersions — its versioned URL serves real content and must not redirect.
# ADD this block for the new lastVersion (canonical URL is the unversioned path)
[[redirects]]
from = "/docs/vcluster/0.XX.0/*"
to = "/docs/vcluster/:splat"
status = 301
force = true
# REMOVE the block for 0.YY.0 — it is now a live versioned URL, not the lastVersion
Only two categories of versions belong in this redirect section:
lastVersion (whose canonical URL is the unversioned path)onlyIncludeVersionshack/test-vcluster-0.XX.hurl — create hurl testCopy from previous version, update version numbers. Hurl tests run AFTER PR is deployed to Netlify preview.
This PR is small, reviewable, and safe to merge by anyone with merge rights.
| File | Changes | Phase |
|---|---|---|
docusaurus.config.js | Add to onlyIncludeVersions, add version with banner: "unreleased" + noIndex: true | rc-1 |
src/config/versionConfig.js | Add version to vclusterHiddenVersions array | rc-1 |
docusaurus.config.js | lastVersion, labels, SEO, announcement bar | Release day |
src/config/versionConfig.js | Remove version from vclusterHiddenVersions | Release day |
src/config/docsearch.js | Update stableVersion to new stable version string | Release day |
netlify.toml | Add redirect for new lastVersion; remove redirect for previous lastVersion | Release day |
hack/test-vcluster-0.XX.hurl | New file | Release day |
announcementBar.contentnetlify.tomlsrc/config/docsearch.js stableVersion field (release day only)npm run docusaurus docs:version:vcluster X.Y.Z<ProAdmonition> tagsvcluster/manage/upgrade/supported_versions.mdxnpm run build0.30.0v0.30 (without patch)v0.30 Stable (current release)v0.26 (EOS) (old versions)// Rolling window of 6 versions (current + 5 stable)
onlyIncludeVersions: ["current", "0.30.0", "0.29.0", "0.28.0", "0.27.0", "0.26.0"]
// When 0.31.0 releases, becomes:
onlyIncludeVersions: ["current", "0.31.0", "0.30.0", "0.29.0", "0.28.0", "0.27.0"]
// 0.26.0 drops out - goes to archive branch
When a version drops out of onlyIncludeVersions:
vcluster-docs-archiver skill)# Verify changes
git diff docusaurus.config.js netlify.toml
# Check versions
cat vcluster_versions.json
# Verify CLI docs
ls vcluster_versioned_docs/version-0.XX.0/cli/*.md | wc -l
# Run hurl tests
hurl --test --variable BASE_URL=https://deploy-preview-XXXX--vcluster-docs-site.netlify.app \
hack/test-vcluster-0.XX.hurl
Solution: User already ran versioning command - proceed with config updates
Solution: Check if CLI generation script ran - see Notion doc
Solution: User responsibility - they run npm run build
Solution:
When triggered by Linear issue (e.g., ENG-9160):
After completing workflow, provide summary:
✅ vCluster 0.30.0 Release Configuration Complete
Files Updated:
- docusaurus.config.js (6 locations)
- netlify.toml (redirect updated)
- hack/test-vcluster-0.30.hurl (created)
My Tasks Complete (2-5):
✅ Updated banner
✅ Updated netlify redirect
✅ Verified CLI docs (93 files found)
✅ Created hurl test file
Your Tasks Remaining (1, 6-9):
⏳ Review enterprise/pro tags
⏳ Update support dates
⏳ Update compatibility matrix
⏳ Run build: npm run build
⏳ Run hurl tests (after PR deployed)
Ready to commit and push!
Version pattern: 0.30.0 → label: v0.30
Files to modify: 4 files total (release day adds src/config/docsearch.js)
Lines to change: ~10 locations across all files
Time estimate: 2-3 minutes for AI tasks
backport-v0.33 label for changes that must land in the upcoming releaseonlyIncludeVersions for build performancevCluster docs frequently link to Platform docs. These links can break when Platform releases a new version.
lastVersion change: When Platform releases (e.g., 4.5.0 → 4.6.0), /docs/platform/... routes to new version/platform/... links in vCluster docs point to current Platform versionWhen Platform releases, check if vCluster docs have broken links to:
/platform/administer/monitoring/... → /platform/maintenance/monitoring/...
/platform/install/advanced/air-gapped → /platform/install/air-gapped
/platform/administer/users-permissions/... → /platform/administer/authentication/...
/platform/api/authentication → /platform/administer/authentication/access-keys
After Platform release, run Netlify build to find broken links, then fix:
# Update paths in all vCluster versioned docs
find vcluster vcluster_versioned_docs -name "*.mdx" \
-exec sed -i 's|/platform/administer/monitoring/|/platform/maintenance/monitoring/|g' {} \;
find vcluster vcluster_versioned_docs -name "*.mdx" \
-exec sed -i 's|/platform/install/advanced/air-gapped|/platform/install/air-gapped|g' {} \;
If vCluster docs link to Platform version that's no longer in onlyIncludeVersions:
<!-- WRONG - 4.3.0 not in Platform build anymore -->
[Templates](/platform/4.3.0/administer/templates/create-virtual-cluster-template)
<!-- CORRECT - use current Platform path -->
[Templates](/platform/administer/templates/create-templates)
When both vCluster and Platform release simultaneously:
lastVersion and may restructure paths