示例#1
0
        public IBlueprintPackage TryGetBlueprintPackage(IBlueprintPackage parent, string blueprint)
        {
            if (parent.Exists(_fileSystem.PathCombine(blueprint, "workflow.yaml")))
            {
                return(new DependencyBlueprintPackage(_fileSystem, parent, blueprint));
            }

            return(null);
        }
示例#2
0
 public override bool FileExists(string filePath)
 {
     return(_blueprintPackage.Exists(filePath));
 }
示例#3
0
 public bool Exists(string path) => _parent.Exists(ActualPath(path));
示例#4
0
        public (ITemplateEngine templateEngine, WorkflowModel workflow, object effectiveValues) Load(IBlueprintPackage blueprint, object values, Action <string, Action <TextWriter> > generateOutput)
        {
            var templateEngine = _templateEngineFactory.Create(new TemplateEngineOptions
            {
                FileSystem = new BlueprintPackageFileSystem(blueprint)
            });

            var providedValues = values;

            if (blueprint.Exists("values.yaml"))
            {
                using (var reader = blueprint.OpenText("values.yaml"))
                {
                    var defaultValues = _serializers.YamlDeserializer.Deserialize(reader);
                    if (values == null)
                    {
                        values = defaultValues;
                    }
                    else
                    {
                        values = MergeUtils.Merge(values, defaultValues);
                    }
                }
            }

            var premodelValues = values;

            if (blueprint.Exists("model.yaml"))
            {
                var model = templateEngine.Render <object>("model.yaml", values);
                if (model != null)
                {
                    values = MergeUtils.Merge(model, values);
                }
            }

            var workflowContents = new StringBuilder();

            using (var workflowWriter = new StringWriter(workflowContents))
            {
                templateEngine.Render("workflow.yaml", values, workflowWriter);
            }

            // NOTE: the workflow is rendered BEFORE writing these output files because it may contain
            // calls to the "secret" helper which will redact tokens that might have been provided in values

            // write values to output folder
            generateOutput("values.yaml", writer => _serializers.YamlSerializer.Serialize(writer, values));

            // write workflow to output folder
            generateOutput("workflow.yaml", writer => writer.Write(workflowContents.ToString()));

            var workflow = _serializers.YamlDeserializer.Deserialize <WorkflowModel>(new StringReader(workflowContents.ToString()));

            foreach (var generatedFile in blueprint.GetGeneratedPaths())
            {
                using (var generatedContent = blueprint.OpenText(generatedFile))
                {
                    generateOutput($"generated/{generatedFile}", writer => writer.Write(generatedContent.ReadToEnd()));
                }
            }

            return(templateEngine, workflow, values);
        }