59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
var supportedCommands = []string{"run", "run-stage", "analyze", "publish", "clean", "session"}
|
|
|
|
// Execute dispatches CLI commands and returns a process exit code.
|
|
func Execute(args []string, stdout, stderr io.Writer) int {
|
|
if len(args) == 0 {
|
|
printUsage(stderr)
|
|
return 1
|
|
}
|
|
|
|
ctx := context.Background()
|
|
cmd := args[0]
|
|
cmdArgs := args[1:]
|
|
|
|
var err error
|
|
switch cmd {
|
|
case "run":
|
|
err = Run(ctx, cmdArgs, stdout)
|
|
case "run-stage":
|
|
err = RunStage(ctx, cmdArgs, stdout)
|
|
case "analyze":
|
|
err = Analyze(ctx, cmdArgs, stdout)
|
|
case "publish":
|
|
err = Publish(ctx, cmdArgs, stdout)
|
|
case "session":
|
|
err = Session(ctx, cmdArgs, stdout)
|
|
case "clean":
|
|
err = Clean(ctx, cmdArgs, stdout)
|
|
default:
|
|
fmt.Fprintf(stderr, "unknown command: %q\n\n", cmd)
|
|
printUsage(stderr)
|
|
return 1
|
|
}
|
|
|
|
if err != nil {
|
|
fmt.Fprintf(stderr, "%v\n", err)
|
|
return 1
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
func printUsage(w io.Writer) {
|
|
fmt.Fprintf(w, "Usage: narratio <%s>\n", strings.Join(supportedCommands, "|"))
|
|
}
|
|
|
|
func placeholder(out io.Writer, command string) error {
|
|
_, err := fmt.Fprintf(out, "narratio %s: not yet implemented\n", command)
|
|
return err
|
|
}
|