Repository: helm/helm
File: pkg/plugin/plugin.go (Go)

Code before:

	// IgnoreFlags ignores any flags passed in from Helm
	//
	// For example, if the plugin is invoked as `helm --debug myplugin`, if this
	// is false, `--debug` will be appended to `--command`. If this is true,
	// the `--debug` flag will be discarded.
	IgnoreFlags bool `json:"ignoreFlags"`

	// PlatformHooks are commands that will run on plugin events, with a platform selector and support for args.
	//
	// The command and args will be passed through environment expansion, so env vars can
	// be present in the command.
	//
	// Note that the command is not executed in a shell. To do so, we suggest
	// pointing the command to a shell script.
	//
	// The following rules will apply to processing platform hooks:
	// - If PlatformHooks is present, it will be used
	// - If both OS and Arch match the current platform, search will stop and the command will be executed
	// - If OS matches and Arch is empty, the command will be executed
	// - If no OS/Arch match is found, the default command will be executed
	// - If no matches are found in platformHooks, Helm will skip the event
	PlatformHooks PlatformHooks `json:"platformHooks"`

	// Hooks are commands that will run on plugin events, as a single string.
	// Providing a command will result in an deprecation warning if PlatformHooks is also set.
	//
	// The command will be passed through environment expansion, so env vars can
	// be present in this command.
	//
	// Note that the command is executed in the sh shell.
	//
	// DEPRECATED: Use PlatformHooks instead
	Hooks Hooks

	// Downloaders field is used if the plugin supply downloader mechanism
	// for special protocols.
	Downloaders []Downloaders `json:"downloaders"`

	// UseTunnelDeprecated indicates that this command needs a tunnel.
	// Setting this will cause a number of side effects, such as the
	// automatic setting of HELM_HOST.
	// DEPRECATED and unused, but retained for backwards compatibility with Helm 2 plugins. Remove in Helm 4
	UseTunnelDeprecated bool `json:"useTunnel,omitempty"`
}

// Plugin represents a plugin.
type Plugin struct {
	// Metadata is a parsed representation of a plugin.yaml
	Metadata *Metadata
	// Dir is the string path to the directory that holds the plugin.

Review comment (suggestion):
Should this be something along these lines?
```suggestion
	// Providing a platform and plugin hook will result in an deprecation warning.
```

Code after:
	Command string `json:"command"`

	// IgnoreFlags ignores any flags passed in from Helm
	//
	// For example, if the plugin is invoked as `helm --debug myplugin`, if this
	// is false, `--debug` will be appended to `--command`. If this is true,
	// the `--debug` flag will be discarded.
	IgnoreFlags bool `json:"ignoreFlags"`

	// PlatformHooks are commands that will run on plugin events, with a platform selector and support for args.
	//
	// The command and args will be passed through environment expansion, so env vars can
	// be present in the command.
	//
	// Note that the command is not executed in a shell. To do so, we suggest
	// pointing the command to a shell script.
	//
	// The following rules will apply to processing platform hooks:
	// - If PlatformHooks is present, it will be used
	// - If both OS and Arch match the current platform, search will stop and the command will be executed
	// - If OS matches and Arch is empty, the command will be executed
	// - If no OS/Arch match is found, the default command will be executed
	// - If no matches are found in platformHooks, Helm will skip the event
	PlatformHooks PlatformHooks `json:"platformHooks"`

	// Hooks are commands that will run on plugin events, as a single string.
	// Providing Hook and PlatformHooks will result in a warning being emitted (PlatformHooks takes precedence).
	//
	// The command will be passed through environment expansion, so env vars can
	// be present in this command.
	//
	// Note that the command is executed in the sh shell.
	//
	// DEPRECATED: Use PlatformHooks instead
	Hooks Hooks

	// Downloaders field is used if the plugin supply downloader mechanism
	// for special protocols.
	Downloaders []Downloaders `json:"downloaders"`

	// UseTunnelDeprecated indicates that this command needs a tunnel.
	// Setting this will cause a number of side effects, such as the
	// automatic setting of HELM_HOST.
	// DEPRECATED and unused, but retained for backwards compatibility with Helm 2 plugins. Remove in Helm 4
	UseTunnelDeprecated bool `json:"useTunnel,omitempty"`
}

// Plugin represents a plugin.
type Plugin struct {
	// Metadata is a parsed representation of a plugin.yaml
	Metadata *Metadata