feat: support version flag

This commit is contained in:
Lea Anthony
2019-05-12 12:59:35 +10:00
parent 538f5c6501
commit 77142bd99e

View File

@@ -12,15 +12,17 @@ import (
func init() {
var prereleaseRequired bool
var specificVersion string
// var forceRebuild = false
checkSpinner := spinner.NewSpinner()
checkSpinner.SetSpinSpeed(50)
commandDescription := `This command allows you to update your version of Wails.`
updateCmd := app.Command("update", "Check for Updates.").
updateCmd := app.Command("update", "Update to newer [pre]releases or specific versions").
LongDescription(commandDescription).
BoolFlag("pre", "Update to latest Prerelease", &prereleaseRequired)
BoolFlag("pre", "Update to latest Prerelease", &prereleaseRequired).
StringFlag("version", "Install a specific version (Overrides other flags)", &specificVersion)
updateCmd.Action(func() error {
@@ -34,11 +36,24 @@ func init() {
github := cmd.NewGitHubHelper()
var desiredVersion *cmd.SemanticVersion
var err error
var valid bool
if prereleaseRequired {
desiredVersion, err = github.GetLatestPreRelease()
if len(specificVersion) > 0 {
// Check if this is a valid version
valid, err = github.IsValidTag(specificVersion)
if err == nil {
if !valid {
err = fmt.Errorf("version '%s' is invalid", specificVersion)
} else {
desiredVersion, err = cmd.NewSemanticVersion(specificVersion)
}
}
} else {
desiredVersion, err = github.GetLatestStableRelease()
if prereleaseRequired {
desiredVersion, err = github.GetLatestPreRelease()
} else {
desiredVersion, err = github.GetLatestStableRelease()
}
}
if err != nil {
checkSpinner.Error(err.Error())
@@ -47,43 +62,69 @@ func init() {
checkSpinner.Success()
fmt.Println()
fmt.Println(" Current Version : " + cmd.Version)
if prereleaseRequired {
fmt.Printf(" Latest Prerelease : v%s\n", desiredVersion)
fmt.Println(" Current Version : " + cmd.Version)
if len(specificVersion) > 0 {
fmt.Printf(" Desired Version : v%s\n", desiredVersion)
} else {
fmt.Printf(" Latest Release : v%s\n", desiredVersion)
if prereleaseRequired {
fmt.Printf(" Latest Prerelease : v%s\n", desiredVersion)
} else {
fmt.Printf(" Latest Release : v%s\n", desiredVersion)
}
}
return updateToVersion(desiredVersion)
return updateToVersion(desiredVersion, len(specificVersion) > 0)
})
}
func updateToVersion(version *cmd.SemanticVersion) error {
func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error {
// Early exit
if version.String() == cmd.Version {
if targetVersion.String() == cmd.Version {
logger.Green("Looks like you're up to date!")
return nil
}
compareVersion := cmd.Version
if version.IsPreRelease() {
compareVersion += "-0"
var desiredVersion string
if !force {
compareVersion := cmd.Version
currentVersion, err := cmd.NewSemanticVersion(compareVersion)
if err != nil {
return err
}
// Release -> Pre-Release = Massage current version to prerelease format
if targetVersion.IsPreRelease() && currentVersion.IsRelease() {
currentVersion, err = cmd.NewSemanticVersion(compareVersion + "-0")
if err != nil {
return err
}
}
// Pre-Release -> Release = Massage target version to prerelease format
if targetVersion.IsRelease() && currentVersion.IsPreRelease() {
targetVersion, err = cmd.NewSemanticVersion(targetVersion.String() + "-0")
if err != nil {
return err
}
}
desiredVersion = "v" + targetVersion.String()
// Compare
success, err := targetVersion.IsGreaterThan(currentVersion)
if !success {
logger.Red("The requested version is lower than the current version.")
logger.Red("If this is what you really want to do, use `wails update -version %s`", desiredVersion)
return nil
}
} else {
desiredVersion = "v" + targetVersion.String()
}
currentVersion, err := cmd.NewSemanticVersion(compareVersion)
if err != nil {
return err
}
// Compare
success, err := version.IsGreaterThan(currentVersion)
if !success {
logger.Red("The requested version is lower than the current version. Aborting.")
return nil
}
desiredVersion := "v" + version.String()
fmt.Println()
updateSpinner := spinner.NewSpinner()
updateSpinner.SetSpinSpeed(40)