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(¶ms.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 }