/
models.go
79 lines (66 loc) · 1.35 KB
/
models.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"runtime"
"sort"
"github.com/blang/semver"
)
// deonload is information about the go distribution archive.
type download struct {
Os string
Arch string
URL string
}
// releases contains a list of downloads for a specific version
type release struct {
Version string
Downloads []download
}
// GetDownload returns the go vversion for the host system for download.
func (r *release) GetDownload() *download {
for _, v := range r.Downloads {
if v.Arch == runtime.GOARCH && v.Os == runtime.GOOS {
return &v
}
}
return nil
}
// releaseInfo tracks information about golang releases
type releaseInfo struct {
Version string
Releases releases
}
func (r *releaseInfo) Latest() string {
sort.Sort(r.Releases)
return r.Releases[0].Version
}
func (r *releaseInfo) Available() releases {
sort.Sort(r.Releases)
return r.Releases
}
func (r *releaseInfo) Find(ver string) *release {
for _, v := range r.Releases {
if v.Version == ver {
return v
}
}
return nil
}
type releases []*release
func (r releases) Len() int {
return len(r)
}
func (r releases) Less(i, j int) bool {
v1, err := semver.Parse(r[i].Version)
if err != nil {
panic(err)
}
v2, err := semver.Parse(r[j].Version)
if err != nil {
writeLn(r[j].Version)
panic(err)
}
return v1.LT(v2)
}
func (r releases) Swap(i, j int) {
r[i], r[j] = r[j], r[i]
}