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  }