Skip to content

Commit

Permalink
export: Select export format
Browse files Browse the repository at this point in the history
  • Loading branch information
joshi4 committed Oct 29, 2024
1 parent 0d81cd1 commit e0c47d9
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 25 deletions.
12 changes: 1 addition & 11 deletions cmd/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"github.com/charmbracelet/huh"
huhSpinner "github.com/charmbracelet/huh/spinner"
"github.com/creack/pty"
"github.com/getsavvyinc/savvy-cli/client"
"github.com/getsavvyinc/savvy-cli/display"
"github.com/getsavvyinc/savvy-cli/export"
"github.com/getsavvyinc/savvy-cli/redact"
Expand Down Expand Up @@ -45,15 +44,6 @@ func recordHistory(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()
logger := loggerFromCtx(ctx).With("cmd", "history")

cl, err := client.GetLoggedInClient()
if err != nil && errors.Is(err, client.ErrInvalidClient) {
display.Error(errors.New("You must be logged in to create an artifact. Please run `savvy login`"))
os.Exit(1)
} else if err != nil {
display.ErrorWithSupportCTA(err)
os.Exit(1)
}

historyCmds, err := selectAndExpandHistory(ctx, logger)
if err != nil {
display.FatalErrWithSupportCTA(err)
Expand All @@ -65,7 +55,7 @@ func recordHistory(cmd *cobra.Command, _ []string) {
}

exporter := export.NewExporter(historyCmds)
if err := exporter.ToSavvyArtifact(ctx, cl); err != nil {
if err := exporter.Export(ctx); err != nil {
display.ErrorWithSupportCTA(err)
os.Exit(1)
}
Expand Down
11 changes: 1 addition & 10 deletions cmd/record.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"syscall"

"github.com/creack/pty"
"github.com/getsavvyinc/savvy-cli/client"
"github.com/getsavvyinc/savvy-cli/display"
"github.com/getsavvyinc/savvy-cli/export"
"github.com/getsavvyinc/savvy-cli/redact"
Expand Down Expand Up @@ -45,14 +44,6 @@ var recordCmd = &cobra.Command{
var programOutput = termenv.NewOutput(os.Stdout, termenv.WithColorCache(true))

func runRecordCmd(cmd *cobra.Command, _ []string) {
cl, err := client.GetLoggedInClient()
if err != nil && errors.Is(err, client.ErrInvalidClient) {
display.Error(errors.New("You must be logged in to record a runbook. Please run `savvy login`"))
os.Exit(1)
} else if err != nil {
display.ErrorWithSupportCTA(err)
os.Exit(1)
}
ctx := cmd.Context()

recordedCommands, err := startRecording(ctx)
Expand All @@ -78,7 +69,7 @@ func runRecordCmd(cmd *cobra.Command, _ []string) {
}

exporter := export.NewExporter(redactedCommands)
if err := exporter.ToSavvyArtifact(ctx, cl); err != nil {
if err := exporter.Export(ctx); err != nil {
display.ErrorWithSupportCTA(err)
os.Exit(1)
}
Expand Down
48 changes: 44 additions & 4 deletions export/savvy.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"os"

tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/huh"
"github.com/getsavvyinc/savvy-cli/client"
"github.com/getsavvyinc/savvy-cli/cmd/component"
"github.com/getsavvyinc/savvy-cli/cmd/component/list"
Expand All @@ -16,8 +17,37 @@ import (
)

type Exporter interface {
ToMarkdownFile(ctx context.Context)
ToSavvyArtifact(ctx context.Context, cl client.Client) error
Export(ctx context.Context) error
toMarkdownFile(ctx context.Context) error
toSavvyArtifact(ctx context.Context) error
}

const (
MarkdownFile = "md"
SavvyArtifact = "savvy"
)

func (e *exporter) Export(ctx context.Context) error {
var exportFormat string
if err := huh.NewSelect[string]().
Title("Export Commands").
Description("Select an export format").
Options(
huh.NewOption("Local Markdown File", MarkdownFile),
huh.NewOption("Savvy Artifact (Share with your team)", SavvyArtifact),
).Value(&exportFormat).Run(); err != nil {
return err
}

switch exportFormat {
case MarkdownFile:
return e.toMarkdownFile(ctx)
case SavvyArtifact:
return e.toSavvyArtifact(ctx)
default:
return errors.New("invalid export format")
}

}

func NewExporter(commands []*server.RecordedCommand) Exporter {
Expand All @@ -30,17 +60,27 @@ type exporter struct {
commands []*server.RecordedCommand
}

func (e *exporter) ToMarkdownFile(ctx context.Context) {
func (e *exporter) toMarkdownFile(ctx context.Context) error {
panic("implement me")
}

func (e *exporter) ToSavvyArtifact(ctx context.Context, cl client.Client) error {
func (e *exporter) toSavvyArtifact(ctx context.Context) error {
cl, err := client.GetLoggedInClient()
if err != nil && errors.Is(err, client.ErrInvalidClient) {
display.Error(errors.New("You must be logged in to export an Artifact to Savvy. Please run `savvy login`"))
os.Exit(1)
} else if err != nil {
display.ErrorWithSupportCTA(err)
os.Exit(1)
}

gctx, cancel := context.WithCancel(ctx)
gm := component.NewGenerateRunbookModel(e.commands, cl)
var programOutput = termenv.NewOutput(os.Stdout, termenv.WithColorCache(true))
p := tea.NewProgram(gm, tea.WithOutput(programOutput), tea.WithContext(gctx))
if _, err := p.Run(); err != nil {
err = fmt.Errorf("failed to generate runbook: %w", err)
cancel()
return err
}

Expand Down

0 comments on commit e0c47d9

Please sign in to comment.