mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-22 23:26:39 -08:00
feat: add support for plugin index (#6674)
Signed-off-by: knqyf263 <knqyf263@gmail.com> Co-authored-by: DmitriyLewen <91113035+DmitriyLewen@users.noreply.github.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -111,20 +112,24 @@ func NewApp() *cobra.Command {
|
||||
}
|
||||
|
||||
func loadPluginCommands() []*cobra.Command {
|
||||
ctx := context.Background()
|
||||
manager := plugin.NewManager()
|
||||
|
||||
var commands []*cobra.Command
|
||||
plugins, err := plugin.LoadAll()
|
||||
plugins, err := manager.LoadAll(ctx)
|
||||
if err != nil {
|
||||
log.Debug("No plugins loaded")
|
||||
log.DebugContext(ctx, "No plugins loaded")
|
||||
return nil
|
||||
}
|
||||
for _, p := range plugins {
|
||||
p := p
|
||||
cmd := &cobra.Command{
|
||||
Use: fmt.Sprintf("%s [flags]", p.Name),
|
||||
Short: p.Usage,
|
||||
Short: p.Summary,
|
||||
Long: p.Description,
|
||||
GroupID: groupPlugin,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if err = p.Run(cmd.Context(), plugin.RunOptions{Args: args}); err != nil {
|
||||
if err = p.Run(cmd.Context(), plugin.Options{Args: args}); err != nil {
|
||||
return xerrors.Errorf("plugin error: %w", err)
|
||||
}
|
||||
return nil
|
||||
@@ -719,14 +724,15 @@ func NewPluginCommand() *cobra.Command {
|
||||
}
|
||||
cmd.AddCommand(
|
||||
&cobra.Command{
|
||||
Use: "install URL | FILE_PATH",
|
||||
Use: "install NAME | URL | FILE_PATH",
|
||||
Aliases: []string{"i"},
|
||||
Short: "Install a plugin",
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
DisableFlagsInUseLine: true,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if _, err := plugin.Install(cmd.Context(), args[0], true); err != nil {
|
||||
if _, err := plugin.Install(cmd.Context(), args[0], plugin.Options{}); err != nil {
|
||||
return xerrors.Errorf("plugin install error: %w", err)
|
||||
}
|
||||
return nil
|
||||
@@ -735,12 +741,13 @@ func NewPluginCommand() *cobra.Command {
|
||||
&cobra.Command{
|
||||
Use: "uninstall PLUGIN_NAME",
|
||||
Aliases: []string{"u"},
|
||||
SilenceErrors: true,
|
||||
DisableFlagsInUseLine: true,
|
||||
Short: "Uninstall a plugin",
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(_ *cobra.Command, args []string) error {
|
||||
if err := plugin.Uninstall(args[0]); err != nil {
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if err := plugin.Uninstall(cmd.Context(), args[0]); err != nil {
|
||||
return xerrors.Errorf("plugin uninstall error: %w", err)
|
||||
}
|
||||
return nil
|
||||
@@ -749,62 +756,86 @@ func NewPluginCommand() *cobra.Command {
|
||||
&cobra.Command{
|
||||
Use: "list",
|
||||
Aliases: []string{"l"},
|
||||
SilenceErrors: true,
|
||||
DisableFlagsInUseLine: true,
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Short: "List installed plugin",
|
||||
Args: cobra.NoArgs,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
info, err := plugin.List()
|
||||
if err != nil {
|
||||
if err := plugin.List(cmd.Context()); err != nil {
|
||||
return xerrors.Errorf("plugin list display error: %w", err)
|
||||
}
|
||||
if _, err := fmt.Fprint(os.Stdout, info); err != nil {
|
||||
return xerrors.Errorf("print error: %w", err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
&cobra.Command{
|
||||
Use: "info PLUGIN_NAME",
|
||||
Short: "Show information about the specified plugin",
|
||||
SilenceErrors: true,
|
||||
DisableFlagsInUseLine: true,
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(_ *cobra.Command, args []string) error {
|
||||
info, err := plugin.Information(args[0])
|
||||
if err != nil {
|
||||
if err := plugin.Information(args[0]); err != nil {
|
||||
return xerrors.Errorf("plugin information display error: %w", err)
|
||||
}
|
||||
if _, err := fmt.Fprint(os.Stdout, info); err != nil {
|
||||
return xerrors.Errorf("print error: %w", err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
&cobra.Command{
|
||||
Use: "run URL | FILE_PATH",
|
||||
Use: "run NAME | URL | FILE_PATH",
|
||||
Aliases: []string{"r"},
|
||||
SilenceErrors: true,
|
||||
DisableFlagsInUseLine: true,
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Short: "Run a plugin on the fly",
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return plugin.RunWithURL(cmd.Context(), args[0], plugin.RunOptions{Args: args[1:]})
|
||||
return plugin.RunWithURL(cmd.Context(), args[0], plugin.Options{Args: args[1:]})
|
||||
},
|
||||
},
|
||||
&cobra.Command{
|
||||
Use: "update PLUGIN_NAME",
|
||||
Short: "Update an existing plugin",
|
||||
SilenceErrors: true,
|
||||
Use: "update",
|
||||
Short: "Update the local copy of the plugin index",
|
||||
DisableFlagsInUseLine: true,
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(_ *cobra.Command, args []string) error {
|
||||
if err := plugin.Update(args[0]); err != nil {
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Args: cobra.NoArgs,
|
||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||
if err := plugin.Update(cmd.Context()); err != nil {
|
||||
return xerrors.Errorf("plugin update error: %w", err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
&cobra.Command{
|
||||
Use: "search [KEYWORD]",
|
||||
DisableFlagsInUseLine: true,
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
Short: "List Trivy plugins available on the plugin index and search among them",
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
var keyword string
|
||||
if len(args) == 1 {
|
||||
keyword = args[0]
|
||||
}
|
||||
return plugin.Search(cmd.Context(), keyword)
|
||||
},
|
||||
},
|
||||
&cobra.Command{
|
||||
Use: "upgrade [PLUGIN_NAMES]",
|
||||
Short: "Upgrade installed plugins to newer versions",
|
||||
DisableFlagsInUseLine: true,
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if err := plugin.Upgrade(cmd.Context(), args); err != nil {
|
||||
return xerrors.Errorf("plugin upgrade error: %w", err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
)
|
||||
cmd.SetFlagErrorFunc(flagErrorFunc)
|
||||
return cmd
|
||||
|
||||
Reference in New Issue
Block a user