Plugin hooks (#1452)

* Refactor session and plugin code
* Add context to job tasks
* Show hooks in plugins page
* Refactor session management
This commit is contained in:
WithoutPants
2021-06-11 17:24:58 +10:00
committed by GitHub
parent dde361f9f3
commit 46bbede9a0
48 changed files with 1289 additions and 338 deletions

View File

@@ -54,6 +54,9 @@ type Config struct {
// The task configurations for tasks provided by this plugin.
Tasks []*OperationConfig `yaml:"tasks"`
// The hooks configurations for hooks registered by this plugin.
Hooks []*HookConfig `yaml:"hooks"`
}
func (c Config) getPluginTasks(includePlugin bool) []*models.PluginTask {
@@ -74,6 +77,34 @@ func (c Config) getPluginTasks(includePlugin bool) []*models.PluginTask {
return ret
}
func (c Config) getPluginHooks(includePlugin bool) []*models.PluginHook {
var ret []*models.PluginHook
for _, o := range c.Hooks {
hook := &models.PluginHook{
Name: o.Name,
Description: &o.Description,
Hooks: convertHooks(o.TriggeredBy),
}
if includePlugin {
hook.Plugin = c.toPlugin()
}
ret = append(ret, hook)
}
return ret
}
func convertHooks(hooks []HookTriggerEnum) []string {
var ret []string
for _, h := range hooks {
ret = append(ret, h.String())
}
return ret
}
func (c Config) getName() string {
if c.Name != "" {
return c.Name
@@ -90,6 +121,7 @@ func (c Config) toPlugin() *models.Plugin {
URL: c.URL,
Version: c.Version,
Tasks: c.getPluginTasks(false),
Hooks: c.getPluginHooks(false),
}
}
@@ -103,6 +135,19 @@ func (c Config) getTask(name string) *OperationConfig {
return nil
}
func (c Config) getHooks(hookType HookTriggerEnum) []*HookConfig {
var ret []*HookConfig
for _, h := range c.Hooks {
for _, t := range h.TriggeredBy {
if hookType == t {
ret = append(ret, h)
}
}
}
return ret
}
func (c Config) getConfigPath() string {
return filepath.Dir(c.path)
}
@@ -194,6 +239,13 @@ type OperationConfig struct {
DefaultArgs map[string]string `yaml:"defaultArgs"`
}
type HookConfig struct {
OperationConfig `yaml:",inline"`
// A list of stash operations that will be used to trigger this hook operation.
TriggeredBy []HookTriggerEnum `yaml:"triggeredBy"`
}
func loadPluginFromYAML(reader io.Reader) (*Config, error) {
ret := &Config{}