-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmagefile.go
170 lines (147 loc) · 3.99 KB
/
magefile.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
// +build mage
package main
import (
"errors"
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/magefile/mage/mg" // mg contains helpful utility functions, like Deps
"github.com/magefile/mage/sh"
)
// A build step that requires additional params, or platform specific steps for example
func BuildClient() error {
fmt.Println("running npm run build for client...")
os.Chdir("./remake-client")
defer os.Chdir("..")
err := sh.Run("npm", "run", "build")
return err
}
func InstallClient() error {
fmt.Println("running npm install for client...")
os.Chdir("./remake-client")
defer os.Chdir("..")
err := sh.Run("npm", "install")
return err
}
func StartProd() error {
var err error
// Check Lang Versions
mg.Deps(CheckLanguageVersion)
// Instal and Build Backend
mg.Deps(InstallBEDeps)
mg.Deps(BuildBackend)
// Instal and Build Frontend
mg.Deps(InstallClient)
mg.Deps(BuildClient)
// PostBuild
mg.Deps(PostBuild)
fmt.Println("Starting Prod...")
err = sh.Run("systemctl", "start", "remake-api")
err = sh.Run("caddy", "run", "--config", "./remake-client/Caddyfile")
return err
}
func Start() {
fmt.Println("Starting Prod for jonathandain.dev...")
mg.Deps(StopProd)
mg.Deps(Clean)
mg.Deps(StartProd)
}
func BuildBackend() error {
os.Chdir("./remake-backend")
defer os.Chdir("..")
fmt.Println("Building go backend for linux...")
// err := sh.Run("GOOS=linux", "GOARCH=amd64", "go", "build")
err := sh.Run("go", "build")
return err
}
// GOOS=linux GOARCH=amd64 go build
func PostBuild() error {
var err error
fmt.Println("moving robots.txt into build dir...")
err = sh.Run("cp", "-r", "./remake-client/robots.txt", "./remake-client/build/")
return err
}
func StopProd() error {
var err error
fmt.Println("Stopping Caddy...")
err = sh.Run("caddy", "stop")
fmt.Println("Stopping remake-api.service...")
err = sh.Run("systemctl", "stop", "remake-api")
return err
}
func Clean() error {
var err error
fmt.Println("Cleaning...")
fmt.Println("deleteing all node_modules and build dir from client...")
os.Chdir("./remake-client")
defer os.Chdir("..")
err = sh.Run("rm", "-rf", "node_modules")
err = sh.Run("rm", "-rf", "build")
// BACKEND
os.Chdir("../remake-backend")
err = sh.Run("rm", "-rf", "remake-backend")
return err
}
func CheckLanguageVersion() error {
rescueStdout := os.Stdout
r, w, _ := os.Pipe()
os.Stdout = w
sh.Run("node", "-v") // print node version to console
w.Close()
out, _ := ioutil.ReadAll(r)
os.Stdout = rescueStdout
input := string(out[1:]) // remove the v
input = strings.TrimSuffix(input, "\n") // remove the \n so the bytes are a match further down
b, err := ioutil.ReadFile(".tool-versions")
if err != nil {
fmt.Println("err reading .tool-versions", err)
return err
}
str := string(b)
s := strings.Fields(str)
fmt.Println("Checking Node Version for match with .tool-versions", s[1]+"=="+input+"?")
if s[1] != input {
fmt.Println("You need to change your language version before continuing...")
return errors.New("Cancel!")
}
return err
}
// A custom install step if you need your bin someplace other than go/bin
// func Install() error {
// mg.Deps(Build)
// fmt.Println("Installing...")
// return os.Rename("./MyApp", "/usr/bin/MyApp")
// }
// Install packages for client
func InstallDeps() error {
fmt.Println("Installing Deps for client...")
os.Chdir("./remake-client")
defer os.Chdir("..")
err := sh.Run("npm", "install")
return err
}
// Install packages for backend
func InstallBEDeps() error {
fmt.Println("Installing Deps for Backend...")
os.Chdir("./remake-backend")
defer os.Chdir("..")
err := sh.Run("go", "mod", "tidy")
return err
}
// Start Client Dev Server
func FEDev() error {
fmt.Println("Starting up client development server!")
os.Chdir("./remake-client")
defer os.Chdir("..")
err := sh.Run("npm", "run", "dev")
return err
}
// Start Backend Dev Server
func BEDev() error {
fmt.Println("Starting up backend development server!")
os.Chdir("./remake-backend")
defer os.Chdir("..")
err := sh.Run("air")
return err
}