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)
}