blob: 5c0dd3f7e4939b810cfbe7b551ac210633b8ce49 [file]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package meta
import (
"fmt"
"github.com/maruel/subcommands"
"go.chromium.org/luci/auth/client/authcli"
"infra/cmd/shivas/site"
"infra/libs/cipd"
)
// cipd reference tag for the dev version. Reference tag for prod version is prod.
var devVersionRefTag string = "latest"
// Update subcommand: Update shivas tool.
var Update = &subcommands.Command{
UsageLine: "upgrade", // we have a separate update cmd under UFS, so changing this to upgrade.
ShortDesc: "upgrade shivas",
LongDesc: `Upgrade shivas.
This is a thin wrapper around CIPD.`,
CommandRun: func() subcommands.CommandRun {
c := &updateRun{}
c.authFlags.Register(&c.Flags, site.DefaultAuthOptions)
c.Flags.BoolVar(&c.dev, "dev", false, "Upgrade to dev version")
return c
},
}
type updateRun struct {
subcommands.CommandRunBase
authFlags authcli.Flags
dev bool
}
func (c *updateRun) Run(a subcommands.Application, args []string, env subcommands.Env) int {
if err := c.innerRun(a, args, env); err != nil {
fmt.Fprintf(a.GetErr(), "%s: %s\n", a.GetName(), err)
return 1
}
return 0
}
func (c *updateRun) innerRun(a subcommands.Application, args []string, env subcommands.Env) error {
if c.dev {
if err := cipd.UpdatePackage(site.CipdInstalledPath, devVersionRefTag, a.GetOut(), a.GetErr()); err != nil {
return err
}
} else {
if err := cipd.UpdatePackageToProd(site.CipdInstalledPath, a.GetOut(), a.GetErr()); err != nil {
return err
}
}
fmt.Fprintf(a.GetErr(), "%s: You may need to run shivas login again after the upgrade\n", a.GetName())
fmt.Fprintf(a.GetErr(), "%s: Run shivas whoami to check login status\n", a.GetName())
return nil
}