func()

in internal/execution/executor.go [30:78]


func (e *Executor) Synthesize(ctx context.Context, env *Env) error {
	logger := logr.FromContextOrDiscard(ctx)

	comp := &apiv1.Composition{}
	comp.Name = env.CompositionName
	comp.Namespace = env.CompositionNamespace
	err := e.Reader.Get(ctx, client.ObjectKeyFromObject(comp), comp)
	if err != nil {
		return fmt.Errorf("fetching composition: %w", err)
	}

	syn := &apiv1.Synthesizer{}
	syn.Name = comp.Spec.Synthesizer.Name
	err = e.Reader.Get(ctx, client.ObjectKeyFromObject(syn), syn)
	if err != nil {
		return fmt.Errorf("fetching synthesizer: %w", err)
	}

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

	input, revs, err := e.buildPodInput(ctx, comp, syn)
	if err != nil {
		return fmt.Errorf("building synthesizer input: %w", err)
	}

	output, err := e.Handler(ctx, syn, input)
	if err != nil {
		return fmt.Errorf("executing synthesizer: %w", err)
	}
	resultErr := findResultError(output)

	var sliceRefs []*apiv1.ResourceSliceRef
	if resultErr == nil {
		sliceRefs, err = e.writeSlices(ctx, comp, output)
		if err != nil {
			return err
		}
	}

	err = e.updateComposition(ctx, env, comp, syn, sliceRefs, revs, output)
	if err != nil {
		return err
	}

	return resultErr
}