private PipelineConvention GetPipelineConvention(string convention, PipelineGenerationContext context) { var normalizedConvention = convention.ToLower(); switch (normalizedConvention) { case "ci": var ciLogger = serviceProvider.GetService <ILogger <PullRequestValidationPipelineConvention> >(); return(new PullRequestValidationPipelineConvention(ciLogger, context)); case "up": var upLogger = serviceProvider.GetService <ILogger <UnifiedPipelineConvention> >(); return(new UnifiedPipelineConvention(upLogger, context)); case "tests": var testLogger = serviceProvider.GetService <ILogger <IntegrationTestingPipelineConvention> >(); return(new IntegrationTestingPipelineConvention(testLogger, context)); case "weekly": var weeklyTestLogger = serviceProvider.GetService <ILogger <WeeklyIntegrationTestingPipelineConvention> >(); return(new WeeklyIntegrationTestingPipelineConvention(weeklyTestLogger, context)); default: throw new ArgumentOutOfRangeException(nameof(convention), "Could not find matching convention."); } }
public async Task <ExitCondition> RunAsync( string organization, string project, string prefix, string path, string patvar, string endpoint, string repository, string branch, string agentPool, string convention, string[] variableGroups, string devOpsPath, bool whatIf, bool open, bool destroy, CancellationToken cancellationToken) { try { logger.LogDebug("Creating context."); // Fall back to a form of prefix if DevOps path is not specified var devOpsPathValue = string.IsNullOrEmpty(devOpsPath) ? $"\\{prefix}" : devOpsPath; var context = new PipelineGenerationContext( organization, project, patvar, endpoint, repository, branch, agentPool, variableGroups, devOpsPathValue, prefix, whatIf ); var pipelineConvention = GetPipelineConvention(convention, context); var components = ScanForComponents(path, pipelineConvention.SearchPattern); if (components.Count() == 0) { logger.LogWarning("No components were found."); return(ExitCondition.NoComponentsFound); } logger.LogInformation("Found {0} components", components.Count()); foreach (var component in components) { logger.LogInformation("Processing component '{0}' in '{1}'.", component.Name, component.Path); if (destroy) { var definition = await pipelineConvention.DeleteDefinitionAsync(component, cancellationToken); } else { var definition = await pipelineConvention.CreateOrUpdateDefinitionAsync(component, cancellationToken); if (open) { OpenBrowser(definition.GetWebUrl()); } } } return(ExitCondition.Success); } catch (Exception ex) { logger.LogCritical(ex, "BOOM! Something went wrong, try running with --debug."); return(ExitCondition.Exception); } }
public IntegrationTestingPipelineConvention(ILogger logger, PipelineGenerationContext context) : base(logger, context) { }
public async Task <ExitCondition> RunAsync( string organization, string project, string prefix, string path, string patvar, string endpoint, string repository, string branch, string agentPool, string convention, string[] variableGroups, bool whatIf, bool open, bool destroy, CancellationToken cancellationToken) { try { logger.LogDebug("Creating context."); var context = new PipelineGenerationContext( organization, project, patvar, endpoint, repository, branch, agentPool, variableGroups, prefix, whatIf ); var pipelineConvention = GetPipelineConvention(convention, context); var components = ScanForComponents(path, pipelineConvention.SearchPattern); if (components.Count() == 0) { logger.LogWarning("No components were found."); return(ExitCondition.NoComponentsFound); } logger.LogInformation("Found {0} components", components.Count()); foreach (var component in components) { logger.LogInformation("Processing component '{0}' in '{1}'.", component.Name, component.Path); if (destroy) { var definition = await pipelineConvention.DeleteDefinitionAsync(component, cancellationToken); } else { var definition = await pipelineConvention.CreateOrUpdateDefinitionAsync(component, cancellationToken); if (open) { if (open && Environment.OSVersion.Platform == PlatformID.Win32NT) { logger.LogDebug("Launching browser window for: {0}", definition.GetWebUrl()); var processStartInfo = new ProcessStartInfo() { FileName = definition.GetWebUrl(), UseShellExecute = true }; // TODO: Need to test this on macOS and Linux. System.Diagnostics.Process.Start(processStartInfo); } } } } return(ExitCondition.Success); } catch (Exception ex) { logger.LogCritical(ex, "BOOM! Something went wrong, try running with --debug."); return(ExitCondition.Exception); } }
public PullRequestValidationPipelineConvention(ILogger logger, PipelineGenerationContext context) : base(logger, context) { }
public PipelineConvention(ILogger logger, PipelineGenerationContext context) { Logger = logger; Context = context; }