91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"RenewCMS/api"
|
|
"RenewCMS/internal/domain/update"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
)
|
|
|
|
const (
|
|
enableCommand = "enable-browser-updates"
|
|
disableCommand = "disable-browser-updates"
|
|
applyCommand = "apply-update"
|
|
|
|
exitOK = 0
|
|
exitError = 1
|
|
exitUsage = 2
|
|
|
|
usageText = "usage: renewcms [--version]\n" +
|
|
" renewcms enable-browser-updates [--service NAME] [--binary PATH] [--data-dir DIR] [--port PORT]\n" +
|
|
" renewcms disable-browser-updates [--service NAME] [--data-dir DIR]\n" +
|
|
" renewcms apply-update --binary PATH --data-dir DIR [--service NAME] [--port PORT]"
|
|
|
|
applyNeedsFlagsMessage = "apply-update needs --binary and --data-dir."
|
|
)
|
|
|
|
func runCommand(args []string, stdout io.Writer, stderr io.Writer) int {
|
|
name, rest := args[0], args[1:]
|
|
switch name {
|
|
case enableCommand:
|
|
return withOptions(name, rest, stderr, func(options update.InstallOptions) int {
|
|
message, err := api.InitBrowserUpdateCommands().Enable.Enable(options)
|
|
return printOutcome(stdout, stderr, message, err)
|
|
})
|
|
case disableCommand:
|
|
return withOptions(name, rest, stderr, func(options update.InstallOptions) int {
|
|
message, err := api.InitBrowserUpdateCommands().Disable.Disable(options)
|
|
return printOutcome(stdout, stderr, message, err)
|
|
})
|
|
case applyCommand:
|
|
return withOptions(name, rest, stderr, func(options update.InstallOptions) int {
|
|
return apply(options, stderr)
|
|
})
|
|
}
|
|
fmt.Fprintln(stderr, usageText)
|
|
return exitUsage
|
|
}
|
|
|
|
func withOptions(name string, args []string, stderr io.Writer, run func(update.InstallOptions) int) int {
|
|
flags := flag.NewFlagSet(name, flag.ContinueOnError)
|
|
flags.SetOutput(stderr)
|
|
var options update.InstallOptions
|
|
flags.StringVar(&options.Service, "service", "", "systemd service name of RenewCMS")
|
|
flags.StringVar(&options.Binary, "binary", "", "path of the RenewCMS binary")
|
|
flags.StringVar(&options.DataDir, "data-dir", "", "directory that holds DB_FILE")
|
|
flags.StringVar(&options.Port, "port", "", "port RenewCMS listens on")
|
|
if err := flags.Parse(args); err != nil {
|
|
return exitUsage
|
|
}
|
|
return run(options)
|
|
}
|
|
|
|
func printOutcome(stdout io.Writer, stderr io.Writer, message string, err error) int {
|
|
if err != nil {
|
|
fmt.Fprintln(stderr, err)
|
|
return exitError
|
|
}
|
|
fmt.Fprintln(stdout, message)
|
|
return exitOK
|
|
}
|
|
|
|
func apply(options update.InstallOptions, stderr io.Writer) int {
|
|
if options.Binary == "" || options.DataDir == "" {
|
|
fmt.Fprintln(stderr, applyNeedsFlagsMessage)
|
|
return exitUsage
|
|
}
|
|
if options.Service == "" {
|
|
options.Service = update.DefaultService
|
|
}
|
|
if options.Port == "" {
|
|
options.Port = update.DefaultPort
|
|
}
|
|
if err := api.InitApplyUpdateCommand(options).Apply(); err != nil {
|
|
log.Printf("apply-update failed: %v", err)
|
|
return exitError
|
|
}
|
|
return exitOK
|
|
}
|