mirror of
https://github.com/sern-handler/cli
synced 2026-06-28 02:32:20 +00:00
feat: finish initialize, needs better logs
This commit is contained in:
112
pkg/initialize/generate.go
Normal file
112
pkg/initialize/generate.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package initialize
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
"github.com/sern-handler/cli/pkg/util"
|
||||
)
|
||||
|
||||
func cloneRepository(name string, language string) {
|
||||
if _, err := os.Stat(name); os.IsExist(err) {
|
||||
fmt.Println(name + " already exists, can't initialize a new project.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
_, err := git.PlainClone("templates", false, &git.CloneOptions{
|
||||
URL: "https://github.com/sern-handler/templates",
|
||||
Progress: os.Stdout,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the template, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
err = os.Rename("templates/templates/"+strings.ToLower(language), name)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the template, exiting.")
|
||||
}
|
||||
|
||||
err = os.RemoveAll("templates")
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func renameFolders(name string, main string, commands string) {
|
||||
if main != "src" {
|
||||
err := os.Rename(name+"/src", name+"/"+main)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't rename the main folder, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if commands != "commands" {
|
||||
err := os.Rename(name+"/"+main+"/commands", name+"/"+main+"/"+commands)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't rename the commands folder, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func installDependencies(name string, packageManager string) {
|
||||
err := os.Chdir(name)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't change to the project's directory, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
packageManagers := util.CheckPackageManagers()
|
||||
|
||||
if packageManager == "npm" && packageManagers.NPM {
|
||||
err := exec.Command("npm", "install").Run()
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the dependencies, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("Successfully installed the dependencies.")
|
||||
}
|
||||
|
||||
if packageManager == "yarn" && packageManagers.Yarn {
|
||||
err := exec.Command("yarn", "install").Run()
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the dependencies, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("Successfully installed the dependencies.")
|
||||
}
|
||||
|
||||
if packageManager == "skip" {
|
||||
fmt.Println("Skipping the installation of the dependencies.")
|
||||
}
|
||||
|
||||
err = os.Chdir("..")
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't change to the project's directory, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,6 @@ func Initialize() {
|
||||
Main string
|
||||
Commands string
|
||||
Prefix string
|
||||
Git bool
|
||||
Package string
|
||||
}{}
|
||||
|
||||
@@ -26,4 +25,8 @@ func Initialize() {
|
||||
}
|
||||
|
||||
cloneRepository(answers.Name, answers.Language)
|
||||
|
||||
renameFolders(answers.Name, answers.Main, answers.Commands)
|
||||
|
||||
installDependencies(answers.Name, answers.Package)
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
package initialize
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
)
|
||||
|
||||
func cloneRepository(name string, language string) {
|
||||
_, err := git.PlainClone("templates", false, &git.CloneOptions{
|
||||
URL: "https://github.com/sern-handler/templates",
|
||||
Progress: os.Stdout,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the template, exiting.")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
err = os.Rename("templates/templates/"+strings.ToLower(language), name)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Couldn't install the template, exiting.")
|
||||
}
|
||||
|
||||
err = os.RemoveAll("templates")
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
29
pkg/util/util.go
Normal file
29
pkg/util/util.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package util
|
||||
|
||||
import "os/exec"
|
||||
|
||||
type PackageManagers struct {
|
||||
NPM bool
|
||||
Yarn bool
|
||||
}
|
||||
|
||||
func CheckPackageManagers() PackageManagers {
|
||||
packageManagers := PackageManagers{
|
||||
NPM: false,
|
||||
Yarn: false,
|
||||
}
|
||||
|
||||
_, err := exec.LookPath("npm")
|
||||
|
||||
if err == nil {
|
||||
packageManagers.NPM = true
|
||||
}
|
||||
|
||||
_, err = exec.LookPath("yarn")
|
||||
|
||||
if err == nil {
|
||||
packageManagers.Yarn = true
|
||||
}
|
||||
|
||||
return packageManagers
|
||||
}
|
||||
Reference in New Issue
Block a user