mirror of https://github.com/helm/helm.git
				
				
				
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
/*
 | 
						||
Copyright The Helm Authors.
 | 
						||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						||
you may not use this file except in compliance with the License.
 | 
						||
You may obtain a copy of the License at
 | 
						||
 | 
						||
http://www.apache.org/licenses/LICENSE-2.0
 | 
						||
 | 
						||
Unless required by applicable law or agreed to in writing, software
 | 
						||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						||
See the License for the specific language governing permissions and
 | 
						||
limitations under the License.
 | 
						||
*/
 | 
						||
 | 
						||
package plugin // import "helm.sh/helm/v4/internal/plugin"
 | 
						||
 | 
						||
import (
 | 
						||
	"context"
 | 
						||
	"io"
 | 
						||
	"regexp"
 | 
						||
)
 | 
						||
 | 
						||
const PluginFileName = "plugin.yaml"
 | 
						||
 | 
						||
// Plugin defines a plugin instance. The client (Helm codebase) facing type that can be used to introspect and invoke a plugin
 | 
						||
type Plugin interface {
 | 
						||
	// Dir return the plugin directory (as an absolute path) on the filesystem
 | 
						||
	Dir() string
 | 
						||
 | 
						||
	// Metadata describes the plugin's type, version, etc.
 | 
						||
	// (This metadata type is the converted and plugin version independented in-memory representation of the plugin.yaml file)
 | 
						||
	Metadata() Metadata
 | 
						||
 | 
						||
	// Invoke takes the given input, and dispatches the contents to plugin instance
 | 
						||
	// The input is expected to be a JSON-serializable object, which the plugin will interpret according to its type
 | 
						||
	// The plugin is expected to return a JSON-serializable object, which the invoker
 | 
						||
	// will interpret according to the plugin's type
 | 
						||
	//
 | 
						||
	// Invoke can be thought of as a request/response mechanism. Similar to e.g. http.RoundTripper
 | 
						||
	//
 | 
						||
	// If plugin's execution fails with a non-zero "return code" (this is plugin runtime implementation specific)
 | 
						||
	// an InvokeExecError is returned
 | 
						||
	Invoke(ctx context.Context, input *Input) (*Output, error)
 | 
						||
}
 | 
						||
 | 
						||
// PluginHook allows plugins to implement hooks that are invoked on plugin management events (install, upgrade, etc)
 | 
						||
type PluginHook interface { //nolint:revive
 | 
						||
	InvokeHook(event string) error
 | 
						||
}
 | 
						||
 | 
						||
// Input defines the input message and parameters to be passed to the plugin
 | 
						||
type Input struct {
 | 
						||
	// Message represents the type-elided value to be passed to the plugin.
 | 
						||
	// The plugin is expected to interpret the message according to its type
 | 
						||
	// The message object must be JSON-serializable
 | 
						||
	Message any
 | 
						||
 | 
						||
	// Optional: Reader to be consumed plugin's "stdin"
 | 
						||
	Stdin io.Reader
 | 
						||
 | 
						||
	// Optional: Writers to consume the plugin's "stdout" and "stderr"
 | 
						||
	Stdout, Stderr io.Writer
 | 
						||
 | 
						||
	// Optional: Env represents the environment as a list of "key=value" strings
 | 
						||
	// see os.Environ
 | 
						||
	Env []string
 | 
						||
}
 | 
						||
 | 
						||
// Output defines the output message and parameters the passed from the plugin
 | 
						||
type Output struct {
 | 
						||
	// Message represents the type-elided value returned from the plugin
 | 
						||
	// The invoker is expected to interpret the message according to the plugin's type
 | 
						||
	// The message object must be JSON-serializable
 | 
						||
	Message any
 | 
						||
}
 | 
						||
 | 
						||
// validPluginName is a regular expression that validates plugin names.
 | 
						||
//
 | 
						||
// Plugin names can only contain the ASCII characters a-z, A-Z, 0-9, _ and -.
 | 
						||
var validPluginName = regexp.MustCompile("^[A-Za-z0-9_-]+$")
 |