Skip to content

Commit 783f865

Browse files
committed
improve code
1 parent 8a5d87f commit 783f865

File tree

1 file changed

+137
-12
lines changed

1 file changed

+137
-12
lines changed

build/generate-docs.go

+137-12
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,107 @@
1111
package main
1212

1313
import (
14+
"archive/tar"
1415
"bufio"
1516
"bytes"
17+
"compress/gzip"
1618
"fmt"
19+
"io"
1720
"log"
21+
"net/http"
1822
"os"
1923
"os/exec"
24+
"path"
2025
"path/filepath"
26+
"sort"
2127
"strings"
28+
29+
"github.com/hashicorp/go-version"
2230
)
2331

32+
func dlThemeFile(dir string) error {
33+
resp, err := http.Get("https://dl.gitea.io/theme/master.tar.gz")
34+
if err != nil {
35+
return err
36+
}
37+
defer resp.Body.Close()
38+
themePath := filepath.Join(dir, "theme.tar.gz")
39+
f, err := os.Create(themePath)
40+
if err != nil {
41+
return err
42+
}
43+
defer f.Close()
44+
if _, err = io.Copy(f, resp.Body); err != nil {
45+
return err
46+
}
47+
f.Close()
48+
49+
f2, err := os.Open(themePath)
50+
if err != nil {
51+
return err
52+
}
53+
defer f2.Close()
54+
55+
dstPath := filepath.Join(dir, "gitea")
56+
57+
// gzip read
58+
gr, err := gzip.NewReader(f2)
59+
if err != nil {
60+
return err
61+
}
62+
defer gr.Close()
63+
64+
// tar read
65+
tr := tar.NewReader(gr)
66+
67+
// 读取文件
68+
for {
69+
h, err := tr.Next()
70+
if err == io.EOF {
71+
break
72+
}
73+
if err != nil {
74+
return err
75+
}
76+
if h.FileInfo().IsDir() {
77+
continue
78+
}
79+
if err := os.MkdirAll(filepath.Join(dstPath, path.Dir(h.Name)), os.ModePerm); err != nil {
80+
return err
81+
}
82+
83+
// 打开文件
84+
fw, err := os.Create(filepath.Join(dstPath, h.Name))
85+
if err != nil {
86+
return err
87+
}
88+
defer fw.Close()
89+
90+
// 写文件
91+
_, err = io.Copy(fw, tr)
92+
if err != nil {
93+
return err
94+
}
95+
fw.Close()
96+
}
97+
return nil
98+
}
99+
24100
func main() {
25101
curDir, err := os.Getwd()
26102
if err != nil {
27103
log.Fatal(err)
28104
}
29105

30-
fmt.Println("Current Directory is", curDir)
106+
fmt.Println("Current directory is", curDir)
31107
tmpDir := os.TempDir()
32-
distDir, err := os.MkdirTemp(tmpDir, "gitea-docs")
108+
distDir, err := os.MkdirTemp(tmpDir, "gitea-docs-dist")
33109
if err != nil {
34110
log.Fatal(err)
35111
}
112+
fmt.Println("Dist directory is", distDir)
36113

37-
fmt.Println("Fetch origin branches")
114+
fmt.Println("Fetching origin branches")
38115
cmd := exec.Command("git", "fetch", "origin")
39116
cmd.Dir = curDir
40117
if err := cmd.Run(); err != nil {
@@ -45,14 +122,24 @@ func main() {
45122
log.Fatal(err)
46123
}
47124
fmt.Printf("Found %d branches\n", len(releaseBranches))
125+
workspaceDir, err := os.MkdirTemp(tmpDir, "gitea-docs-workspace")
126+
if err != nil {
127+
log.Fatal(err)
128+
}
129+
130+
if err = dlThemeFile(workspaceDir); err != nil {
131+
log.Fatal(err)
132+
}
133+
48134
for _, releaseVersion := range releaseBranches {
49-
if err := genearteOneVersion(curDir, distDir, releaseVersion); err != nil {
135+
if err := genearteOneVersion(workspaceDir, curDir, distDir, releaseVersion); err != nil {
50136
log.Fatal(err)
51137
}
52138
}
53-
fmt.Println("----", distDir)
54139
}
55140

141+
var minDocVersion, _ = version.NewVersion("v1.16")
142+
56143
func fetchAllReleasesBranches(curDir string) ([]string, error) {
57144
var output bytes.Buffer
58145
var stderr strings.Builder
@@ -68,26 +155,64 @@ func fetchAllReleasesBranches(curDir string) ([]string, error) {
68155

69156
for scanner.Scan() {
70157
branch := strings.TrimPrefix(strings.TrimSpace(scanner.Text()), "origin/release/")
158+
ver, _ := version.NewVersion(branch)
159+
if ver.LessThan(minDocVersion) {
160+
continue
161+
}
162+
71163
branches = append(branches, branch)
72164
}
73165

166+
sort.Slice(branches, func(i, j int) bool {
167+
a, _ := version.NewVersion(branches[i])
168+
b, _ := version.NewVersion(branches[j])
169+
return a.LessThan(b)
170+
})
171+
74172
return branches, nil
75173
}
76174

77-
func genearteOneVersion(curDir, distDir, releaseVersion string) error {
78-
fmt.Println("Genera branch", releaseVersion)
175+
func genearteOneVersion(workspaceDir, gitDir, distDir, releaseVersion string) error {
176+
curVerDir := filepath.Join(workspaceDir, releaseVersion)
177+
fmt.Printf("Genera branch %s in %s\n", releaseVersion, curVerDir)
79178

80179
distSubDir := filepath.Join(distDir, releaseVersion)
81180

82181
var stderr strings.Builder
83-
cmd := exec.Command("git", "switch", "release/"+releaseVersion)
84-
cmd.Dir = curDir
182+
cmd := exec.Command("git", "clone", "-b", "release/"+releaseVersion, gitDir, releaseVersion)
183+
cmd.Dir = workspaceDir
85184
cmd.Stderr = &stderr
86185
if err := cmd.Run(); err != nil {
87186
return fmt.Errorf("%v - %v", err, stderr.String())
88187
}
188+
189+
stderr.Reset()
89190
// hugo $(PUBLIC)
90-
cmd = exec.Command("hugo", "--cleanDestinationDir", "--destination="+distSubDir)
91-
cmd.Dir = curDir
92-
return cmd.Run()
191+
cmd = exec.Command("make", `clean`, "trans-copy")
192+
cmd.Dir = filepath.Join(curVerDir, "docs")
193+
cmd.Stderr = &stderr
194+
if err := cmd.Run(); err != nil {
195+
return fmt.Errorf("%v - %v", err, stderr.String())
196+
}
197+
198+
if err := os.MkdirAll(filepath.Join(curVerDir, "docs", "themes", "gitea"), os.ModePerm); err != nil {
199+
return err
200+
}
201+
202+
stderr.Reset()
203+
cmd = exec.Command("cp", `-r`, filepath.Join(workspaceDir, "gitea"), filepath.Join(curVerDir, "docs", "themes", "gitea"))
204+
cmd.Dir = filepath.Join(curVerDir, "docs")
205+
cmd.Stderr = &stderr
206+
if err := cmd.Run(); err != nil {
207+
return fmt.Errorf("%v - %v", err, stderr.String())
208+
}
209+
210+
stderr.Reset()
211+
cmd = exec.Command("hugo", `--baseURL="/"`, "--cleanDestinationDir", "--destination="+distSubDir)
212+
cmd.Dir = filepath.Join(curVerDir, "docs")
213+
cmd.Stderr = &stderr
214+
if err := cmd.Run(); err != nil {
215+
return fmt.Errorf("%v - %v", err, stderr.String())
216+
}
217+
return nil
93218
}

0 commit comments

Comments
 (0)