pkg/client/sonar/quality_profile.go (96 lines of code) (raw):

package sonar import ( "context" "fmt" "net/http" ) type QualityProfile struct { Key string `json:"key"` Name string `json:"name"` Language string `json:"language"` IsDefault bool `json:"isDefault"` } // CreateQualityProfile creates a new quality profile. func (sc *Client) CreateQualityProfile(ctx context.Context, name, language string) (*QualityProfile, error) { profile := struct { Profile QualityProfile `json:"profile"` }{} resp, err := sc.startRequest(ctx). SetFormData(map[string]string{ nameField: name, "language": language, }). SetResult(&profile). Post("/qualityprofiles/create") if err = sc.checkError(resp, err); err != nil { return nil, fmt.Errorf("failed to create quality profile: %w", err) } return &profile.Profile, nil } // GetQualityProfile returns the quality profile with the given name. func (sc *Client) GetQualityProfile(ctx context.Context, name string) (*QualityProfile, error) { profiles := struct { Profiles []QualityProfile `json:"profiles"` }{} resp, err := sc.startRequest(ctx). SetQueryParam("qualityProfile", name). SetResult(&profiles). Get("/qualityprofiles/search") if err = sc.checkError(resp, err); err != nil { return nil, fmt.Errorf("failed to get quality profile: %w", err) } for _, profile := range profiles.Profiles { if profile.Name == name { return &profile, nil } } return nil, NewHTTPError(http.StatusNotFound, fmt.Sprintf("quality profile %s not found", name)) } // DeleteQualityProfile deletes the quality profile with the given name and language. func (sc *Client) DeleteQualityProfile(ctx context.Context, name, language string) error { resp, err := sc.startRequest(ctx). SetFormData(map[string]string{ nameField: name, "language": language, }). Post("/qualityprofiles/delete") if err = sc.checkError(resp, err); err != nil { return fmt.Errorf("failed to delete quality profile: %w", err) } return nil } // SetAsDefaultQualityProfile sets the quality profile with the given name and language as default. func (sc *Client) SetAsDefaultQualityProfile(ctx context.Context, name, language string) error { resp, err := sc.startRequest(ctx). SetFormData(map[string]string{ "qualityProfile": name, "language": language, }). Post("/qualityprofiles/set_default") if err = sc.checkError(resp, err); err != nil { return fmt.Errorf("failed to set default quality profile: %w", err) } return nil } // ActivateQualityProfileRule activates the rule in the quality profile. func (sc *Client) ActivateQualityProfileRule(ctx context.Context, profileKey string, rule Rule) error { resp, err := sc.startRequest(ctx). SetFormData(map[string]string{ "key": profileKey, "rule": rule.Rule, "severity": rule.Severity, "params": rule.Params, }). Post("/qualityprofiles/activate_rule") if err = sc.checkError(resp, err); err != nil { return fmt.Errorf("failed to activate rule %s: %w", rule.Key, err) } return nil } // DeactivateQualityProfileRule deactivates the rule in the quality profile. func (sc *Client) DeactivateQualityProfileRule(ctx context.Context, profileKey, ruleKey string) error { resp, err := sc.startRequest(ctx). SetFormData(map[string]string{ "key": profileKey, "rule": ruleKey, }). Post("/qualityprofiles/deactivate_rule") if err = sc.checkError(resp, err); err != nil { return fmt.Errorf("failed to deactivate rule %s: %w", ruleKey, err) } return nil }