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
}