func()

in custom-targets/infrastructure-manager/im-deployer/deploy.go [85:130]


func (d *deployer) deploy(ctx context.Context) (*clouddeploy.DeployResult, error) {
	renderedDeploymentPath := path.Join(srcPath, renderedDeploymentFileName)
	fmt.Printf("Downloading rendered Deployment to %s\n", renderedDeploymentPath)
	dURI, err := d.req.DownloadInput(ctx, d.gcsClient, renderedDeploymentFileName, renderedDeploymentPath)
	if err != nil {
		return nil, fmt.Errorf("unable to download rendered deployment with object suffix %s: %v", renderedDeploymentFileName, err)
	}
	fmt.Printf("Downloaded rendered Deployment from %s\n", dURI)
	rd, err := renderedDeployment(renderedDeploymentPath)
	if err != nil {
		return nil, fmt.Errorf("error parsing rendered deployment: %v", err)
	}
	deployment, err := d.applyDeployment(ctx, rd)
	if err != nil {
		return nil, err
	}
	revName := deployment.LatestRevision
	fmt.Printf("Created latest Revision %s\n", revName)

	// Ensure the Deployment reached a terminal state after creating/updating it. If for some reason it's still in
	// progress then we poll it until it reaches a terminal state. The polling logic checks whether the latest revision
	// changes in case the Deployment is updated outside the context of this deployer.
	if isInProgressDeployment(deployment.State) {
		fmt.Printf("Polling Deployment %s until a terminal state is reached, current state: %s\n", deployment.Name, deployment.State.String())
		var err error
		deployment, err = pollDeploymentUntilTerminal(ctx, d.imClient, deployment.Name, revName)
		if err != nil {
			return nil, err
		}
		fmt.Printf("Finished polling Deployment %s until terminal state, current state: %s\n", deployment.Name, deployment.State.String())
	}

	fmt.Printf("Retrieving Revision %s\n", revName)
	rev, err := getRevision(ctx, d.imClient, revName)
	if err != nil {
		return nil, fmt.Errorf("error getting revision %s: %v", revName, err)
	}
	fmt.Printf("Revision %s executed in Cloud Build %s\n", revName, rev.Build)

	if isSucceededDeployment(deployment.State) {
		fmt.Printf("Deployment Succeeded with latest Revision %s\n", revName)
		return processDeploymentSucceeded(ctx, deployment, rev)
	}
	fmt.Printf("Deployment Failed with latest Revision %s\n", revName)
	return nil, processDeploymentFailed(ctx, deployment, rev)
}