Skip to content

Commit dcdd4e9

Browse files
committed
fix: sort versions
1 parent 3f20882 commit dcdd4e9

File tree

4 files changed

+61
-90
lines changed

4 files changed

+61
-90
lines changed

menu/fixtures/traefik-menu-obsolete.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
var versions = [
2-
{path: "", text: "v1.4 Latest", selected: false },
32
{path: "master", text: "Experimental", selected: false },
4-
{path: "v1.5", text: "v1.5 (RC)", selected: false },
5-
{path: "v1.3", text: "v1.3", selected: true },
3+
{path: "v1.10", text: "v1.10 (RC)", selected: false },
4+
{path: "", text: "v1.9 Latest", selected: false },
5+
{path: "v1.8", text: "v1.8", selected: true },
66
];
77

88

menu/fixtures/traefik-menu.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
var versions = [
2-
{path: "", text: "v1.4 Latest", selected: false },
32
{path: "master", text: "Experimental", selected: false },
4-
{path: "v1.5", text: "v1.5 (RC)", selected: true },
5-
{path: "v1.3", text: "v1.3", selected: false },
3+
{path: "v1.10", text: "v1.10 (RC)", selected: true },
4+
{path: "", text: "v1.9 Latest", selected: false },
5+
{path: "v1.8", text: "v1.8", selected: false },
66
];
77

88

menu/js.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7+
"sort"
78
"strings"
89
"text/template"
910

@@ -55,7 +56,6 @@ func buildJSFile(filePath string, versionsInfo types.VersionsInformation, branch
5556
defaultFuncMap := sprig.TxtFuncMap()
5657
defaultFuncMap["IsObsolete"] = func(versions []optionVersion, current string) bool {
5758
for _, v := range versions {
58-
fmt.Println(current, v.Name, v.State)
5959
if v.Name == current && v.State == stateObsolete {
6060
return true
6161
}
@@ -173,6 +173,20 @@ func parseBranches(branches []string) ([]string, map[int]*version.Version) {
173173
heads[v.Segments()[0]] = v
174174
}
175175
}
176+
177+
sort.Slice(rawVersions, func(i, j int) bool {
178+
vi, err := version.NewVersion(rawVersions[i])
179+
if err != nil {
180+
return true
181+
}
182+
vj, err := version.NewVersion(rawVersions[j])
183+
if err != nil {
184+
return false
185+
}
186+
187+
return vj.LessThanOrEqual(vi)
188+
})
189+
176190
return rawVersions, heads
177191
}
178192

menu/js_test.go

+40-83
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ func Test_buildJSFile(t *testing.T) {
2222
}{
2323
{
2424
desc: "simple",
25-
branches: []string{"origin/v1.4", "origin/master", "v1.4.6", "origin/v1.5", "origin/v1.3"},
25+
branches: []string{"origin/v1.9", "origin/master", "v1.9.6", "origin/v1.10", "origin/v1.8"},
2626
versionsInfo: types.VersionsInformation{
27-
Current: "v1.5",
28-
Latest: "v1.4.6",
27+
Current: "v1.10",
28+
Latest: "v1.9.6",
2929
Experimental: "master",
3030
},
3131
jsTemplate: `
@@ -37,10 +37,10 @@ var foo = [
3737
`,
3838
expected: `
3939
var foo = [
40-
{url: "http://localhost:8080/", text: "v1.4 Latest", selected: false },
4140
{url: "http://localhost:8080/master", text: "Experimental", selected: false },
42-
{url: "http://localhost:8080/v1.5", text: "v1.5 RC", selected: true },
43-
{url: "http://localhost:8080/v1.3", text: "v1.3", selected: false },
41+
{url: "http://localhost:8080/v1.10", text: "v1.10 RC", selected: true },
42+
{url: "http://localhost:8080/", text: "v1.9 Latest", selected: false },
43+
{url: "http://localhost:8080/v1.8", text: "v1.8", selected: false },
4444
];
4545
`,
4646
},
@@ -66,18 +66,18 @@ var foo = [
6666
`,
6767
expected: `
6868
var foo = [
69-
{url: "http://localhost:8080/", text: "v1.4 Latest", selected: true },
7069
{url: "http://localhost:8080/master", text: "v1.5 (unreleased)", selected: false },
70+
{url: "http://localhost:8080/", text: "v1.4 Latest", selected: true },
7171
{url: "http://localhost:8080/v1.3", text: "v1.3", selected: false },
7272
];
7373
`,
7474
},
7575
{
7676
desc: "traefik-menu.js.gotmpl - not obsolete",
77-
branches: []string{"origin/v1.4", "origin/master", "v1.4.6", "origin/v1.5", "origin/v1.3"},
77+
branches: []string{"origin/v1.9", "origin/master", "v1.9.6", "origin/v1.10", "origin/v1.8"},
7878
versionsInfo: types.VersionsInformation{
79-
Current: "v1.5",
80-
Latest: "v1.4.6",
79+
Current: "v1.10",
80+
Latest: "v1.9.6",
8181
Experimental: "master",
8282
},
8383
jsTemplate: func() string {
@@ -91,10 +91,10 @@ var foo = [
9191
},
9292
{
9393
desc: "traefik-menu.js.gotmpl - obsolete",
94-
branches: []string{"origin/v1.4", "origin/master", "v1.4.6", "origin/v1.5", "origin/v1.3"},
94+
branches: []string{"origin/v1.9", "origin/master", "v1.9.6", "origin/v1.10", "origin/v1.8"},
9595
versionsInfo: types.VersionsInformation{
96-
Current: "v1.3",
97-
Latest: "v1.4.6",
96+
Current: "v1.8",
97+
Latest: "v1.9.6",
9898
Experimental: "master",
9999
},
100100
jsTemplate: func() string {
@@ -145,13 +145,7 @@ func Test_buildVersions(t *testing.T) {
145145
latestTagName: "v1.4.6",
146146
currentVersion: "v1.4",
147147
expected: []optionVersion{
148-
{
149-
Path: "",
150-
Text: "v1.4 Latest",
151-
Name: "v1.4",
152-
State: stateLatest,
153-
Selected: true,
154-
},
148+
{Path: "", Text: "v1.4 Latest", Name: "v1.4", State: stateLatest, Selected: true},
155149
},
156150
},
157151
{
@@ -161,20 +155,8 @@ func Test_buildVersions(t *testing.T) {
161155
experimentalBranchName: "master",
162156
currentVersion: "v1.4",
163157
expected: []optionVersion{
164-
{
165-
Path: "",
166-
Text: "v1.4 Latest",
167-
Name: "v1.4",
168-
State: stateLatest,
169-
Selected: true,
170-
},
171-
{
172-
Path: "master",
173-
Text: "Experimental",
174-
Name: "master",
175-
State: stateExperimental,
176-
Selected: false,
177-
},
158+
{Path: "master", Text: "Experimental", Name: "master", State: stateExperimental, Selected: false},
159+
{Path: "", Text: "v1.4 Latest", Name: "v1.4", State: stateLatest, Selected: true},
178160
},
179161
},
180162
{
@@ -183,20 +165,8 @@ func Test_buildVersions(t *testing.T) {
183165
latestTagName: "v1.4.6",
184166
currentVersion: "v1.4",
185167
expected: []optionVersion{
186-
{
187-
Path: "",
188-
Text: "v1.4 Latest",
189-
Name: "v1.4",
190-
State: stateLatest,
191-
Selected: true,
192-
},
193-
{
194-
Path: "v1.5",
195-
Text: "v1.5 RC",
196-
Name: "v1.5",
197-
State: statePreFinalRelease,
198-
Selected: false,
199-
},
168+
{Path: "v1.5", Text: "v1.5 RC", Name: "v1.5", State: statePreFinalRelease, Selected: false},
169+
{Path: "", Text: "v1.4 Latest", Name: "v1.4", State: stateLatest, Selected: true},
200170
},
201171
},
202172
{
@@ -206,12 +176,7 @@ func Test_buildVersions(t *testing.T) {
206176
experimentalBranchName: "master",
207177
currentVersion: "v1.4",
208178
expected: []optionVersion{
209-
{
210-
Path: "v1.3",
211-
Text: "v1.3",
212-
Name: "v1.3",
213-
Selected: false,
214-
},
179+
{Path: "v1.3", Text: "v1.3", Name: "v1.3", Selected: false},
215180
},
216181
},
217182
{
@@ -221,46 +186,38 @@ func Test_buildVersions(t *testing.T) {
221186
experimentalBranchName: "master",
222187
currentVersion: "v1.4",
223188
expected: []optionVersion{
224-
{
225-
Path: "",
226-
Text: "v1.4 Latest",
227-
Name: "v1.4",
228-
State: stateLatest,
229-
Selected: true,
230-
},
231-
{
232-
Path: "master",
233-
Text: "Experimental",
234-
Name: "master",
235-
State: stateExperimental,
236-
Selected: false,
237-
},
238-
{
239-
Path: "v1.5",
240-
Text: "v1.5 RC",
241-
Name: "v1.5",
242-
State: statePreFinalRelease,
243-
Selected: false,
244-
},
245-
{
246-
Path: "v1.3",
247-
Text: "v1.3",
248-
Name: "v1.3",
249-
State: stateObsolete,
250-
Selected: false,
251-
},
189+
{Path: "master", Text: "Experimental", Name: "master", State: stateExperimental, Selected: false},
190+
{Path: "v1.5", Text: "v1.5 RC", Name: "v1.5", State: statePreFinalRelease, Selected: false},
191+
{Path: "", Text: "v1.4 Latest", Name: "v1.4", State: stateLatest, Selected: true},
192+
{Path: "v1.3", Text: "v1.3", Name: "v1.3", State: stateObsolete, Selected: false},
252193
},
253194
},
254195
{
255-
desc: "all v2",
196+
desc: "all with obsolete",
256197
branches: []string{"origin/v2.9", "origin/v2.8", "origin/master", "origin/v1.7", "v1.4.6", "origin/v1.4"},
257198
latestTagName: "v2.9.0",
258199
experimentalBranchName: "master",
259200
currentVersion: "v1.4",
260201
expected: []optionVersion{
202+
{Path: "master", Text: "Experimental", Name: "master", State: "EXPERIMENTAL", Selected: false},
261203
{Path: "", Text: "v2.9 Latest", Name: "v2.9", State: "LATEST", Selected: false},
262204
{Path: "v2.8", Text: "v2.8", Name: "v2.8", State: stateObsolete, Selected: false},
205+
{Path: "v1.7", Text: "v1.7", Name: "v1.7", State: "", Selected: false},
206+
{Path: "v1.4.6", Text: "v1.4.6", Name: "v1.4.6", State: stateObsolete, Selected: false},
207+
{Path: "v1.4", Text: "v1.4", Name: "v1.4", State: stateObsolete, Selected: true},
208+
},
209+
},
210+
{
211+
desc: "minor version with 2 digits",
212+
branches: []string{"origin/v2.9", "origin/v2.8", "origin/v2.10", "origin/master", "origin/v1.7", "v1.4.6", "origin/v1.4"},
213+
latestTagName: "v2.9.0",
214+
experimentalBranchName: "master",
215+
currentVersion: "v1.4",
216+
expected: []optionVersion{
263217
{Path: "master", Text: "Experimental", Name: "master", State: "EXPERIMENTAL", Selected: false},
218+
{Path: "v2.10", Text: "v2.10 RC", Name: "v2.10", State: statePreFinalRelease, Selected: false},
219+
{Path: "", Text: "v2.9 Latest", Name: "v2.9", State: "LATEST", Selected: false},
220+
{Path: "v2.8", Text: "v2.8", Name: "v2.8", State: stateObsolete, Selected: false},
264221
{Path: "v1.7", Text: "v1.7", Name: "v1.7", State: "", Selected: false},
265222
{Path: "v1.4.6", Text: "v1.4.6", Name: "v1.4.6", State: stateObsolete, Selected: false},
266223
{Path: "v1.4", Text: "v1.4", Name: "v1.4", State: stateObsolete, Selected: true},

0 commit comments

Comments
 (0)