Files
go-omni/cmd/go-omni/upgrade.go

45 lines
1.1 KiB
Go

package main
import (
"errors"
"flag"
"fmt"
"git.yuntuo.hk/k2safe/go-omni/cmd/go-omni/apigen"
"io"
)
func runUpgrade(args []string) error {
flags := flag.NewFlagSet("upgrade", flag.ContinueOnError)
flags.SetOutput(io.Discard)
dir := flags.String("dir", ".", "service directory")
apply := flags.Bool("apply", false, "apply only recognized baseline changes")
preview := flags.String("preview", "", "write proposed infrastructure into an empty directory")
dry := flags.Bool("dry-run", false, "show the upgrade plan")
if err := flags.Parse(args); err != nil {
return err
}
if flags.NArg() != 0 {
return errors.New("unexpected upgrade argument")
}
if *apply && (*preview != "" || *dry) {
return errors.New("--apply cannot be combined with preview/dry-run")
}
var plan apigen.UpgradePlan
var err error
if *apply {
plan, err = apigen.ApplyUpgrade(*dir)
} else if *preview != "" {
plan, err = apigen.PreviewUpgrade(*dir, *preview)
} else {
plan, err = apigen.PlanUpgrade(*dir)
}
for _, c := range plan.Changes {
kind := "safe"
if c.Manual {
kind = "review"
}
fmt.Printf("%-6s %-6s %s\n", kind, c.Action, c.Path)
}
return err
}