-
Notifications
You must be signed in to change notification settings - Fork 221
/
version.go
72 lines (59 loc) · 2.12 KB
/
version.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package cmd
import (
"context"
"fmt"
"path/filepath"
"runtime"
"github.com/spf13/cobra"
"github.com/superfly/flyctl/cmdctx"
"github.com/superfly/flyctl/flyctl"
"github.com/superfly/flyctl/flyname"
"github.com/superfly/flyctl/internal/client"
"github.com/superfly/flyctl/internal/update"
"github.com/superfly/flyctl/docstrings"
)
func newVersionCommand(client *client.Client) *Command {
versionStrings := docstrings.Get("version")
version := BuildCommandKS(nil, runVersion, versionStrings, client)
version.AddStringFlag(StringFlagOpts{
Name: "saveinstall",
Shorthand: "s",
Description: "Save parameter in config",
})
version.Flag("saveinstall").Hidden = true
updateStrings := docstrings.Get("version.update")
BuildCommandKS(version, runUpdate, updateStrings, client)
initStateCmd := BuildCommand(version, runInitState, "init-state", "init-state", "Initialize installation state", client)
initStateCmd.Hidden = true
initStateCmd.Args = cobra.ExactArgs(1)
return version
}
func runVersion(ctx *cmdctx.CmdContext) error {
saveInstall := ctx.Config.GetString("saveinstall")
if saveInstall != "" {
stateFilePath := filepath.Join(flyctl.ConfigDir(), "state.yml")
update.InitState(stateFilePath, saveInstall)
}
if ctx.OutputJSON() {
type flyctlBuild struct {
Name string
Version string
Commit string
BuildDate string
OS string
Architecture string
}
ctx.WriteJSON(flyctlBuild{Name: flyname.Name(), Version: flyctl.Version, Commit: flyctl.Commit, BuildDate: flyctl.BuildDate, OS: runtime.GOOS, Architecture: runtime.GOARCH})
} else {
fmt.Printf("%s v%s %s/%s Commit: %s BuildDate: %s\n", flyname.Name(), flyctl.Version, runtime.GOOS, runtime.GOARCH, flyctl.Commit, flyctl.BuildDate)
}
return nil
}
func runInitState(ctx *cmdctx.CmdContext) error {
stateFilePath := filepath.Join(flyctl.ConfigDir(), "state.yml")
return update.InitState(stateFilePath, ctx.Args[0])
}
func runUpdate(ctx *cmdctx.CmdContext) error {
stateFilePath := filepath.Join(flyctl.ConfigDir(), "state.yml")
return update.PerformInPlaceUpgrade(context.TODO(), stateFilePath, flyctl.Version)
}