-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
122 lines (106 loc) · 3.15 KB
/
main.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
package main
import (
"flag"
"fmt"
"os"
"os/exec"
"runtime"
"strings"
"github.com/solrac97gr/go-start/files"
"github.com/solrac97gr/go-start/folders"
"github.com/solrac97gr/go-start/generator"
"github.com/solrac97gr/go-start/utils"
)
var option *string
func init() {
option = flag.String("flow", "default", "select the generator you wanna run")
}
func main() {
flag.Parse()
fd := folders.NewFolderService()
fl := files.NewFilesService()
gn := generator.NewGeneratorService(fl, fd)
flow(*option, fd, fl, gn)
}
func flow(flow string, fd *folders.FoldersService, fl *files.FilesService, gn *generator.GeneratorService) {
switch flow {
case "default":
defaultFlow(fd, fl)
case "app":
addAppFlow(gn)
}
}
func defaultFlow(fd *folders.FoldersService, fl *files.FilesService) {
fmt.Println("Welcome to the project generator")
var projectName string
fmt.Println("Enter the project name 📁: ")
fmt.Scanln(&projectName)
if projectName == "" {
panic("Project name cannot be empty")
}
var githubUsername string
fmt.Println("Enter the github username 🖥️: ")
fmt.Scanln(&githubUsername)
if githubUsername == "" {
panic("Github username cannot be empty")
}
// Get the list of subapps
var subAppsNames string
fmt.Println("Enter the subapps names separated by comma 📦: ")
fmt.Scanln(&subAppsNames)
if subAppsNames == "" {
panic("Subapps names cannot be empty")
}
// remove empty spaces from the subAppsNames
subAppsNames = strings.TrimSpace(subAppsNames)
// Get the list of subAppsNames
subAppsNamesList := strings.Split(subAppsNames, ",")
// Print the project name and github Username
fmt.Println("Project Name: ", projectName)
fmt.Println("Github Username: ", githubUsername)
// Print the list of subAppsNamesList
fmt.Println("SubApps Names: ", subAppsNamesList)
if err := fd.CreateFolderStructure(projectName, subAppsNamesList); err != nil {
fd.RemoveFolder(projectName)
panic(err)
}
majorMinor := strings.Split(strings.TrimPrefix(runtime.Version(), "go"), ".")
goVersion := majorMinor[0] + "." + majorMinor[1]
if err := fl.CreateFilesStructure(githubUsername, projectName, goVersion, subAppsNamesList); err != nil {
panic(err)
}
fmt.Println("Project structure created successfully")
// Execute the go mod download
os.Chdir(projectName)
fmt.Println("Downloading dependencies 📥")
cmdGoModDownload := exec.Command("go", "mod", "download")
cmdGoModTidy := exec.Command("go", "mod", "tidy")
cmdGitInit := exec.Command("git", "init")
cmdGoModDownload.Stdout = os.Stdout
cmdGoModTidy.Stdout = os.Stdout
cmdGitInit.Stdout = os.Stdout
cmdGoModDownload.Stderr = os.Stderr
cmdGoModTidy.Stderr = os.Stderr
cmdGitInit.Stderr = os.Stderr
if err := cmdGoModDownload.Run(); err != nil {
panic(err)
}
if err := cmdGoModTidy.Run(); err != nil {
panic(err)
}
fmt.Println("Initializing Repository 🛸")
if err := cmdGitInit.Run(); err != nil {
panic(err)
}
}
func addAppFlow(gn *generator.GeneratorService) {
var appName string
fmt.Println("Enter the app name 📁: ")
fmt.Scanln(&appName)
if appName == "" {
panic("app name cannot be empty")
}
if err := gn.GenerateNewApp(utils.Lowercase(appName)); err != nil {
panic(err)
}
}