private bool FetchArgumentsAndRulesets(ProcessedArgs args, TeamBuildSettings settings, out IDictionary <string, string> serverSettings, out AnalyzerSettings analyzerSettings) { string hostUrl = args.GetSetting(SonarProperties.HostUrl); serverSettings = null; analyzerSettings = null; ISonarQubeServer server = this.factory.CreateSonarQubeServer(args, this.logger); try { this.logger.LogInfo(Resources.MSG_FetchingAnalysisConfiguration); // Respect sonar.branch setting if set string projectBranch = null; args.TryGetSetting(SonarProperties.ProjectBranch, out projectBranch); // Fetch the SonarQube project properties serverSettings = server.GetProperties(args.ProjectKey, projectBranch); // Generate the FxCop rulesets this.logger.LogInfo(Resources.MSG_GeneratingRulesets); GenerateFxCopRuleset(server, args.ProjectKey, projectBranch, "csharp", "cs", "fxcop", Path.Combine(settings.SonarConfigDirectory, FxCopCSharpRuleset)); GenerateFxCopRuleset(server, args.ProjectKey, projectBranch, "vbnet", "vbnet", "fxcop-vbnet", Path.Combine(settings.SonarConfigDirectory, FxCopVBNetRuleset)); IAnalyzerProvider analyzerProvider = this.factory.CreateAnalyzerProvider(this.logger); Debug.Assert(analyzerProvider != null, "Factory should not return null"); analyzerSettings = analyzerProvider.SetupAnalyzers(server, settings, args.ProjectKey, projectBranch); } catch (WebException ex) { if (Utilities.HandleHostUrlWebException(ex, hostUrl, this.logger)) { return(false); } throw; } finally { Utilities.SafeDispose(server); } return(true); }
/// <summary> /// Performs any additional validation on the parsed arguments and logs errors /// if necessary. /// </summary> /// <returns>True if the arguments are valid, otherwise false</returns> private static bool AreParsedArgumentsValid(ProcessedArgs args, ILogger logger) { bool areValid = true; string hostUrl; if (!args.TryGetSetting(SonarProperties.HostUrl, out hostUrl) || string.IsNullOrWhiteSpace(hostUrl)) { logger.LogError(Resources.ERROR_Args_UrlRequired); areValid = false; } string projectKey = args.ProjectKey; if (!IsValidProjectKey(projectKey)) { logger.LogError(Resources.ERROR_InvalidProjectKeyArg); areValid = false; } return(areValid); }
private bool FetchArgumentsAndRulesets(ProcessedArgs args, TeamBuildSettings settings, out IDictionary<string, string> serverSettings, out AnalyzerSettings analyzerSettings) { string hostUrl = args.GetSetting(SonarProperties.HostUrl); serverSettings = null; analyzerSettings = null; ISonarQubeServer server = this.factory.CreateSonarQubeServer(args, this.logger); try { this.logger.LogInfo(Resources.MSG_FetchingAnalysisConfiguration); // Respect sonar.branch setting if set string projectBranch = null; args.TryGetSetting(SonarProperties.ProjectBranch, out projectBranch); // Fetch the SonarQube project properties serverSettings = server.GetProperties(args.ProjectKey, projectBranch); // Generate the FxCop rulesets this.logger.LogInfo(Resources.MSG_GeneratingRulesets); GenerateFxCopRuleset(server, args.ProjectKey, projectBranch, "csharp", "cs", "fxcop", Path.Combine(settings.SonarConfigDirectory, FxCopCSharpRuleset)); GenerateFxCopRuleset(server, args.ProjectKey, projectBranch, "vbnet", "vbnet", "fxcop-vbnet", Path.Combine(settings.SonarConfigDirectory, FxCopVBNetRuleset)); IAnalyzerProvider analyzerProvider = this.factory.CreateAnalyzerProvider(this.logger); Debug.Assert(analyzerProvider != null, "Factory should not return null"); analyzerSettings = analyzerProvider.SetupAnalyzers(server, settings, args.ProjectKey, projectBranch); } catch (WebException ex) { if (Utilities.HandleHostUrlWebException(ex, hostUrl, this.logger)) { return false; } throw; } finally { Utilities.SafeDispose(server); } return true; }
private bool FetchArgumentsAndRulesets(ISonarQubeServer server, ProcessedArgs args, TeamBuildSettings settings, out IDictionary <string, string> serverSettings, out List <AnalyzerSettings> analyzersSettings) { serverSettings = null; analyzersSettings = new List <AnalyzerSettings>(); try { this.logger.LogInfo(Resources.MSG_FetchingAnalysisConfiguration); // Respect sonar.branch setting if set string projectBranch = null; args.TryGetSetting(SonarProperties.ProjectBranch, out projectBranch); // Fetch the SonarQube project properties serverSettings = server.GetProperties(args.ProjectKey, projectBranch); // Fetch installed plugins IEnumerable <string> availableLanguages = server.GetAllLanguages(); foreach (PluginDefinition plugin in plugins) { if (!availableLanguages.Contains(plugin.Language)) { continue; } // Fetch project quality profile string qualityProfile; if (!server.TryGetQualityProfile(args.ProjectKey, projectBranch, args.Organization, plugin.Language, out qualityProfile)) { this.logger.LogDebug(Resources.RAP_NoQualityProfile, plugin.Language, args.ProjectKey); continue; } // Fetch rules (active and not active) IList <ActiveRule> activeRules = server.GetActiveRules(qualityProfile); if (!activeRules.Any()) { this.logger.LogDebug(Resources.RAP_NoActiveRules, plugin.Language); continue; } IList <string> inactiveRules = server.GetInactiveRules(qualityProfile, plugin.Language); // Generate fxcop rulesets this.logger.LogInfo(Resources.MSG_GeneratingRulesets); string fxCopPath = Path.Combine(settings.SonarConfigDirectory, string.Format(FxCopRulesetName, plugin.Language)); if (plugin.Language.Equals(VBNetLanguage)) { GenerateFxCopRuleset("fxcop-vbnet", activeRules, fxCopPath); } else { GenerateFxCopRuleset("fxcop", activeRules, fxCopPath); } // Generate Roslyn analyzers settings and rulesets IAnalyzerProvider analyzerProvider = this.factory.CreateRoslynAnalyzerProvider(this.logger); Debug.Assert(analyzerProvider != null, "Factory should not return null"); // Will be null if the processing of server settings and active rules resulted in an empty ruleset AnalyzerSettings analyzer = analyzerProvider.SetupAnalyzer(settings, serverSettings, activeRules, inactiveRules, plugin.Language); if (analyzer != null) { analyzersSettings.Add(analyzer); } } } catch (WebException ex) { if (Utilities.HandleHostUrlWebException(ex, args.SonarQubeUrl, this.logger)) { return(false); } throw; } finally { Utilities.SafeDispose(server); } return(true); }
private bool FetchArgumentsAndRulesets(ISonarQubeServer server, ProcessedArgs args, TeamBuildSettings settings, out IDictionary <string, string> serverSettings, out List <AnalyzerSettings> analyzersSettings) { serverSettings = null; analyzersSettings = new List <AnalyzerSettings>(); try { logger.LogInfo(Resources.MSG_FetchingAnalysisConfiguration); // Respect sonar.branch setting if set args.TryGetSetting(SonarProperties.ProjectBranch, out string projectBranch); // Fetch the SonarQube project properties serverSettings = server.GetProperties(args.ProjectKey, projectBranch); // Fetch installed plugins var availableLanguages = server.GetAllLanguages(); foreach (var plugin in plugins) { if (!availableLanguages.Contains(plugin.Language)) { continue; } // Fetch project quality profile if (!server.TryGetQualityProfile(args.ProjectKey, projectBranch, args.Organization, plugin.Language, out string qualityProfile)) { logger.LogDebug(Resources.RAP_NoQualityProfile, plugin.Language, args.ProjectKey); continue; } // Fetch rules (active and not active) var activeRules = server.GetActiveRules(qualityProfile); if (!activeRules.Any()) { logger.LogDebug(Resources.RAP_NoActiveRules, plugin.Language); continue; } var inactiveRules = server.GetInactiveRules(qualityProfile, plugin.Language); // Generate Roslyn analyzers settings and rulesets var analyzerProvider = factory.CreateRoslynAnalyzerProvider(logger); Debug.Assert(analyzerProvider != null, "Factory should not return null"); // Will be null if the processing of server settings and active rules resulted in an empty ruleset var analyzer = analyzerProvider.SetupAnalyzer(settings, serverSettings, activeRules, inactiveRules, plugin.Language); if (analyzer != null) { analyzersSettings.Add(analyzer); } } } catch (WebException ex) { if (Utilities.HandleHostUrlWebException(ex, args.SonarQubeUrl, logger)) { return(false); } throw; } finally { Utilities.SafeDispose(server); } return(true); }
/// <summary> /// Performs any additional validation on the parsed arguments and logs errors /// if necessary. /// </summary> /// <returns>True if the arguments are valid, otherwise false</returns> private static bool AreParsedArgumentsValid(ProcessedArgs args, ILogger logger) { bool areValid = true; string hostUrl; if (!args.TryGetSetting(SonarProperties.HostUrl, out hostUrl) || string.IsNullOrWhiteSpace(hostUrl)) { logger.LogError(Resources.ERROR_Args_UrlRequired); areValid = false; } string projectKey = args.ProjectKey; if (!IsValidProjectKey(projectKey)) { logger.LogError(Resources.ERROR_InvalidProjectKeyArg); areValid = false; } return areValid; }