controllers/codebasebranch/service/codebasebranch.go (52 lines of code) (raw):
package service
import (
"context"
"errors"
"fmt"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
codebaseApi "github.com/epam/edp-codebase-operator/v2/api/v1"
"github.com/epam/edp-codebase-operator/v2/pkg/util"
)
var log = ctrl.Log.WithName("codebase_branch_service")
type CodebaseBranchService interface {
AppendVersionToTheHistorySlice(*codebaseApi.CodebaseBranch) error
ResetBranchBuildCounter(*codebaseApi.CodebaseBranch) error
ResetBranchSuccessBuildCounter(*codebaseApi.CodebaseBranch) error
updateStatus(*codebaseApi.CodebaseBranch) error
}
type CodebaseBranchServiceProvider struct {
Client client.Client
}
var ErrJobFailed = errors.New("deletion job failed")
func (s *CodebaseBranchServiceProvider) AppendVersionToTheHistorySlice(b *codebaseApi.CodebaseBranch) error {
if b.Spec.Version == nil {
return nil
}
v := b.Spec.Version
b.Status.VersionHistory = append(b.Status.VersionHistory, *v)
return s.updateStatus(b)
}
func (s *CodebaseBranchServiceProvider) ResetBranchBuildCounter(cb *codebaseApi.CodebaseBranch) error {
if cb.Status.Build == nil {
return nil
}
cb.Status.Build = util.GetStringP("0")
return s.updateStatus(cb)
}
func (s *CodebaseBranchServiceProvider) ResetBranchSuccessBuildCounter(cb *codebaseApi.CodebaseBranch) error {
if cb.Status.LastSuccessfulBuild == nil {
return nil
}
cb.Status.LastSuccessfulBuild = nil
return s.updateStatus(cb)
}
func (s *CodebaseBranchServiceProvider) updateStatus(cb *codebaseApi.CodebaseBranch) error {
if err := s.Client.Status().Update(context.TODO(), cb); err != nil {
if err = s.Client.Update(context.TODO(), cb); err != nil {
return fmt.Errorf("failed to update codebase branch status: %w", err)
}
}
log.V(2).Info("codebase branch status has been updated", "name", cb.Name)
return nil
}