feat(website): serve the released docs from a versioned copy (#2979)

This commit is contained in:
Valentin Maerten
2026-08-17 14:15:03 +02:00
committed by GitHub
parent b7836eb893
commit 936b90c625
87 changed files with 12318 additions and 247 deletions

View File

@@ -15,10 +15,29 @@ import (
const (
changelogSource = "CHANGELOG.md"
changelogTarget = "website/src/docs/changelog.md"
changelogTarget = "website/src/next/docs/changelog.md"
versionFile = "internal/version/version.txt"
)
type promotion struct{ source, target string }
// Promoted at release time: the website builds `next` from the sources on the
// left and `latest` from the targets on the right, so that taskfile.dev only
// ever documents the version being released. The other half of the mechanism
// lives in website/.vitepress/config.ts, which picks a side at build time.
var (
promotedDirs = []promotion{
{"website/src/next/docs", "website/src/latest/docs"},
{"website/src/next/blog", "website/src/latest/blog"},
}
promotedFiles = []promotion{
{"website/.vitepress/sidebar/next.ts", "website/.vitepress/sidebar/latest.ts"},
{"website/src/public/next-schema.json", "website/src/public/schema.json"},
{"website/src/public/next-schema-taskrc.json", "website/src/public/schema-taskrc.json"},
}
)
var changelogReleaseRegex = regexp.MustCompile(`## Unreleased`)
// Flags
@@ -61,6 +80,11 @@ func release() error {
return err
}
// After the changelog so that the promoted docs carry it.
if err := promote(); err != nil {
return err
}
if err := setVersionFile(versionFile, version); err != nil {
return err
}
@@ -68,6 +92,30 @@ func release() error {
return nil
}
func promote() error {
for _, p := range promotedDirs {
// CopyFS refuses to overwrite, so the previous release has to go first.
if err := os.RemoveAll(p.target); err != nil {
return err
}
if err := os.CopyFS(p.target, os.DirFS(p.source)); err != nil {
return err
}
}
for _, p := range promotedFiles {
b, err := os.ReadFile(p.source)
if err != nil {
return err
}
if err := os.WriteFile(p.target, b, 0o644); err != nil { //nolint:gosec
return err
}
}
return nil
}
func getVersion(filename string) (*semver.Version, error) {
b, err := os.ReadFile(filename)
if err != nil {