github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/jobs/job.go (about)

     1  package jobs
     2  
     3  type RunnerJobRef *RunnerJob
     4  
     5  type RunnerJob struct {
     6  	Id   string
     7  	Job  Job
     8  	Done bool
     9  	// FIXME: lock/mutex
    10  	Depends []RunnerJobRef
    11  	Sub     []Job
    12  }
    13  
    14  type RunnerJobList []RunnerJobRef
    15  
    16  func NewJob(id JobId, job Job) (RunnerJobRef, error) {
    17  	if err := job.JobPrepare(id); err != nil {
    18  		return nil, err
    19  	}
    20  
    21  	sub, err := job.JobSub()
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  
    26  	rj := RunnerJob{
    27  		Id:  id,
    28  		Job: job,
    29  		Sub: sub,
    30  	}
    31  	return &rj, nil
    32  }
    33  
    34  func (rj RunnerJob) Run() error {
    35  	return rj.Job.JobRun()
    36  }
    37  
    38  func (rj RunnerJob) Runnable() bool {
    39  	for _, walk := range rj.Depends {
    40  		if !walk.Done {
    41  			return false
    42  		}
    43  	}
    44  	return true
    45  }