func()

in controllers/codebase/service/chain/put_project.go [45:104]


func (h *PutProject) ServeRequest(ctx context.Context, codebase *codebaseApi.Codebase) error {
	log := ctrl.LoggerFrom(ctx).WithValues("projectID", codebase.Spec.GetProjectID())

	if h.skip(ctx, codebase) {
		return nil
	}

	log.Info("Start putting project", "spec", codebase.Spec)

	err := setIntermediateSuccessFields(ctx, h.client, codebase, codebaseApi.GerritRepositoryProvisioning)
	if err != nil {
		return fmt.Errorf("failed to update Codebase %v status: %w", codebase.Name, err)
	}

	wd := util.GetWorkDir(codebase.Name, codebase.Namespace)

	if err = util.CreateDirectory(wd); err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())

		return fmt.Errorf("failed to create dir %q: %w", wd, err)
	}

	gitServer := &codebaseApi.GitServer{}
	if err = h.client.Get(
		ctx,
		client.ObjectKey{Name: codebase.Spec.GitServer, Namespace: codebase.Namespace},
		gitServer,
	); err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())

		return fmt.Errorf("failed to get GitServer %s: %w", codebase.Spec.GitServer, err)
	}

	err = h.initialProjectProvisioning(ctx, codebase, wd)
	if err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())
		return fmt.Errorf("failed to perform initial provisioning of codebase %v: %w", codebase.Name, err)
	}

	if err = h.checkoutBranch(ctrl.LoggerInto(ctx, log), codebase, wd); err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())
		return err
	}

	err = h.createProject(ctrl.LoggerInto(ctx, log), codebase, gitServer, wd)
	if err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())
		return fmt.Errorf("failed to create project: %w", err)
	}

	codebase.Status.Git = util.ProjectPushedStatus
	if err = h.client.Status().Update(ctx, codebase); err != nil {
		setFailedFields(codebase, codebaseApi.GerritRepositoryProvisioning, err.Error())
		return fmt.Errorf("failed to set git status %s for codebase %s: %w", util.ProjectPushedStatus, codebase.Name, err)
	}

	log.Info("Finish putting project")

	return nil
}