Documentation
¶
Overview ¶
Package profile defines how to execute commands against sets of files.
It provides support for hooks (pre/post execution commands), plugins (ad-hoc commands), and source filtering to determine which files should be observed by file watchers.
It can also be used to define UI overrides for when the profile is matched.
Index ¶
- Variables
- type HookCommand
- type HookCommandOpt
- type HookOpts
- type Hooks
- type Plugin
- type PluginOpt
- type Profile
- func (p *Profile) Build() error
- func (p *Profile) CompileSource() error
- func (p *Profile) Exec(ctx context.Context, dir string) (*execs.Result, error)
- func (p *Profile) GetPlugin(name string) *Plugin
- func (p *Profile) GetPluginKeyBinds() []keys.KeyBind
- func (p *Profile) GetPluginNameByKey(keyCode string) string
- func (p *Profile) MatchFiles(dirPath string, files []string) (bool, []string)
- type ProfileOpt
- type UIConfig
Constants ¶
This section is empty.
Variables ¶
var ( // ErrHookExecution is returned when hook execution fails. ErrHookExecution = errors.New("hook execution") // ErrPluginExecution is returned when plugin execution fails. ErrPluginExecution = errors.New("plugin execution") )
Functions ¶
This section is empty.
Types ¶
type HookCommand ¶
type HookCommand struct {
// Command contains the command execution configuration.
Command execs.Command `json:",inline"`
}
HookCommand represents a single hook command to execute.
func MustNewHookCommand ¶ added in v0.14.0
func MustNewHookCommand(command string, opts ...HookCommandOpt) *HookCommand
MustNewHookCommand creates a new hook command and panics if there's an error.
func NewHookCommand ¶
func NewHookCommand(command string, opts ...HookCommandOpt) (*HookCommand, error)
NewHookCommand creates a new hook command with the given command and options.
func (*HookCommand) Build ¶ added in v0.14.0
func (hc *HookCommand) Build() error
func (*HookCommand) ExecWithStdin ¶ added in v0.15.0
type HookCommandOpt ¶ added in v0.14.0
type HookCommandOpt func(*HookCommand)
HookCommandOpt is a functional option for configuring a HookCommand.
func WithHookArgs ¶ added in v0.14.0
func WithHookArgs(args ...string) HookCommandOpt
WithHookArgs sets the command arguments for the hook command.
func WithHookEnvFrom ¶ added in v0.14.0
func WithHookEnvFrom(envFrom []execs.EnvFromSource) HookCommandOpt
WithHookEnvFrom sets the envFrom sources for the hook command.
func WithHookEnvVar ¶ added in v0.14.0
func WithHookEnvVar(envVar execs.EnvVar) HookCommandOpt
WithHookEnvVar sets a single environment variable for the hook command.
type HookOpts ¶
type HookOpts func(*Hooks)
HookOpts is a functional option for configuring Hooks.
func WithPostRender ¶
func WithPostRender(hooks ...*HookCommand) HookOpts
WithPostRender adds post-render hooks.
func WithPreRender ¶
func WithPreRender(hooks ...*HookCommand) HookOpts
WithPreRender adds pre-render hooks.
type Hooks ¶
type Hooks struct {
// Init contains commands to run during initialization.
Init []*HookCommand `json:"init,omitempty" jsonschema:"title=Init Hooks"`
// PreRender contains commands to run before rendering.
PreRender []*HookCommand `json:"preRender,omitempty" jsonschema:"title=Pre Render Hooks"`
// PostRender contains commands to run after rendering.
PostRender []*HookCommand `json:"postRender,omitempty" jsonschema:"title=Post Render Hooks"`
}
Hooks represents the different types of hooks that can be executed.
func MustNewHooks ¶ added in v0.14.0
MustNewHooks creates a new Hooks instance and panics if there's an error.
type Plugin ¶
type Plugin struct {
// Command contains the command execution configuration.
Command execs.Command `json:",inline"`
// Description provides a description of what the plugin does.
Description string `json:"description" jsonschema:"title=Description"`
// Keys defines the key bindings that trigger this plugin.
Keys []keys.Key `json:"keys,omitempty" jsonschema:"title=Keys"`
}
Plugin represents a command plugin that can be executed on demand with keybinds.
func MustNewPlugin ¶ added in v0.14.0
MustNewPlugin creates a new plugin and panics if there's an error.
type PluginOpt ¶
type PluginOpt func(*Plugin)
PluginOpt is a functional option for configuring a Plugin.
func WithPluginArgs ¶
WithPluginArgs sets the command arguments for the plugin.
func WithPluginEnvFrom ¶ added in v0.14.0
func WithPluginEnvFrom(envFrom []execs.EnvFromSource) PluginOpt
WithPluginEnvFrom sets the envFrom sources for the plugin.
func WithPluginEnvVar ¶ added in v0.14.0
WithPluginEnvVar sets a single environment variable for the plugin.
func WithPluginKeys ¶
WithPluginKeys sets the keybinds for the plugin.
type Profile ¶
type Profile struct {
// Hooks contains lifecycle hooks for the profile.
Hooks *Hooks `json:"hooks,omitempty" jsonschema:"title=Hooks"`
// UI contains UI configuration overrides for this profile.
UI *UIConfig `json:"ui,omitempty" jsonschema:"title=UI Overrides"`
// Plugins contains a map of plugin names to Plugin configurations.
Plugins map[string]*Plugin `json:"plugins,omitempty" jsonschema:"title=Plugins"`
// Source contains the CEL expression source code for the profile.
Source string `json:"source,omitempty" jsonschema:"title=Source"`
// Command contains the command execution configuration.
Command execs.Command `json:",inline"`
// contains filtered or unexported fields
}
Profile represents a command profile with optional source filtering.
The Source field contains a CEL expression that determines which files should be processed by this profile. The expression has access to:
- `files` (list<string>): All file paths in directory
- `dir` (string): The directory path being processed
Source CEL expressions must return a list of files:
- `files.filter(f, pathExt(f) in [".yaml", ".yml"])` - returns all YAML files
- `files.filter(f, pathBase(f) in ["Chart.yaml", "values.yaml"])` - returns Chart and values files
- `files.filter(f, pathBase(f) == "Chart.yaml")` - returns files named Chart.yaml
- `files.filter(f, !pathBase(f).matches(".*test.*")) - returns non-test files
- `files.filter(f, pathBase(f) == "Chart.yaml" && yamlPath(f, "$.apiVersion") == "v2")` - returns charts with apiVersion v2
- `files` - unfiltered list means all files should be processed
- `[]` - empty list means no files should be processed
If no Source expression is provided, the profile will use default file filtering.
func MustNew ¶
func MustNew(command string, opts ...ProfileOpt) *Profile
MustNew creates a new profile and panics if there's an error.
func New ¶
func New(command string, opts ...ProfileOpt) (*Profile, error)
New creates a new profile with the given command and options.
func (*Profile) CompileSource ¶
CompileSource compiles the profile's source expression into a CEL program.
func (*Profile) Exec ¶
Exec runs the profile in the specified directory. Returns ExecResult with the command output and any post-render hooks.
func (*Profile) GetPlugin ¶
setEnvFrom applies all envFrom sources to the environment map. GetPlugin returns the plugin with the given name, or nil if not found.
func (*Profile) GetPluginKeyBinds ¶
func (*Profile) GetPluginNameByKey ¶
GetPluginNameByKey returns the name of the first plugin that matches the given key code.
func (*Profile) MatchFiles ¶
MatchFiles checks if the profile's source expression matches files in a directory. The CEL expression must return a list of strings representing files. An empty list means no files should be processed with this profile.
Returns (matches, files) where: - matches: true if the profile should be used (non-empty file list) - files: specific files that were matched.
type ProfileOpt ¶
type ProfileOpt func(*Profile)
ProfileOpt is a functional option for configuring a Profile.
func WithArgs ¶
func WithArgs(args ...string) ProfileOpt
WithArgs sets the command arguments for the profile.
func WithEnvFrom ¶ added in v0.14.0
func WithEnvFrom(envFrom []execs.EnvFromSource) ProfileOpt
WithEnvFrom sets the envFrom sources for the profile.
func WithEnvVar ¶ added in v0.14.0
func WithEnvVar(envVar execs.EnvVar) ProfileOpt
WithEnvVar sets a single environment variable for the profile. Call multiple times to set multiple environment variables.
func WithPlugins ¶
func WithPlugins(plugins map[string]*Plugin) ProfileOpt
WithPlugins sets the plugins for the profile.
func WithSource ¶
func WithSource(source string) ProfileOpt
WithSource sets the source filtering expression for the profile.
type UIConfig ¶
type UIConfig struct {
// Compact enables compact display mode with reduced spacing.
Compact *bool `json:"compact,omitempty" jsonschema:"title=Enable Compact Display"`
// WordWrap enables automatic word wrapping for long text.
WordWrap *bool `json:"wordWrap,omitempty" jsonschema:"title=Enable Word Wrap"`
// LineNumbers enables line numbers in the display.
LineNumbers *bool `json:"lineNumbers,omitempty" jsonschema:"title=Enable Line Numbers"`
// Theme specifies the theme name to use. This can be a custom theme added under `themes`,
// or a theme from the Chroma Style Gallery: https://xyproto.github.io/splash/docs/
Theme string `json:"theme,omitempty" jsonschema:"title=Theme Name"`
}
UIConfig defines UI config overrides for a profile.