github.com/chyroc/anb@v0.3.0/internal/config/task.go (about) 1 package config 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type Task struct { 9 // 公用 task 参数 10 ID string `yaml:"id"` // 唯一性 ID,不允许重复,可以通过 $tasks.<id>.outputs.<name> 取数据 11 Name string `yaml:"name"` // 名称,打印用 12 If IfExpr `yaml:"if"` // 一个 expr 表达式,为真,则这个 task 才可以运行 13 Dir string `yaml:"dir"` // 执行 command 的目录 14 15 // 下面是 task 的具体实现 16 Upload *ConfigTaskUpload `yaml:"upload"` 17 Download *ConfigTaskDownload `yaml:"download"` 18 Cmd *ConfigTaskCmd `yaml:"cmd"` 19 LocalCmd *ConfigTaskCmd `yaml:"local_cmd"` 20 } 21 22 // 是否可以运行 23 func (r *Task) ShouldRun(vals Any) (string, bool, error) { 24 if r.If == "" { 25 return "", true, nil 26 } 27 28 isTrue, err := r.If.IsTrue(vals) 29 if err != nil { 30 return "", false, fmt.Errorf("%q invalid: %w", r.If, err) 31 } 32 return strings.TrimSpace(string(r.If)), isTrue, nil 33 } 34 35 // 任务名称 36 func (r *Task) TaskName(idx int) string { 37 if r.Name != "" { 38 return r.Name 39 } 40 return fmt.Sprintf("task #%d", idx+1) 41 }