diff --git a/internal/cli/app.go b/internal/cli/app.go index fab4b29..10f0e08 100644 --- a/internal/cli/app.go +++ b/internal/cli/app.go @@ -44,6 +44,7 @@ func newApp() *cli.App { } app.Commands = append(app.Commands, beforeCommand(buildCommand, projectMustExist)) + app.Commands = append(app.Commands, beforeCommand(procedureCommand, projectMustExist)) app.Commands = append(app.Commands, beforeCommand(schedulerCommand, projectMustExist)) app.Commands = append(app.Commands, beforeCommand(serveCommand, projectMustExist)) app.Commands = append(app.Commands, beforeCommand(syncCommand, projectMustExist)) diff --git a/internal/cli/procedure.go b/internal/cli/procedure.go new file mode 100644 index 0000000..89ee608 --- /dev/null +++ b/internal/cli/procedure.go @@ -0,0 +1,44 @@ +package cli + +import ( + "fmt" + + "github.com/strongdm/comply/internal/model" + "github.com/urfave/cli" +) + +var procedureCommand = cli.Command{ + Name: "procedure", + ShortName: "proc", + Usage: "create ticket by procedure ID", + ArgsUsage: "procedureID", + Action: procedureAction, + Before: projectMustExist, +} + +func procedureAction(c *cli.Context) error { + procedures, err := model.ReadProcedures() + if err != nil { + return err + } + + if c.NArg() != 1 { + return cli.NewExitError("provide a procedure ID", 1) + } + + procedureID := c.Args().First() + + for _, procedure := range procedures { + if procedure.ID == procedureID { + // TODO: don't hardcode GH + tp := model.GetPlugin(model.GitHub) + tp.Create(&model.Ticket{ + Name: procedure.Name, + Body: fmt.Sprintf("%s\n\n\n---\nProcedure-ID: %s", procedure.Body, procedure.ID), + }, []string{"comply", "comply-procedure"}) + return nil + } + } + + return cli.NewExitError(fmt.Sprintf("unknown procedure ID: %s", procedureID), 1) +}