func()

in controllers/codebasebranch/chain/check_commit_hash.go [26:101]


func (c CheckCommitHashExists) ServeRequest(ctx context.Context, codebaseBranch *codebaseApi.CodebaseBranch) error {
	log := ctrl.LoggerFrom(ctx).WithName("check-commit-hash-exists")

	if codebaseBranch.Status.Git == codebaseApi.CodebaseBranchGitStatusBranchCreated {
		log.Info("Branch is already created in git. Skip checking commit hash existence")

		return c.next(ctx, codebaseBranch)
	}

	if codebaseBranch.Spec.FromCommit == "" {
		return c.next(ctx, codebaseBranch)
	}

	codebase := &codebaseApi.Codebase{}
	if err := c.Client.Get(
		ctx,
		client.ObjectKey{
			Namespace: codebaseBranch.Namespace,
			Name:      codebaseBranch.Spec.CodebaseName,
		},
		codebase,
	); err != nil {
		return c.processErr(codebaseBranch, fmt.Errorf("failed to get codebase %s: %w", codebaseBranch.Spec.CodebaseName, err))
	}

	gitServer := &codebaseApi.GitServer{}
	if err := c.Client.Get(
		ctx,
		client.ObjectKey{
			Namespace: codebaseBranch.Namespace,
			Name:      codebase.Spec.GitServer,
		},
		gitServer,
	); err != nil {
		return c.processErr(codebaseBranch, fmt.Errorf("failed to get git server %s: %w", codebase.Spec.GitServer, err))
	}

	secret := &corev1.Secret{}
	if err := c.Client.Get(
		ctx,
		client.ObjectKey{
			Namespace: codebaseBranch.Namespace,
			Name:      gitServer.Spec.NameSshKeySecret,
		},
		secret,
	); err != nil {
		return c.processErr(codebaseBranch, fmt.Errorf("failed to get secret %s: %w", gitServer.Spec.NameSshKeySecret, err))
	}

	workDir := util.GetWorkDir(codebaseBranch.Spec.CodebaseName, fmt.Sprintf("%v-%v", codebaseBranch.Namespace, codebaseBranch.Spec.BranchName))
	if !DirectoryExistsNotEmpty(workDir) {
		repoSshUrl := util.GetSSHUrl(gitServer, codebase.Spec.GetProjectID())

		if err := c.Git.CloneRepositoryBySsh(
			ctx,
			string(secret.Data[util.PrivateSShKeyName]),
			gitServer.Spec.GitUser,
			repoSshUrl,
			workDir,
			gitServer.Spec.SshPort,
		); err != nil {
			return c.processErr(codebaseBranch, fmt.Errorf("failed to clone repository: %w", err))
		}
	}

	exists, err := c.Git.CommitExists(workDir, codebaseBranch.Spec.FromCommit)
	if err != nil {
		return c.processErr(codebaseBranch, fmt.Errorf("failed to check commit hash %s: %w", codebaseBranch.Spec.FromCommit, err))
	}

	if !exists {
		return c.processErr(codebaseBranch, fmt.Errorf("commit %s doesn't exist", codebaseBranch.Spec.FromCommit))
	}

	return c.next(ctx, codebaseBranch)
}