mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 19:50:15 +08:00
Add verbose flag (#350)
* Implement verbose output Works for build and serve * Tidy go modules
This commit is contained in:
parent
7ae2acac90
commit
8d3c32c630
@ -36,16 +36,23 @@ func ValidateFrontendConfig(projectOptions *ProjectOptions) error {
|
||||
}
|
||||
|
||||
// InstallGoDependencies will run go get in the current directory
|
||||
func InstallGoDependencies() error {
|
||||
depSpinner := spinner.New("Ensuring Dependencies are up to date...")
|
||||
func InstallGoDependencies(verbose bool) error {
|
||||
var depSpinner *spinner.Spinner
|
||||
if !verbose {
|
||||
depSpinner = spinner.New("Ensuring Dependencies are up to date...")
|
||||
depSpinner.SetSpinSpeed(50)
|
||||
depSpinner.Start()
|
||||
err := NewProgramHelper().RunCommand("go get")
|
||||
}
|
||||
err := NewProgramHelper(verbose).RunCommand("go get")
|
||||
if err != nil {
|
||||
if !verbose {
|
||||
depSpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if !verbose {
|
||||
depSpinner.Success()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -62,7 +69,7 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
||||
}
|
||||
|
||||
// Check Mewn is installed
|
||||
err := CheckMewn()
|
||||
err := CheckMewn(projectOptions.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -73,9 +80,14 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
||||
compileMessage += " (Debug Mode)"
|
||||
}
|
||||
|
||||
packSpinner := spinner.New(compileMessage + "...")
|
||||
var packSpinner *spinner.Spinner
|
||||
if !projectOptions.Verbose {
|
||||
packSpinner = spinner.New(compileMessage + "...")
|
||||
packSpinner.SetSpinSpeed(50)
|
||||
packSpinner.Start()
|
||||
} else {
|
||||
println(compileMessage)
|
||||
}
|
||||
|
||||
buildCommand := slicer.String()
|
||||
buildCommand.Add("mewn")
|
||||
@ -131,12 +143,16 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
||||
}
|
||||
|
||||
buildCommand.AddSlice([]string{"-ldflags", ldflags})
|
||||
err = NewProgramHelper().RunCommandArray(buildCommand.AsSlice())
|
||||
err = NewProgramHelper(projectOptions.Verbose).RunCommandArray(buildCommand.AsSlice())
|
||||
if err != nil {
|
||||
if packSpinner != nil {
|
||||
packSpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if packSpinner != nil {
|
||||
packSpinner.Success()
|
||||
}
|
||||
|
||||
// packageApp
|
||||
if packageApp {
|
||||
@ -160,46 +176,69 @@ func PackageApplication(projectOptions *ProjectOptions) error {
|
||||
}
|
||||
message = "Generating resource bundle"
|
||||
}
|
||||
packageSpinner := spinner.New(message)
|
||||
var packageSpinner *spinner.Spinner
|
||||
if projectOptions.Verbose {
|
||||
packageSpinner = spinner.New(message)
|
||||
packageSpinner.SetSpinSpeed(50)
|
||||
packageSpinner.Start()
|
||||
}
|
||||
err := NewPackageHelper().Package(projectOptions)
|
||||
if err != nil {
|
||||
if packageSpinner != nil {
|
||||
packageSpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if packageSpinner != nil {
|
||||
packageSpinner.Success()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// BuildFrontend runs the given build command
|
||||
func BuildFrontend(buildCommand string) error {
|
||||
buildFESpinner := spinner.New("Building frontend...")
|
||||
func BuildFrontend(projectOptions *ProjectOptions) error {
|
||||
var buildFESpinner *spinner.Spinner
|
||||
if !projectOptions.Verbose {
|
||||
buildFESpinner = spinner.New("Building frontend...")
|
||||
buildFESpinner.SetSpinSpeed(50)
|
||||
buildFESpinner.Start()
|
||||
err := NewProgramHelper().RunCommand(buildCommand)
|
||||
} else {
|
||||
println("Building frontend...")
|
||||
}
|
||||
err := NewProgramHelper(projectOptions.Verbose).RunCommand(projectOptions.FrontEnd.Build)
|
||||
if err != nil {
|
||||
if buildFESpinner != nil {
|
||||
buildFESpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if buildFESpinner != nil {
|
||||
buildFESpinner.Success()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CheckMewn checks if mewn is installed and if not, attempts to fetch it
|
||||
func CheckMewn() (err error) {
|
||||
programHelper := NewProgramHelper()
|
||||
func CheckMewn(verbose bool) (err error) {
|
||||
programHelper := NewProgramHelper(verbose)
|
||||
if !programHelper.IsInstalled("mewn") {
|
||||
buildSpinner := spinner.New()
|
||||
var buildSpinner *spinner.Spinner
|
||||
if !verbose {
|
||||
buildSpinner = spinner.New()
|
||||
buildSpinner.SetSpinSpeed(50)
|
||||
buildSpinner.Start("Installing Mewn asset packer...")
|
||||
}
|
||||
err := programHelper.InstallGoPackage("github.com/leaanthony/mewn/cmd/mewn")
|
||||
if err != nil {
|
||||
if buildSpinner != nil {
|
||||
buildSpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if buildSpinner != nil {
|
||||
buildSpinner.Success()
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -225,9 +264,14 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
||||
}
|
||||
|
||||
// Check if frontend deps have been updated
|
||||
feSpinner := spinner.New("Ensuring frontend dependencies are up to date (This may take a while)")
|
||||
var feSpinner *spinner.Spinner
|
||||
if !projectOptions.Verbose {
|
||||
feSpinner = spinner.New("Ensuring frontend dependencies are up to date (This may take a while)")
|
||||
feSpinner.SetSpinSpeed(50)
|
||||
feSpinner.Start()
|
||||
} else {
|
||||
println("Ensuring frontend dependencies are up to date (This may take a while)")
|
||||
}
|
||||
|
||||
requiresNPMInstall := true
|
||||
|
||||
@ -259,7 +303,11 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
||||
if savedMD5sum == packageJSONMD5 {
|
||||
// Same - no need for reinstall
|
||||
requiresNPMInstall = false
|
||||
if feSpinner != nil {
|
||||
feSpinner.Success("Skipped frontend dependencies (-f to force rebuild)")
|
||||
} else {
|
||||
println("Skipped frontend dependencies (-f to force rebuild)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -268,12 +316,16 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
||||
// Different? Build
|
||||
if requiresNPMInstall || forceRebuild {
|
||||
// Install dependencies
|
||||
err = NewProgramHelper().RunCommand(projectOptions.FrontEnd.Install)
|
||||
err = NewProgramHelper(projectOptions.Verbose).RunCommand(projectOptions.FrontEnd.Install)
|
||||
if err != nil {
|
||||
if feSpinner != nil {
|
||||
feSpinner.Error()
|
||||
}
|
||||
return err
|
||||
}
|
||||
if feSpinner != nil {
|
||||
feSpinner.Success()
|
||||
}
|
||||
|
||||
// Update md5sum file
|
||||
ioutil.WriteFile(md5sumFile, []byte(packageJSONMD5), 0644)
|
||||
@ -286,7 +338,7 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
||||
}
|
||||
|
||||
// Build frontend
|
||||
err = BuildFrontend(projectOptions.FrontEnd.Build)
|
||||
err = BuildFrontend(projectOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cmd
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -12,13 +13,21 @@ import (
|
||||
// ProgramHelper - Utility functions around installed applications
|
||||
type ProgramHelper struct {
|
||||
shell *ShellHelper
|
||||
verbose bool
|
||||
}
|
||||
|
||||
// NewProgramHelper - Creates a new ProgramHelper
|
||||
func NewProgramHelper() *ProgramHelper {
|
||||
return &ProgramHelper{
|
||||
func NewProgramHelper(verbose ...bool) *ProgramHelper {
|
||||
result := &ProgramHelper{
|
||||
shell: NewShellHelper(),
|
||||
}
|
||||
if len(verbose) > 0 {
|
||||
result.verbose = verbose[0]
|
||||
if result.verbose {
|
||||
result.shell.SetVerbose()
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// IsInstalled tries to determine if the given binary name is installed
|
||||
@ -31,6 +40,7 @@ func (p *ProgramHelper) IsInstalled(programName string) bool {
|
||||
type Program struct {
|
||||
Name string `json:"name"`
|
||||
Path string `json:"path"`
|
||||
verbose bool
|
||||
}
|
||||
|
||||
// FindProgram attempts to find the given program on the system.FindProgram
|
||||
@ -47,6 +57,7 @@ func (p *ProgramHelper) FindProgram(programName string) *Program {
|
||||
return &Program{
|
||||
Name: programName,
|
||||
Path: path,
|
||||
verbose: p.verbose,
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,12 +74,18 @@ func (p *Program) Run(vars ...string) (stdout, stderr string, exitCode int, err
|
||||
return "", "", 1, err
|
||||
}
|
||||
cmd := exec.Command(command, vars...)
|
||||
if !p.verbose {
|
||||
var stdo, stde bytes.Buffer
|
||||
cmd.Stdout = &stdo
|
||||
cmd.Stderr = &stde
|
||||
err = cmd.Run()
|
||||
stdout = string(stdo.Bytes())
|
||||
stderr = string(stde.Bytes())
|
||||
} else {
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/questions/10385551/get-exit-code-go
|
||||
if err != nil {
|
||||
|
@ -158,6 +158,7 @@ type ProjectOptions struct {
|
||||
selectedTemplate *TemplateDetails
|
||||
WailsVersion string
|
||||
typescriptDefsFilename string
|
||||
Verbose bool `json:"-"`
|
||||
}
|
||||
|
||||
// Defaults sets the default project template
|
||||
|
18
cmd/shell.go
18
cmd/shell.go
@ -8,6 +8,7 @@ import (
|
||||
|
||||
// ShellHelper helps with Shell commands
|
||||
type ShellHelper struct {
|
||||
verbose bool
|
||||
}
|
||||
|
||||
// NewShellHelper creates a new ShellHelper!
|
||||
@ -15,16 +16,27 @@ func NewShellHelper() *ShellHelper {
|
||||
return &ShellHelper{}
|
||||
}
|
||||
|
||||
// SetVerbose sets the verbose flag
|
||||
func (sh *ShellHelper) SetVerbose() {
|
||||
sh.verbose = true
|
||||
}
|
||||
|
||||
// Run the given command
|
||||
func (sh *ShellHelper) Run(command string, vars ...string) (stdout, stderr string, err error) {
|
||||
cmd := exec.Command(command, vars...)
|
||||
cmd.Env = append(os.Environ(), "GO111MODULE=on")
|
||||
if !sh.verbose {
|
||||
var stdo, stde bytes.Buffer
|
||||
cmd.Stdout = &stdo
|
||||
cmd.Stderr = &stde
|
||||
err = cmd.Run()
|
||||
stdout = string(stdo.Bytes())
|
||||
stderr = string(stde.Bytes())
|
||||
} else {
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -33,11 +45,17 @@ func (sh *ShellHelper) RunInDirectory(dir string, command string, vars ...string
|
||||
cmd := exec.Command(command, vars...)
|
||||
cmd.Dir = dir
|
||||
cmd.Env = append(os.Environ(), "GO111MODULE=on")
|
||||
if !sh.verbose {
|
||||
var stdo, stde bytes.Buffer
|
||||
cmd.Stdout = &stdo
|
||||
cmd.Stderr = &stde
|
||||
err = cmd.Run()
|
||||
stdout = string(stdo.Bytes())
|
||||
stderr = string(stde.Bytes())
|
||||
} else {
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ Create your first project by running 'wails init'.`
|
||||
}
|
||||
|
||||
// Check Mewn
|
||||
err = cmd.CheckMewn()
|
||||
err = cmd.CheckMewn(false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ func init() {
|
||||
var forceRebuild = false
|
||||
var debugMode = false
|
||||
var typescriptFilename = ""
|
||||
var verbose = false
|
||||
|
||||
buildSpinner := spinner.NewSpinner()
|
||||
buildSpinner.SetSpinSpeed(50)
|
||||
@ -24,6 +25,7 @@ func init() {
|
||||
BoolFlag("p", "Package application on successful build", &packageApp).
|
||||
BoolFlag("f", "Force rebuild of application components", &forceRebuild).
|
||||
BoolFlag("d", "Build in Debug mode", &debugMode).
|
||||
BoolFlag("verbose", "Verbose output", &verbose).
|
||||
StringFlag("t", "Generate Typescript definitions to given file (at runtime)", &typescriptFilename)
|
||||
|
||||
initCmd.Action(func() error {
|
||||
@ -40,6 +42,7 @@ func init() {
|
||||
|
||||
// Project options
|
||||
projectOptions := &cmd.ProjectOptions{}
|
||||
projectOptions.Verbose = verbose
|
||||
|
||||
// Check we are in project directory
|
||||
// Check project.json loads correctly
|
||||
@ -90,7 +93,7 @@ func init() {
|
||||
}
|
||||
|
||||
// Install dependencies
|
||||
err = cmd.InstallGoDependencies()
|
||||
err = cmd.InstallGoDependencies(projectOptions.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -10,12 +10,14 @@ import (
|
||||
func init() {
|
||||
|
||||
var forceRebuild = false
|
||||
var verbose = false
|
||||
buildSpinner := spinner.NewSpinner()
|
||||
buildSpinner.SetSpinSpeed(50)
|
||||
|
||||
commandDescription := `This command builds then serves your application in bridge mode. Useful for developing your app in a browser.`
|
||||
initCmd := app.Command("serve", "Run your Wails project in bridge mode").
|
||||
LongDescription(commandDescription).
|
||||
BoolFlag("verbose", "Verbose output", &verbose).
|
||||
BoolFlag("f", "Force rebuild of application components", &forceRebuild)
|
||||
|
||||
initCmd.Action(func() error {
|
||||
@ -25,13 +27,14 @@ func init() {
|
||||
fmt.Println()
|
||||
|
||||
// Check Mewn is installed
|
||||
err := cmd.CheckMewn()
|
||||
err := cmd.CheckMewn(verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Project options
|
||||
projectOptions := &cmd.ProjectOptions{}
|
||||
projectOptions.Verbose = verbose
|
||||
|
||||
// Check we are in project directory
|
||||
// Check project.json loads correctly
|
||||
@ -51,7 +54,7 @@ func init() {
|
||||
}
|
||||
|
||||
// Install dependencies
|
||||
err = cmd.InstallGoDependencies()
|
||||
err = cmd.InstallGoDependencies(projectOptions.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
3
go.mod
3
go.mod
@ -3,9 +3,6 @@ module github.com/wailsapp/wails
|
||||
require (
|
||||
github.com/Masterminds/semver v1.4.2
|
||||
github.com/abadojack/whatlanggo v1.0.1
|
||||
github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc // indirect
|
||||
github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac
|
||||
github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947 // indirect
|
||||
github.com/fatih/color v1.7.0
|
||||
github.com/go-playground/colors v1.2.0
|
||||
github.com/gorilla/websocket v1.4.0
|
||||
|
8
go.sum
8
go.sum
@ -7,12 +7,6 @@ github.com/abadojack/whatlanggo v1.0.1/go.mod h1:66WiQbSbJBIlOZMsvbKe5m6pzQovxCH
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc h1:VBS1z48BFEe00G81z8MKOtwX7f/ISkuH38NscT8iVPw=
|
||||
github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc/go.mod h1:ABJPuor7YlcsHmvJ1QxX38e2NcufLY3hm0yXv+cy9sI=
|
||||
github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac h1:DpMwFluHWoZpV9ex5XjkWO4HyCz5HLVI8XbHw0FhHi4=
|
||||
github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac/go.mod h1:XsAE+b4rOZc8gvgsgF+wU75mNBvBcyED1wdd9PBLlJ0=
|
||||
github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947 h1:Fm10/KNuoAyBm2P5P5H91Xy21hGcZnBdjR+cMdytv1M=
|
||||
github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947/go.mod h1:Dv9D0NUlAsaQcGQZa5kc5mqR9ua72SmA8VXi4cd+cBw=
|
||||
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/go-playground/colors v1.2.0 h1:0EdjTXKrr2g1L/LQTYtIqabeHpZuGZz1U4osS1T8+5M=
|
||||
@ -34,8 +28,6 @@ github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/leaanthony/mewn v0.10.7 h1:jCcNJyIUOpwj+I5SuATvCugDjHkoo+j6ubEOxxrxmPA=
|
||||
github.com/leaanthony/mewn v0.10.7/go.mod h1:CRkTx8unLiSSilu/Sd7i1LwrdaAL+3eQ3ses99qGMEQ=
|
||||
github.com/leaanthony/slicer v1.3.2 h1:kGWWFoyaY5WzwGrUsHXMmGbssuYthP4qYBNlkNpNAB8=
|
||||
github.com/leaanthony/slicer v1.3.2/go.mod h1:VMB/HGvr3uR3MRpFWHWAm0w+DHQLzPHYe2pKfpFlQIQ=
|
||||
github.com/leaanthony/slicer v1.4.0 h1:Q9u4w+UBU4WHjXnEDdz+eRLMKF/rnyosRBiqULnc1J8=
|
||||
github.com/leaanthony/slicer v1.4.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY=
|
||||
github.com/leaanthony/spinner v0.5.3 h1:IMTvgdQCec5QA4qRy0wil4XsRP+QcG1OwLWVK/LPZ5Y=
|
||||
|
Loading…
Reference in New Issue
Block a user