github.com/gofiber/fiber-cli@v0.0.3/cmd/new.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 "github.com/spf13/cobra" 9 ) 10 11 var templateType string 12 13 func init() { 14 newCmd.Flags().StringVarP(&templateType, "template", "t", "basic", "basic|complex") 15 } 16 17 var newCmd = &cobra.Command{ 18 Use: "new PROJECT [module name]", 19 Aliases: []string{"n"}, 20 Short: "Generate a new fiber project", 21 Example: newExamples, 22 Args: cobra.MinimumNArgs(1), 23 RunE: newRunE, 24 } 25 26 func newRunE(cmd *cobra.Command, args []string) (err error) { 27 start := time.Now() 28 29 projectName := args[0] 30 modName := projectName 31 if len(args) > 1 { 32 modName = args[1] 33 } 34 35 wd, _ := os.Getwd() 36 projectPath := fmt.Sprintf("%s%c%s", wd, os.PathSeparator, projectName) 37 38 if err = createProject(projectPath); err != nil { 39 return 40 } 41 defer func() { 42 if err != nil { 43 _ = os.RemoveAll(projectPath) 44 } 45 }() 46 47 create := createBasic 48 if templateType != "basic" { 49 create = createComplex 50 } 51 52 defer func() { 53 if err == nil { 54 cmd.Printf(newSuccessTemplate, 55 projectPath, modName, projectName, formatLatency(time.Since(start))) 56 } 57 }() 58 59 return create(projectPath, modName) 60 } 61 62 func createProject(projectPath string) (err error) { 63 if err = os.Mkdir(projectPath, 0750); err != nil { 64 return 65 } 66 67 return os.Chdir(projectPath) 68 } 69 70 func createBasic(projectPath, modName string) (err error) { 71 // create main.go 72 if err = createFile(fmt.Sprintf("%s%cmain.go", projectPath, os.PathSeparator), newBasicTemplate); err != nil { 73 return 74 } 75 76 return runCmd(execCommand("go", "mod", "init", modName)) 77 } 78 79 const boilerPlateRepo = "https://github.com/gofiber/boilerplate" 80 81 func createComplex(projectPath, modName string) (err error) { 82 var git string 83 if git, err = execLookPath("git"); err != nil { 84 return 85 } 86 87 if err = runCmd(execCommand(git, "clone", boilerPlateRepo, projectPath)); err != nil { 88 return 89 } 90 91 if err = replace(projectPath, "go.mod", "boilerplate", modName); err != nil { 92 return 93 } 94 95 if err = replace(projectPath, "*.go", "boilerplate", modName); err != nil { 96 return 97 } 98 99 return 100 } 101 102 var ( 103 newExamples = ` fiber new fiber-demo 104 Generates a project with go module name fiber-demo 105 106 fiber new fiber-demo your.own/module/name 107 Specific the go module name 108 109 fiber new fiber-demo -t=complex 110 Generate a complex project` 111 112 newBasicTemplate = `package main 113 114 import ( 115 "log" 116 117 "github.com/gofiber/fiber/v2" 118 ) 119 120 func main() { 121 app := fiber.New() 122 123 app.Get("/", func(c *fiber.Ctx) error { 124 return c.SendString("Hello, World!") 125 }) 126 127 log.Fatal(app.Listen(":3000")) 128 }` 129 130 newSuccessTemplate = ` 131 Scaffolding project in %s (module %s) 132 133 Done. Now run: 134 135 cd %s 136 fiber dev 137 138 ✨ Done in %s. 139 ` 140 )