grim/convey

Add a .reviewboardrc file

2022-03-26, Gary Kramlich
8fea0c778f8e
Add a .reviewboardrc file
package config
import (
"fmt"
"gopkg.in/yaml.v2"
"keep.imfreedom.org/grim/convey/runtime"
"keep.imfreedom.org/grim/convey/tasks"
)
type rawConfig struct {
Environment []string
Tasks map[string]yaml.MapSlice
Plans map[string]runtime.Plan
MetaPlans map[string]runtime.MetaPlan `yaml:"meta-plans"`
}
func (r *rawConfig) processTasks() (map[string]runtime.Task, error) {
realTasks := map[string]runtime.Task{}
for name, rawTask := range r.Tasks {
taskType := ""
for _, item := range rawTask {
if item.Key == "type" {
rawType, ok := item.Value.(string)
if !ok {
return nil, fmt.Errorf("the type value for task %q is not a string", name)
}
taskType = rawType
}
}
if taskType == "" {
return nil, fmt.Errorf("task %q is missing its type", name)
}
// look for the real task in the taskmap
templateTask, found := tasksMap[taskType]
if !found {
return nil, fmt.Errorf("task %q has unknown type %q", name, taskType)
}
realTask, err := tasks.Clone(rawTask, templateTask)
if err != nil {
return nil, err
}
realTasks[name] = realTask
}
return realTasks, nil
}
func (r *rawConfig) process() (*Config, error) {
cfg := Config{
Environment: r.Environment,
MetaPlans: r.MetaPlans,
Plans: r.Plans,
}
tasks, err := r.processTasks()
if err != nil {
return nil, err
}
cfg.Tasks = tasks
return &cfg, nil
}