func()

in controllers/stage/chain/remove_labels_from_codebase_docker_streams.go [22:61]


func (h RemoveLabelsFromCodebaseDockerStreamsAfterCdPipelineUpdate) ServeRequest(ctx context.Context, stage *cdPipeApi.Stage) error {
	log := ctrl.LoggerFrom(ctx)
	if stage.IsManualTriggerType() {
		log.Info("Trigger type is not auto deploy, skipping")
		return nil
	}

	log.Info("start deleting environment labels from codebase image stream resources.")

	pipe, err := util.GetCdPipeline(h.client, stage)
	if err != nil {
		return fmt.Errorf("failed to get %v cd pipeline: %w", stage.Spec.CdPipeline, err)
	}

	annotations := pipe.GetAnnotations()[dockerStreamsBeforeUpdateAnnotationKey]
	if annotations == "" {
		log.Info("CodebaseImageStream doesn't contain %v annotation." +
			" skip deleting env labels from CodebaseImageStream resources")
		return nil
	}

	streams := strings.Split(annotations, ",")
	for _, v := range streams {
		stream, err := cluster.GetCodebaseImageStream(h.client, v, stage.Namespace)
		if err != nil {
			return fmt.Errorf("failed to get %v codebase image stream: %w", stream, err)
		}

		env := fmt.Sprintf("%v/%v", pipe.Name, stage.Spec.Name)
		deleteLabel(&stream.ObjectMeta, env)

		if err := h.client.Update(context.Background(), stream); err != nil {
			return fmt.Errorf("failed to update %v codebase image stream: %w", stream, err)
		}
	}

	log.Info("environment labels have been deleted from codebase image stream resources.")

	return nil
}