package task import ( "encoding/json" "fmt" "io/ioutil" "runtime" "github.com/BurntSushi/toml" "github.com/imdario/mergo" "gopkg.in/yaml.v2" ) func readTaskfile() (map[string]*Task, error) { initialTasks, err := readTaskfileData(TaskFilePath) if err != nil { return nil, err } mergeTasks, err := readTaskfileData(fmt.Sprintf("%s_%s", TaskFilePath, runtime.GOOS)) if err != nil { switch err.(type) { default: return nil, err case taskFileNotFound: return initialTasks, nil } } if err := mergo.MapWithOverwrite(&initialTasks, mergeTasks); err != nil { return nil, err } return initialTasks, nil } func readTaskfileData(path string) (tasks map[string]*Task, err error) { if b, err := ioutil.ReadFile(path + ".yml"); err == nil { return tasks, yaml.Unmarshal(b, &tasks) } if b, err := ioutil.ReadFile(path + ".json"); err == nil { return tasks, json.Unmarshal(b, &tasks) } if b, err := ioutil.ReadFile(path + ".toml"); err == nil { return tasks, toml.Unmarshal(b, &tasks) } return nil, taskFileNotFound{path} }