...
1
2
3
4 package main
5
6 import (
7 "errors"
8 "fmt"
9 "os"
10 "os/exec"
11 "time"
12
13 "github.com/magefile/mage/mg"
14 )
15
16 var (
17
18
19 Default = Build
20 app string = "tar-split"
21 Stdout = ourStdout
22 Stderr = ourStderr
23
24 golangcilintVersion = "v1.51.2"
25
26 cleanFiles = []string{}
27 )
28
29
30 func All() error {
31 mg.Deps(Vet)
32 mg.Deps(Test)
33 mg.Deps(Build)
34 mg.Deps(Lint)
35 return nil
36 }
37
38
39 func Build() error {
40 mg.Deps(InstallDeps)
41 fmt.Println("Building...")
42 cmd := exec.Command("go", "build", "-v", "-o", app, "./cmd/tar-split")
43 cmd.Stdout = Stdout
44 cmd.Stderr = Stderr
45 return cmd.Run()
46 }
47
48
49 func Vet() error {
50 fmt.Println("go vet...")
51 cmd := exec.Command("go", "vet", "./...")
52 cmd.Stdout = Stdout
53 cmd.Stderr = Stderr
54 return cmd.Run()
55 }
56
57
58 func Lint() error {
59 mg.Deps(InstallToolsLint)
60 fmt.Println("Linting...")
61 cmd := exec.Command("golangci-lint", "run")
62 cmd.Stdout = Stdout
63 cmd.Stderr = Stderr
64 return cmd.Run()
65 }
66
67
68 func Test() error {
69 fmt.Println("Testing...")
70 cmd := exec.Command("go", "test", "-cover", "-v", "-bench", "'.'", "-benchmem", "./...")
71 cmd.Stdout = Stdout
72 cmd.Stderr = Stderr
73 return cmd.Run()
74 }
75
76
77 func Install() error {
78 mg.Deps(Build)
79 fmt.Println("Installing...")
80 return os.Rename(app, "/usr/local/bin/"+app)
81 }
82
83 func init() {
84 cleanFiles = append(cleanFiles, ".install.deps")
85 }
86
87
88 func InstallDeps() error {
89 const fpath = ".install.deps"
90 success := false
91 defer func() {
92 if success {
93 fd, err := os.Create(fpath)
94 if err != nil {
95 fmt.Fprintln(os.Stderr, err)
96 }
97 fd.Close()
98 }
99 }()
100 if IsFresh(fpath, time.Now()) {
101 return nil
102 }
103
104 mg.Deps(Tidy)
105 fmt.Println("Installing Deps...")
106 cmd := exec.Command("go", "get", "./...")
107 cmd.Stdout = Stdout
108 cmd.Stderr = Stderr
109 err := cmd.Run()
110 if err != nil {
111 return err
112 }
113 success = true
114 return nil
115 }
116
117
118 func InstallTools() error {
119 mg.Deps(InstallToolsLint)
120 return nil
121 }
122
123 func InstallToolsLint() error {
124 fmt.Println("Installing Deps...")
125 cmd := exec.Command("go", "install", "github.com/golangci/golangci-lint/cmd/golangci-lint@"+golangcilintVersion)
126 cmd.Stdout = Stdout
127 cmd.Stderr = Stderr
128 return cmd.Run()
129 }
130
131
132 func Tidy() error {
133 fmt.Println("Tidy up...")
134 cmd := exec.Command("go", "mod", "tidy")
135 cmd.Stdout = Stdout
136 cmd.Stderr = Stderr
137 return cmd.Run()
138 }
139
140
141 func Clean() {
142 fmt.Println("Cleaning...")
143 os.RemoveAll(app)
144 for _, fpath := range cleanFiles {
145 os.RemoveAll(fpath)
146 }
147 }
148
149
150
151 func IsFresh(fpath string, t time.Time) bool {
152 fi, err := os.Stat(fpath)
153 if err != nil && errors.Is(err, os.ErrNotExist) {
154 return false
155 }
156 return fi.ModTime().Before(t)
157 }
158
View as plain text