11
11
package main
12
12
13
13
import (
14
+ "archive/tar"
14
15
"bufio"
15
16
"bytes"
17
+ "compress/gzip"
16
18
"fmt"
19
+ "io"
17
20
"log"
21
+ "net/http"
18
22
"os"
19
23
"os/exec"
24
+ "path"
20
25
"path/filepath"
26
+ "sort"
21
27
"strings"
28
+
29
+ "github.com/hashicorp/go-version"
22
30
)
23
31
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
+
24
100
func main () {
25
101
curDir , err := os .Getwd ()
26
102
if err != nil {
27
103
log .Fatal (err )
28
104
}
29
105
30
- fmt .Println ("Current Directory is" , curDir )
106
+ fmt .Println ("Current directory is" , curDir )
31
107
tmpDir := os .TempDir ()
32
- distDir , err := os .MkdirTemp (tmpDir , "gitea-docs" )
108
+ distDir , err := os .MkdirTemp (tmpDir , "gitea-docs-dist " )
33
109
if err != nil {
34
110
log .Fatal (err )
35
111
}
112
+ fmt .Println ("Dist directory is" , distDir )
36
113
37
- fmt .Println ("Fetch origin branches" )
114
+ fmt .Println ("Fetching origin branches" )
38
115
cmd := exec .Command ("git" , "fetch" , "origin" )
39
116
cmd .Dir = curDir
40
117
if err := cmd .Run (); err != nil {
@@ -45,14 +122,24 @@ func main() {
45
122
log .Fatal (err )
46
123
}
47
124
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
+
48
134
for _ , releaseVersion := range releaseBranches {
49
- if err := genearteOneVersion (curDir , distDir , releaseVersion ); err != nil {
135
+ if err := genearteOneVersion (workspaceDir , curDir , distDir , releaseVersion ); err != nil {
50
136
log .Fatal (err )
51
137
}
52
138
}
53
- fmt .Println ("----" , distDir )
54
139
}
55
140
141
+ var minDocVersion , _ = version .NewVersion ("v1.16" )
142
+
56
143
func fetchAllReleasesBranches (curDir string ) ([]string , error ) {
57
144
var output bytes.Buffer
58
145
var stderr strings.Builder
@@ -68,26 +155,64 @@ func fetchAllReleasesBranches(curDir string) ([]string, error) {
68
155
69
156
for scanner .Scan () {
70
157
branch := strings .TrimPrefix (strings .TrimSpace (scanner .Text ()), "origin/release/" )
158
+ ver , _ := version .NewVersion (branch )
159
+ if ver .LessThan (minDocVersion ) {
160
+ continue
161
+ }
162
+
71
163
branches = append (branches , branch )
72
164
}
73
165
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
+
74
172
return branches , nil
75
173
}
76
174
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 )
79
178
80
179
distSubDir := filepath .Join (distDir , releaseVersion )
81
180
82
181
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
85
184
cmd .Stderr = & stderr
86
185
if err := cmd .Run (); err != nil {
87
186
return fmt .Errorf ("%v - %v" , err , stderr .String ())
88
187
}
188
+
189
+ stderr .Reset ()
89
190
// 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
93
218
}
0 commit comments