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  }