@@ -15,10 +15,29 @@ import (
1515
1616const (
1717 changelogSource = "CHANGELOG.md"
18- changelogTarget = "website/src/docs/changelog.md"
18+ changelogTarget = "website/src/next/ docs/changelog.md"
1919 versionFile = "internal/version/version.txt"
2020)
2121
22+ type promotion struct { source , target string }
23+
24+ // Promoted at release time: the website builds `next` from the sources on the
25+ // left and `latest` from the targets on the right, so that taskfile.dev only
26+ // ever documents the version being released. The other half of the mechanism
27+ // lives in website/.vitepress/config.ts, which picks a side at build time.
28+ var (
29+ promotedDirs = []promotion {
30+ {"website/src/next/docs" , "website/src/latest/docs" },
31+ {"website/src/next/blog" , "website/src/latest/blog" },
32+ }
33+
34+ promotedFiles = []promotion {
35+ {"website/.vitepress/sidebar/next.ts" , "website/.vitepress/sidebar/latest.ts" },
36+ {"website/src/public/next-schema.json" , "website/src/public/schema.json" },
37+ {"website/src/public/next-schema-taskrc.json" , "website/src/public/schema-taskrc.json" },
38+ }
39+ )
40+
2241var changelogReleaseRegex = regexp .MustCompile (`## Unreleased` )
2342
2443// Flags
@@ -61,13 +80,42 @@ func release() error {
6180 return err
6281 }
6382
83+ // After the changelog so that the promoted docs carry it.
84+ if err := promote (); err != nil {
85+ return err
86+ }
87+
6488 if err := setVersionFile (versionFile , version ); err != nil {
6589 return err
6690 }
6791
6892 return nil
6993}
7094
95+ func promote () error {
96+ for _ , p := range promotedDirs {
97+ // CopyFS refuses to overwrite, so the previous release has to go first.
98+ if err := os .RemoveAll (p .target ); err != nil {
99+ return err
100+ }
101+ if err := os .CopyFS (p .target , os .DirFS (p .source )); err != nil {
102+ return err
103+ }
104+ }
105+
106+ for _ , p := range promotedFiles {
107+ b , err := os .ReadFile (p .source )
108+ if err != nil {
109+ return err
110+ }
111+ if err := os .WriteFile (p .target , b , 0o644 ); err != nil { //nolint:gosec
112+ return err
113+ }
114+ }
115+
116+ return nil
117+ }
118+
71119func getVersion (filename string ) (* semver.Version , error ) {
72120 b , err := os .ReadFile (filename )
73121 if err != nil {
0 commit comments