controllers/qualitygate/chain/create_qualitygate.go (37 lines of code) (raw):
package chain
import (
"context"
"fmt"
ctrl "sigs.k8s.io/controller-runtime"
sonarApi "github.com/epam/edp-sonar-operator/api/v1alpha1"
"github.com/epam/edp-sonar-operator/pkg/client/sonar"
)
// CreateQualityGate is a handler for creating quality gate.
type CreateQualityGate struct {
sonarApiClient sonar.QualityGateClient
}
// NewCreateQualityGate creates an instance of CreateQualityGate handler.
func NewCreateQualityGate(sonarApiClient sonar.QualityGateClient) *CreateQualityGate {
return &CreateQualityGate{sonarApiClient: sonarApiClient}
}
// ServeRequest implements the logic of creating quality gate.
func (h CreateQualityGate) ServeRequest(ctx context.Context, gate *sonarApi.SonarQualityGate) error {
log := ctrl.LoggerFrom(ctx).WithValues("name", gate.Spec.Name)
log.Info("Start creating quality gate")
sonarGate, err := h.sonarApiClient.GetQualityGate(ctx, gate.Spec.Name)
if err != nil {
if !sonar.IsErrNotFound(err) {
return fmt.Errorf("failed to get quality gate: %w", err)
}
log.Info("Quality gate doesn't exist, creating new one")
if sonarGate, err = h.sonarApiClient.CreateQualityGate(ctx, gate.Spec.Name); err != nil {
return fmt.Errorf("failed to create quality gate: %w", err)
}
log.Info("Quality gate has been created")
}
if gate.Spec.Default && gate.Spec.Default != sonarGate.IsDefault {
log.Info("Updating default quality gate")
if err = h.sonarApiClient.SetAsDefaultQualityGate(ctx, gate.Spec.Name); err != nil {
return fmt.Errorf("failed to set default quality gate: %w", err)
}
log.Info("Default quality gate has been updated")
}
return nil
}