package main import ( "context" "github.com/spf13/cobra" "log" "os" commands "runner/internal/commands" ) var cli = &cobra.Command{ Use: "runner", PersistentPreRun: func(cmd *cobra.Command, args []string) { configPath, err := cmd.Flags().GetString("config") ctx := cmd.Context() if err == nil { configuration, err := commands.NewConfigFromFile(configPath) if err != nil { log.Printf("Failed to parse configuration (%s)!", configPath) os.Exit(1) } ctx = context.WithValue(ctx, "config", configuration) } cmd.SetContext(ctx) }, } var execute = &cobra.Command{ Use: "execute [workflow-file]", Short: "Executes the provided workflow.", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { config := cmd.Context().Value("config").(*commands.Configuration) if err := commands.ExecuteWorkflow(*config, args[0]); err != nil { log.Printf("Failure: %s", err) os.Exit(1) } }, } var validate = &cobra.Command{ Use: "validate [workflow-file]", Short: "Validates the structure of the provided workflow.", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { config := cmd.Context().Value("config").(*commands.Configuration) if err := commands.ValidateWorkflow(*config, args[0]); err != nil { log.Printf("Failure: %s", err) os.Exit(1) } }, } var knownCommands = []*cobra.Command{ execute, validate, } func main() { cli.PersistentFlags().StringP("config", "c", "./config.yml", "Declarative runner configuration.") for _, command := range knownCommands { cli.AddCommand(command) } cli.Execute() }