Dieses Beispiel zeigt, wie Versionen über ihren gesamten Lebenszyklus verwaltet werden: von der Veröffentlichung einer neuen Version, über die Markierung als stabil, die Abkündigung älterer Versionen bis hin zur Archivierung.
Eine Dokumentationsversion durchläuft typischerweise diese Status:
| Status | Badge | Beschreibung |
|---|---|---|
| Unreleased | info | Pre-Release, Beta oder Release Candidate |
| Current | primary | Die neueste veröffentlichte Version |
| Stable | success | Die empfohlene Version für die meisten Benutzer |
| Deprecated | warning | Noch verfügbar, aber nicht mehr gepflegt |
| Archived | (entfernt) | Nicht mehr in der Dokumentation verfügbar |
Betrachten wir ein typisches Szenario, bei dem Sie v1 und v2 haben und v3 veröffentlichen.
// astro.config.mjs - Vor v3 Release
export default defineConfig({
integrations: [
shipyardDocs({
versions: {
current: 'v2',
available: [
{ version: 'v2', label: 'Version 2.0' },
{ version: 'v1', label: 'Version 1.0', banner: 'unmaintained' },
],
deprecated: ['v1'],
stable: 'v2',
},
}),
],
})
Fügen Sie zunächst v3 als Pre-Release-Version hinzu, während Sie sie noch entwickeln:
// astro.config.mjs - v3 in Entwicklung
export default defineConfig({
integrations: [
shipyardDocs({
versions: {
current: 'v2', // v2 ist noch der Standard
available: [
{ version: 'v3', label: 'Version 3.0 (Beta)', banner: 'unreleased' },
{ version: 'v2', label: 'Version 2.0' },
{ version: 'v1', label: 'Version 1.0', banner: 'unmaintained' },
],
deprecated: ['v1'],
stable: 'v2', // v2 ist noch stabil
},
}),
],
})
Erstellen Sie das neue Versionsverzeichnis:
mkdir -p docs/v3
cp -r docs/v2/* docs/v3/
Aktualisieren Sie die Content Collection:
// src/content.config.ts
const docs = defineCollection(
createVersionedDocsCollection('./docs', {
versions: ['v1', 'v2', 'v3'], // v3 hinzufügen
fallbackVersion: 'v2',
}),
)
Wenn v3 bereit zur Veröffentlichung ist:
// astro.config.mjs - v3 veröffentlicht
export default defineConfig({
integrations: [
shipyardDocs({
versions: {
current: 'v3', // v3 ist jetzt current
available: [
{ version: 'v3', label: 'Version 3.0' }, // 'unreleased' Banner entfernen
{ version: 'v2', label: 'Version 2.0' },
{ version: 'v1', label: 'Version 1.0', banner: 'unmaintained' },
],
deprecated: ['v1'],
stable: 'v3', // v3 ist jetzt stabil
},
}),
],
})
Was sich ändert:
/docs/ besuchen, werden zu /docs/v3/ weitergeleitet/docs/latest/ zeigt jetzt auf v3Nachdem v3 eine Weile stabil war, kündigen Sie v2 ab:
// astro.config.mjs - v2 abgekündigt
export default defineConfig({
integrations: [
shipyardDocs({
versions: {
current: 'v3',
available: [
{ version: 'v3', label: 'Version 3.0' },
{ version: 'v2', label: 'Version 2.0', banner: 'unmaintained' }, // Banner hinzufügen
{ version: 'v1', label: 'Version 1.0', banner: 'unmaintained' },
],
deprecated: ['v1', 'v2'], // v2 zur deprecated Liste hinzufügen
stable: 'v3',
},
}),
],
})
Was sich ändert:
Wenn eine Version so alt ist, dass sie nicht mehr nützlich ist, entfernen Sie sie vollständig:
// astro.config.mjs - v1 archiviert
export default defineConfig({
integrations: [
shipyardDocs({
versions: {
current: 'v3',
available: [
{ version: 'v3', label: 'Version 3.0' },
{ version: 'v2', label: 'Version 2.0', banner: 'unmaintained' },
// v1 aus available entfernt
],
deprecated: ['v2'], // v1 aus deprecated entfernen
stable: 'v3',
},
}),
],
})
Aktualisieren Sie die Content Collection:
// src/content.config.ts
const docs = defineCollection(
createVersionedDocsCollection('./docs', {
versions: ['v2', 'v3'], // v1 entfernen
fallbackVersion: 'v3',
}),
)
Optional können Sie den Inhalt archivieren:
# v1 Inhalt archivieren (optional, zur Referenz)
tar -czf archive/docs-v1.tar.gz docs/v1/
rm -rf docs/v1/
So entwickelt sich die Konfiguration über einen typischen Versionslebenszyklus:
Zeit ──────────────────────────────────────────────────────────────────>
v1: [stable]────────[deprecated]──────────────────────[archived]
v2: [unreleased]──[stable]───────[deprecated]───────────────>
v3: [unreleased]──[stable]───────────────>
v4: [unreleased]──────>
Punkt A: v2 ist neu
versions: {
current: 'v1',
available: [
{ version: 'v2', label: 'Version 2.0 (Beta)', banner: 'unreleased' },
{ version: 'v1', label: 'Version 1.0' },
],
deprecated: [],
stable: 'v1',
}
Punkt B: v2 veröffentlicht
versions: {
current: 'v2',
available: [
{ version: 'v2', label: 'Version 2.0' },
{ version: 'v1', label: 'Version 1.0' },
],
deprecated: [],
stable: 'v2',
}
Punkt C: v1 abgekündigt
versions: {
current: 'v2',
available: [
{ version: 'v2', label: 'Version 2.0' },
{ version: 'v1', label: 'Version 1.0', banner: 'unmaintained' },
],
deprecated: ['v1'],
stable: 'v2',
}
Punkt D: v3 veröffentlicht, v1 archiviert
versions: {
current: 'v3',
available: [
{ version: 'v3', label: 'Version 3.0' },
{ version: 'v2', label: 'Version 2.0', banner: 'unmaintained' },
],
deprecated: ['v2'],
stable: 'v3',
}
Kündigen Sie eine Version ab, wenn:
Archivieren Sie eine Version, wenn:
Ein typischer Abkündigungs-Zeitplan:
banner-Eigenschaft, um klare Warnungen bei abgekündigten Versionen anzuzeigenlabel, um den Status anzuzeigen (z.B. “Version 1.0 (Legacy)”)Für Pre-Release-Versionen:
{ version: 'v3-rc', label: 'Version 3.0 RC1', path: 'v3-rc', banner: 'unreleased' }
Für LTS-Versionen mit erweitertem Support:
{
current: 'v4',
available: [
{ version: 'v4', label: 'Version 4.0' },
{ version: 'v3-lts', label: 'Version 3.0 LTS', path: 'v3-lts' },
{ version: 'v2', label: 'Version 2.0', banner: 'unmaintained' },
],
deprecated: ['v2'],
stable: 'v4', // oder 'v3-lts' wenn LTS für Produktion empfohlen wird
}
Wenn Sie zwei aktive Hauptversionen pflegen (z.B. Python 2/3 Situation):
{
current: 'v3',
available: [
{ version: 'v3', label: 'Version 3.x' },
{ version: 'v2', label: 'Version 2.x' }, // Kein Abkündigungsbanner
],
deprecated: [],
stable: 'v3', // v3 für neue Projekte empfehlen
}