github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/bob/playbook/compute_buildinfo.go (about) 1 package playbook 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/benchkram/bob/bobtask/buildinfo" 8 "github.com/benchkram/bob/bobtask/target" 9 "github.com/benchkram/bob/pkg/boberror" 10 "github.com/benchkram/bob/pkg/buildinfostore" 11 "github.com/benchkram/bob/pkg/usererror" 12 "github.com/benchkram/errz" 13 ) 14 15 // computeBuildinfo for a task. 16 // Should only be called after processing is done. 17 func (p *Playbook) computeBuildinfo(taskname string) (_ *buildinfo.I, err error) { 18 defer errz.Recover(&err) 19 20 task, ok := p.Tasks[taskname] 21 if !ok { 22 return nil, usererror.Wrap(boberror.ErrTaskDoesNotExistF(taskname)) 23 } 24 25 hashIn, err := task.HashIn() 26 errz.Fatal(err) 27 28 buildInfo, err := task.ReadBuildInfo() 29 if err != nil { 30 if errors.Is(err, buildinfostore.ErrBuildInfoDoesNotExist) { 31 // assure buildinfo is initialized correctly 32 buildInfo = buildinfo.New() 33 } else { 34 errz.Fatal(err) 35 } 36 } 37 buildInfo.Meta.Task = task.Name() 38 buildInfo.Meta.InputHash = hashIn.String() 39 40 // Compute buildinfo for the target 41 trgt, err := task.Task.Target() 42 errz.Fatal(err) 43 if trgt != nil { 44 bi, err := trgt.BuildInfo() 45 if err != nil { 46 if errors.Is(err, target.ErrTargetDoesNotExist) { 47 return nil, usererror.Wrapm(err, 48 fmt.Sprintf("Target does not exist for task [%s].\nDid you define the wrong target?\nDid you forget to create the target at all? \n\n", taskname)) 49 } else { 50 errz.Fatal(err) 51 } 52 } 53 54 buildInfo.Target = *bi 55 } 56 57 return buildInfo, nil 58 }