mirror of
https://github.com/cubixle/tuukoti-cli.git
synced 2026-04-29 08:08:43 +01:00
start of creating a new project cmd
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
package maker
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func Project(fs fs.FS, name string) error {
|
||||
_, err := os.Stat(name)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
return fmt.Errorf("project folder already exists")
|
||||
}
|
||||
|
||||
absPath, err := filepath.Abs(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.Mkdir(absPath, 0777)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create the project folder, %w", err)
|
||||
}
|
||||
|
||||
err = makeProject(fs, absPath, name)
|
||||
if err != nil {
|
||||
rerr := os.RemoveAll(absPath)
|
||||
if rerr != nil {
|
||||
return rerr
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func makeProject(fs fs.FS, absPath, name string) error {
|
||||
// check if folder already exists
|
||||
err := mainfile(fs, absPath, name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = defaultHTTPRoutes(fs, absPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = defaultHomepage(fs, absPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = defaultConfig(fs, absPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func mainfile(fs fs.FS, path, projectName string) error {
|
||||
path = filepath.Join(path, "cmd", projectName)
|
||||
|
||||
err := os.MkdirAll(path, 0777)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.Create(filepath.Join(path, "main.go"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tmpl, err := fs.Open("templates/main.go")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(f, tmpl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// defaultHTTPRoutes will create a ./http dir with a http.go file.
|
||||
// In this file we will register 1 route and 2 route handlers.
|
||||
// The first handle is the home "/" handler.
|
||||
// The second handler is a 404 handler.
|
||||
func defaultHTTPRoutes(fs fs.FS, path string) error {
|
||||
path = filepath.Join(path, "internal", "http")
|
||||
|
||||
err := os.MkdirAll(path, 0777)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.Create(filepath.Join(path, "http.go"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tmpl, err := fs.Open("templates/http/http.go")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(f, tmpl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func defaultHomepage(fs fs.FS, path string) error {
|
||||
err := os.Mkdir(filepath.Join(path, "template"), 0777)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.Create(filepath.Join(path, "templates", "index.html"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tmpl, err := fs.Open("templates/index.html")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(f, tmpl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func defaultConfig(fs fs.FS, path string) error {
|
||||
f, err := os.Create(filepath.Join(path, "config.yml"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tmpl, err := fs.Open("templates/config.yml")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(f, tmpl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package maker
|
||||
|
||||
func Resource(name string) error {
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user