From ea5e06aabd98ceb0c11f3da79fd45e74bcfba271 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 20 Dec 2018 06:58:55 +1100 Subject: [PATCH] feat: prerequisite checking (osx) --- cmd/prerequisites.go | 79 ++++++++++++++++++++++++++++++++++++++++++++ cmd/wails/0_setup.go | 50 ++++++++++++++-------------- 2 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 cmd/prerequisites.go diff --git a/cmd/prerequisites.go b/cmd/prerequisites.go new file mode 100644 index 000000000..bdc8c5731 --- /dev/null +++ b/cmd/prerequisites.go @@ -0,0 +1,79 @@ +package cmd + +import ( + "fmt" + "runtime" +) + +// binaryPrerequisite defines a binaryPrerequisite +type binaryPrerequisite struct { + Name string + Help string + Path string +} + +func newBinaryPrerequisite(name, help string) *binaryPrerequisite { + return &binaryPrerequisite{Name: name, Help: help} +} + +// binaryPrerequisites is a list of binaryPrerequisites +type binaryPrerequisites []*binaryPrerequisite + +// Add given prereq object to list +func (p *binaryPrerequisites) Add(prereq *binaryPrerequisite) { + *p = append(*p, prereq) +} + +func (p *binaryPrerequisites) check() (success *binaryPrerequisites, failed *binaryPrerequisites) { + success = &binaryPrerequisites{} + failed = &binaryPrerequisites{} + programHelper := NewProgramHelper() + for _, prereq := range *p { + bin := programHelper.FindProgram(prereq.Name) + if bin == nil { + failed.Add(prereq) + } else { + path, err := bin.GetFullPathToBinary() + if err != nil { + failed.Add(prereq) + } else { + prereq.Path = path + success.Add(prereq) + } + } + } + + return success, failed +} + +var platformbinaryPrerequisites = make(map[string]*binaryPrerequisites) + +func init() { + platformbinaryPrerequisites["darwin"] = &binaryPrerequisites{} + newDarwinbinaryPrerequisite("clang", "Please install with `xcode-select --install` and try again") +} + +func newDarwinbinaryPrerequisite(name, help string) { + prereq := newBinaryPrerequisite(name, help) + platformbinaryPrerequisites["darwin"].Add(prereq) +} + +func CheckBinaryPrerequisites() (*binaryPrerequisites, *binaryPrerequisites, error) { + platformPreReqs := platformbinaryPrerequisites[runtime.GOOS] + if platformPreReqs == nil { + return nil, nil, fmt.Errorf("Platform '%s' is not supported at this time", runtime.GOOS) + } + success, failed := platformPreReqs.check() + return success, failed, nil +} + +func CheckNonBinaryPrerequisites() error { + + var err error + + // Check non-binaries + if runtime.GOOS == "linux" { + + } + return err +} diff --git a/cmd/wails/0_setup.go b/cmd/wails/0_setup.go index 141c19506..27d0b118f 100644 --- a/cmd/wails/0_setup.go +++ b/cmd/wails/0_setup.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "runtime" "github.com/wailsapp/wails/cmd" @@ -22,36 +21,37 @@ func init() { return err } - var successMessage string - + var successMessage = `Ready for take off! +Create your first project by running 'wails init'.` + if runtime.GOOS != "windows" { + successMessage = "🚀 " + successMessage + } logger.Yellow("Checking for prerequisites...") // Check we have a cgo capable environment - programHelper := cmd.NewProgramHelper() - prerequisites := make(map[string]map[string]string) - prerequisites["darwin"] = make(map[string]string) - prerequisites["darwin"]["clang"] = "Please install with `xcode-select --install` and try again" - prerequisites["darwin"]["npm"] = "Please download and install npm + node from here: https://nodejs.org/en/" - switch runtime.GOOS { - case "darwin": - successMessage = "🚀 Awesome! We are going to the moon! 🚀" - default: - return fmt.Errorf("platform '%s' is unsupported at this time", runtime.GOOS) + + successDeps, failedDeps, err := cmd.CheckBinaryPrerequisites() + if err != nil { + return err } - errors := false - for name, help := range prerequisites[runtime.GOOS] { - bin := programHelper.FindProgram(name) - if bin == nil { - errors = true - logger.Red("Unable to find '%s' - %s", name, help) - } else { - logger.Green("Found program '%s' at '%s'", name, bin.Path) - } + for _, dep := range *successDeps { + logger.Green("Found '%s' at '%s'", dep.Name, dep.Path) } - if errors { - err = fmt.Errorf("There were missing dependencies") - } else { + logger.White("") + + for _, dep := range *failedDeps { + logger.Red("PreRequisite '%s' missing. %s", dep.Name, dep.Help) + } + + // Check non-binary prerequisites + err = cmd.CheckNonBinaryPrerequisites() + + if err != nil { + return err + } + + if len(*failedDeps) == 0 { logger.Yellow(successMessage) }