github.com/jfrog/jfrog-cli-core/v2@v2.51.0/artifactory/commands/container/pull.go (about)

     1  package container
     2  
     3  import (
     4  	"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
     5  	"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils/container"
     6  	"github.com/jfrog/jfrog-cli-core/v2/common/build"
     7  	"github.com/jfrog/jfrog-cli-core/v2/utils/config"
     8  	"github.com/jfrog/jfrog-client-go/utils/errorutils"
     9  )
    10  
    11  type PullCommand struct {
    12  	ContainerCommand
    13  }
    14  
    15  func NewPullCommand(containerManagerType container.ContainerManagerType) *PullCommand {
    16  	return &PullCommand{
    17  		ContainerCommand: ContainerCommand{
    18  			containerManagerType: containerManagerType,
    19  		},
    20  	}
    21  }
    22  
    23  func (pc *PullCommand) Run() error {
    24  	if err := pc.init(); err != nil {
    25  		return err
    26  	}
    27  	if pc.containerManagerType == container.DockerClient {
    28  		err := container.ValidateClientApiVersion()
    29  		if err != nil {
    30  			return err
    31  		}
    32  	}
    33  	serverDetails, err := pc.ServerDetails()
    34  	if errorutils.CheckError(err) != nil {
    35  		return err
    36  	}
    37  	// Perform login
    38  	if err := pc.PerformLogin(serverDetails, pc.containerManagerType); err != nil {
    39  		return err
    40  	}
    41  	// Perform pull.
    42  	cm := container.NewManager(pc.containerManagerType)
    43  	err = cm.RunNativeCmd(pc.cmdParams)
    44  	if err != nil {
    45  		return err
    46  	}
    47  	toCollect, err := pc.buildConfiguration.IsCollectBuildInfo()
    48  	if err != nil || !toCollect {
    49  		return err
    50  	}
    51  	buildName, err := pc.buildConfiguration.GetBuildName()
    52  	if err != nil {
    53  		return err
    54  	}
    55  	buildNumber, err := pc.buildConfiguration.GetBuildNumber()
    56  	if err != nil {
    57  		return err
    58  	}
    59  	project := pc.BuildConfiguration().GetProject()
    60  	serviceManager, err := utils.CreateServiceManager(serverDetails, -1, 0, false)
    61  	if err != nil {
    62  		return err
    63  	}
    64  	repo, err := pc.GetRepo()
    65  	if err != nil {
    66  		return err
    67  	}
    68  	builder, err := container.NewLocalAgentBuildInfoBuilder(pc.image, repo, buildName, buildNumber, project, serviceManager, container.Pull, cm)
    69  	if err != nil {
    70  		return err
    71  	}
    72  	if err := build.SaveBuildGeneralDetails(buildName, buildNumber, project); err != nil {
    73  		return err
    74  	}
    75  	buildInfoModule, err := builder.Build(pc.BuildConfiguration().GetModule())
    76  	if err != nil || buildInfoModule == nil {
    77  		return err
    78  	}
    79  	return build.SaveBuildInfo(buildName, buildNumber, project, buildInfoModule)
    80  }
    81  
    82  func (pc *PullCommand) CommandName() string {
    83  	return "rt_docker_pull"
    84  }
    85  
    86  func (pc *PullCommand) ServerDetails() (*config.ServerDetails, error) {
    87  	return pc.serverDetails, nil
    88  }