private async Task DecorateBlueprintPackage()

in src/Microsoft.Atlas.CommandLine/Blueprints/BlueprintManager.cs [88:130]


        private async Task<IBlueprintPackage> DecorateBlueprintPackage(IBlueprintPackage blueprintPackageCore)
        {
            var blueprintInfo = new WorkflowInfoDocument();

            var blueprintPackage = blueprintPackageCore;

            if (blueprintPackage.Exists("readme.md"))
            {
                var readmeText = blueprintPackageCore.OpenText("readme.md").ReadToEnd();
                var readmeDoc = Markdig.Markdown.Parse(readmeText);

                var codeBlocks = readmeDoc.OfType<FencedCodeBlock>();
                var yamlBlocks = codeBlocks.Where(cb => string.Equals(cb.Info, "yaml", StringComparison.Ordinal));

                if (yamlBlocks.Any())
                {
                    var yamlLines = yamlBlocks.SelectMany(yaml => yaml.Lines.Lines);
                    var yamlText = yamlLines.Aggregate(string.Empty, (a, b) => $"{a}{b}{Environment.NewLine}");

                    blueprintInfo = _yamlSerializers.YamlDeserializer.Deserialize<WorkflowInfoDocument>(yamlText);
                }

                blueprintPackage = new GeneratedReadmeBlueprintDecorator(blueprintPackage, string.Empty);
            }

            foreach (var swaggerInfo in blueprintInfo.swagger.Values)
            {
                foreach (var decoratorProvider in _decoratorProviders)
                {
                    blueprintPackage = await decoratorProvider.CreateDecorator(swaggerInfo, blueprintPackage);
                }
            }

            foreach (var dependencyInfo in blueprintInfo.workflows.Values)
            {
                foreach (var decoratorProvider in _decoratorProviders)
                {
                    blueprintPackage = await decoratorProvider.CreateDecorator(dependencyInfo, blueprintPackage);
                }
            }

            return blueprintPackage;
        }