github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/packages/install.go (about)

     1  package packages
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/captain"
     5  	"github.com/ActiveState/cli/internal/errs"
     6  	"github.com/ActiveState/cli/internal/logging"
     7  	"github.com/ActiveState/cli/internal/rtutils/ptr"
     8  	"github.com/ActiveState/cli/internal/runbits/requirements"
     9  	"github.com/ActiveState/cli/pkg/platform/api/buildplanner/types"
    10  	"github.com/ActiveState/cli/pkg/platform/model"
    11  )
    12  
    13  // InstallRunParams tracks the info required for running Install.
    14  type InstallRunParams struct {
    15  	Packages  captain.PackagesValue
    16  	Timestamp captain.TimeValue
    17  	Revision  captain.IntValue
    18  }
    19  
    20  // Install manages the installing execution context.
    21  type Install struct {
    22  	prime primeable
    23  }
    24  
    25  // NewInstall prepares an installation execution context for use.
    26  func NewInstall(prime primeable) *Install {
    27  	return &Install{prime}
    28  }
    29  
    30  // Run executes the install behavior.
    31  func (a *Install) Run(params InstallRunParams, nsType model.NamespaceType) (rerr error) {
    32  	defer rationalizeError(a.prime.Auth(), &rerr)
    33  
    34  	logging.Debug("ExecuteInstall")
    35  	var reqs []*requirements.Requirement
    36  	for _, p := range params.Packages {
    37  		req := &requirements.Requirement{
    38  			Name:      p.Name,
    39  			Version:   p.Version,
    40  			Operation: types.OperationAdded,
    41  		}
    42  
    43  		if p.Namespace != "" {
    44  			req.Namespace = ptr.To(model.NewRawNamespace(p.Namespace))
    45  		} else {
    46  			req.NamespaceType = &nsType
    47  		}
    48  
    49  		req.Revision = params.Revision.Int
    50  
    51  		reqs = append(reqs, req)
    52  	}
    53  
    54  	ts, err := getTime(&params.Timestamp, a.prime.Auth(), a.prime.Project())
    55  	if err != nil {
    56  		return errs.Wrap(err, "Unable to get timestamp from params")
    57  	}
    58  
    59  	return requirements.NewRequirementOperation(a.prime).ExecuteRequirementOperation(ts, reqs...)
    60  }