Exemplo n.º 1
0
        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.");
            }
        }
Exemplo n.º 2
0
        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)
 {
 }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
 public PullRequestValidationPipelineConvention(ILogger logger, PipelineGenerationContext context) : base(logger, context)
 {
 }
 public PipelineConvention(ILogger logger, PipelineGenerationContext context)
 {
     Logger  = logger;
     Context = context;
 }