in controllers/qualityprofile/chain/sync_qualityprofile_rules.go [24:73]
func (h SyncQualityProfileRules) ServeRequest(ctx context.Context, profile *sonarApi.SonarQualityProfile) error {
log := ctrl.LoggerFrom(ctx).WithValues("name", profile.Spec.Name)
log.Info("Start syncing quality profile rules")
sonarProfile, err := h.sonarApiClient.GetQualityProfile(ctx, profile.Spec.Name)
if err != nil {
return fmt.Errorf("failed to get quality profile: %w", err)
}
activeRules, err := h.sonarApiClient.GetQualityProfileActiveRules(ctx, sonarProfile.Key)
if err != nil {
return fmt.Errorf("failed to get quality profile active rules: %w", err)
}
existingRulesMap := rulesToMap(activeRules)
for ruleKey, rule := range profile.Spec.Rules {
_, ok := existingRulesMap[ruleKey]
if ok {
delete(existingRulesMap, ruleKey)
continue
}
log.Info("Activating quality profile rule", "rule", ruleKey)
if err = h.sonarApiClient.ActivateQualityProfileRule(
ctx,
sonarProfile.Key,
sonar.Rule{
Rule: ruleKey,
Severity: rule.Severity,
Params: rule.Params,
},
); err != nil {
return fmt.Errorf("failed to acticate rule: %w", err)
}
}
for ruleKey := range existingRulesMap {
log.Info("Deactivating quality profile rule", "rule", ruleKey)
if err = h.sonarApiClient.DeactivateQualityProfileRule(ctx, sonarProfile.Key, ruleKey); err != nil {
return fmt.Errorf("failed to deactivate quality profile rule: %w", err)
}
}
log.Info("Quality profile rules have been synced")
return nil
}