feat: finish initialize, needs better logs

This commit is contained in:
Allyedge
2022-05-31 19:05:45 +02:00
parent e7abf64230
commit d45f3e04e2
4 changed files with 145 additions and 35 deletions

112
pkg/initialize/generate.go Normal file
View 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
}
}

View File

@@ -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)
}

View File

@@ -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
View 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
}