func()

in controllers/codebaseimagestream/chain/put_cd_stage_deploy.go [92:134]


func (h PutCDStageDeploy) putCDStageDeploy(ctx context.Context, envLabel, namespace string, spec codebaseApi.CodebaseImageStreamSpec) error {
	l := ctrl.LoggerFrom(ctx)
	// use name for CDStageDeploy, it is converted from envLabel and cdpipeline/stage now is cdpipeline-stage
	name := strings.ReplaceAll(envLabel, "/", "-")
	env := strings.Split(envLabel, "/")
	pipeline := env[0]
	stage := env[1]
	stageCrName := fmt.Sprintf("%s-%s", pipeline, stage)

	stageCr := &pipelineApi.Stage{}
	if err := h.client.Get(
		ctx,
		types.NamespacedName{
			Name:      stageCrName,
			Namespace: namespace,
		},
		stageCr,
	); err != nil {
		return fmt.Errorf("failed to get CDStage %s: %w", stageCrName, err)
	}

	skip, err := h.skipCDStageDeployCreation(ctx, pipeline, namespace, stageCr)
	if err != nil {
		return fmt.Errorf("failed to check if CDStageDeploy exists: %w", err)
	}

	if skip {
		l.Info("Skip CDStageDeploy creation.")

		return nil
	}

	cdsd, err := getCreateCommand(ctx, pipeline, stage, name, namespace, spec.Codebase, stageCr.Spec.TriggerType, spec.Tags)
	if err != nil {
		return fmt.Errorf("failed to construct command to create %v cd stage deploy: %w", name, err)
	}

	if err = h.create(ctx, cdsd, stageCr); err != nil {
		return fmt.Errorf("failed to create %v cd stage deploy: %w", name, err)
	}

	return nil
}