一键导入
vcluster-docs-releaser
vCluster Documentation Release Skill
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
vCluster Documentation Release Skill
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Audit and fix drift between Platform docs UI tokens and the loft-enterprise UI source. Use when running the drift report, interpreting its output, verifying findings against loft-enterprise, or fixing stale nav paths, labels, and informal prose in platform docs.
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.
Audit and fix the vCluster docs feature table that the FeatureTable component renders from src/data/features.yaml. Covers three facets - sidebar tier badges (FREE/ENTERPRISE) versus plan assignments in the plans repo, feature docs_url link targets, and which FeatureTable rows each page imports. Use when verifying badges, checking that feature links resolve to the right page, or confirming a page surfaces the correct rows.
Manages the Kubernetes compatibility matrix data and React component. Use when adding/removing K8s versions, updating conformance test results, or documenting known issues.
Platform Documentation Release Skill
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.
| 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
}
vcluster/_fragments/default-k8s-version.mdx — default Kubernetes versionCheck the default k8s version for this release. The source of truth is controlPlane.distro.k8s.image.tag in config/values.yaml of the vcluster OSS repo.
If the tag changed from the previous release, update the fragment:
:::note
vCluster deploys Kubernetes **vX.YY.Z** by default. To use a different version, set `controlPlane.distro.k8s.image.tag` in your `vcluster.yaml`.
:::
This fragment is used on quick-start and deploy pages. Because it lives in vcluster/_fragments/, the versioning command snapshots it into the new versioned docs folder automatically — older docs retain their pinned version.
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+)vcluster/_fragments/default-k8s-version.mdx)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 |
vcluster/_fragments/default-k8s-version.mdx | Update default k8s version if it changed (check config/values.yaml in vcluster OSS repo) | 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