@@ -6,17 +6,18 @@ import (
66 "os"
77 "path/filepath"
88
9- "github.com/everettraven/synkr/pkg/builtins"
109 "github.com/everettraven/synkr/pkg/engine"
10+ "github.com/everettraven/synkr/pkg/plugins"
1111 "github.com/everettraven/synkr/pkg/printers"
1212 "github.com/spf13/cobra"
1313 "go.starlark.net/lib/time"
1414 "go.starlark.net/starlark"
1515 "go.starlark.net/syntax"
16+
17+ _ "github.com/everettraven/synkr/pkg/plugins/registration"
1618)
1719
1820func NewSynkrCommand () * cobra.Command {
19- eng := & engine.Engine {}
2021 var configFile string
2122 var outputFormat string
2223
@@ -25,7 +26,7 @@ func NewSynkrCommand() *cobra.Command {
2526 Short : "synkr is an engine for syncing work items based on a Starlark configuration" ,
2627 Args : cobra .ExactArgs (0 ),
2728 RunE : func (cmd * cobra.Command , args []string ) error {
28- return run (cmd .Context (), eng , configFile , outputFormat )
29+ return run (cmd .Context (), configFile , outputFormat )
2930 },
3031 }
3132
@@ -35,31 +36,46 @@ func NewSynkrCommand() *cobra.Command {
3536 return cmd
3637}
3738
38- func run (ctx context.Context , eng * engine.Engine , configFile , output string ) error {
39- thread , err := configureEngine (eng , configFile , output )
39+ func run (ctx context.Context , configFile , output string ) error {
40+ plugins := plugins .Plugins ()
41+ thread , err := configureThread (configFile , plugins ... )
42+ if err != nil {
43+ return fmt .Errorf ("configuring thread: %w" , err )
44+ }
45+
46+ eng := engine .New (plugins ... )
47+
48+ results , err := eng .Run (ctx , thread )
4049 if err != nil {
41- return fmt .Errorf ("configuring engine: %w" , err )
50+ return fmt .Errorf ("running engine: %w" , err )
4251 }
4352
44- return eng . Run ( ctx , thread )
53+ return printResults ( output , results ... )
4554}
4655
47- func configureEngine ( eng * engine. Engine , configFile , output string ) ( * starlark. Thread , error ) {
56+ func printResults ( output string , results ... plugins. SourceResult ) error {
4857 switch output {
49- case "markdown" :
50- eng .SetPrinter (& printers.Markdown {})
5158 case "json" :
52- eng .SetPrinter (& printers.JSON {})
59+ out := & printers.JSON {}
60+ return out .Print (results ... )
61+ case "markdown" :
62+ out := & printers.Markdown {}
63+ return out .Print (results ... )
5364 case "web" :
54- eng .SetPrinter (& printers.Web {})
65+ out := & printers.Web {}
66+ return out .Print (results ... )
5567 default :
56- return nil , fmt .Errorf ("unknown output format %q" , output )
68+ return fmt .Errorf ("unknown output format %q" , output )
5769 }
70+ }
5871
72+ func configureThread (configFile string , plugins ... plugins.Plugin ) (* starlark.Thread , error ) {
5973 globals := starlark.StringDict {}
6074 starlark .Universe ["time" ] = time .Module
6175
62- builtins .Github (globals , eng )
76+ for _ , plugin := range plugins {
77+ plugin .RegisterBuiltins (globals )
78+ }
6379
6480 thread := & starlark.Thread {Name : "main" }
6581
0 commit comments