pkg/event_processor/codebase.go (48 lines of code) (raw):
package event_processor
import (
"context"
"errors"
"fmt"
"strings"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
ctrlClient "sigs.k8s.io/controller-runtime/pkg/client"
codebaseApi "github.com/epam/edp-codebase-operator/v2/api/v1"
)
const (
CodebaseListLimit = 1000
)
// GetCodebaseByRepoPath returns codebase by repository path.
func GetCodebaseByRepoPath(ctx context.Context, client ctrlClient.Reader, ns, repoPath string) (*codebaseApi.Codebase, error) {
codebaseList := &codebaseApi.CodebaseList{}
if err := client.List(ctx, codebaseList, ctrlClient.InNamespace(ns), ctrlClient.Limit(CodebaseListLimit)); err != nil {
return nil, fmt.Errorf("unable to get codebase list: %w", err)
}
for n := range codebaseList.Items {
if strings.EqualFold(codebaseList.Items[n].Spec.GitUrlPath, repoPath) {
return &codebaseList.Items[n], nil
}
}
return nil, fmt.Errorf("codebase with repository path %s not found", repoPath)
}
// ConvertRepositoryPath converts repository path to the format which is used in codebase.
func ConvertRepositoryPath(repo string) string {
if !strings.HasPrefix(repo, "/") {
repo = "/" + repo
}
return strings.ToLower(repo)
}
const GitServerTokenField = "token"
func GetGitServerToken(ctx context.Context, client ctrlClient.Reader, codebase *codebaseApi.Codebase) (string, error) {
gitServer := &codebaseApi.GitServer{}
if err := client.Get(ctx, types.NamespacedName{Namespace: codebase.Namespace, Name: codebase.Spec.GitServer}, gitServer); err != nil {
return "", fmt.Errorf("failed to get GitServer: %w", err)
}
gitServerSecret := &corev1.Secret{}
if err := client.Get(ctx, types.NamespacedName{Namespace: codebase.Namespace, Name: gitServer.Spec.NameSshKeySecret}, gitServerSecret); err != nil {
return "", fmt.Errorf("failed to get GitServer secret: %w", err)
}
token := string(gitServerSecret.Data[GitServerTokenField])
if token == "" {
return "", errors.New("token is empty in GitServer secret")
}
return token, nil
}