64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package command
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/packer/version"
|
|
)
|
|
|
|
// VersionCommand is a Command implementation prints the version.
|
|
type VersionCommand struct {
|
|
Meta
|
|
|
|
CheckFunc VersionCheckFunc
|
|
}
|
|
|
|
// VersionCheckFunc is the callback called by the Version command to
|
|
// check if there is a new version of Packer.
|
|
type VersionCheckFunc func() (VersionCheckInfo, error)
|
|
|
|
// VersionCheckInfo is the return value for the VersionCheckFunc callback
|
|
// and tells the Version command information about the latest version
|
|
// of Packer.
|
|
type VersionCheckInfo struct {
|
|
Outdated bool
|
|
Latest string
|
|
Alerts []string
|
|
}
|
|
|
|
func (c *VersionCommand) Help() string {
|
|
return "Prints the Packer version, and checks for new release."
|
|
}
|
|
|
|
func (c *VersionCommand) Run(args []string) int {
|
|
c.Ui.Machine("version", version.Version)
|
|
c.Ui.Machine("version-prelease", version.VersionPrerelease)
|
|
c.Ui.Machine("version-commit", version.GitCommit)
|
|
|
|
c.Ui.Say(fmt.Sprintf("Packer v%s", version.FormattedVersion()))
|
|
|
|
// If we have a version check function, then let's check for
|
|
// the latest version as well.
|
|
if c.CheckFunc != nil {
|
|
|
|
// Check the latest version
|
|
info, err := c.CheckFunc()
|
|
if err != nil {
|
|
c.Ui.Error(fmt.Sprintf(
|
|
"\nError checking latest version: %s", err))
|
|
}
|
|
if info.Outdated {
|
|
c.Ui.Say(fmt.Sprintf(
|
|
"\nYour version of Packer is out of date! The latest version\n"+
|
|
"is %s. You can update by downloading from www.packer.io/downloads.html",
|
|
info.Latest))
|
|
}
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
func (c *VersionCommand) Synopsis() string {
|
|
return "Prints the Packer version"
|
|
}
|