func()

in internal/execution/executor.go [204:247]


func (e *Executor) updateComposition(ctx context.Context, env *Env, oldComp *apiv1.Composition, syn *apiv1.Synthesizer, refs []*apiv1.ResourceSliceRef, revs []apiv1.InputRevisions, rl *krmv1.ResourceList) error {
	logger := logr.FromContextOrDiscard(ctx)
	return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
		comp := &apiv1.Composition{}
		err := e.Reader.Get(ctx, client.ObjectKeyFromObject(oldComp), comp)
		if err != nil {
			return err
		}

		now := metav1.Now()
		comp.Status.InFlightSynthesis.Synthesized = &now
		comp.Status.InFlightSynthesis.ResourceSlices = refs
		comp.Status.InFlightSynthesis.ObservedSynthesizerGeneration = syn.Generation
		comp.Status.InFlightSynthesis.InputRevisions = revs
		comp.Status.InFlightSynthesis.Results = nil
		for _, result := range rl.Results {
			comp.Status.InFlightSynthesis.Results = append(comp.Status.InFlightSynthesis.Results, apiv1.Result{
				Message:  result.Message,
				Severity: result.Severity,
				Tags:     result.Tags,
			})
		}

		if reason, skip := skipSynthesis(comp, syn, env); skip {
			logger.V(0).Info("synthesis is no longer relevant - discarding its output", "reason", reason)
			return nil
		}

		// Swap pending->current->previous syntheses
		if findResultError(rl) == nil {
			comp.Status.PreviousSynthesis = comp.Status.CurrentSynthesis
			comp.Status.CurrentSynthesis = comp.Status.InFlightSynthesis
			comp.Status.InFlightSynthesis = nil
		}

		err = e.Writer.Status().Update(ctx, comp)
		if err != nil {
			return err
		}

		logger.V(0).Info("composition status has been updated following successful synthesis")
		return nil
	})
}