Example #1
0
        public static DeploymentSequence ToReleaseTemplate(this RMDeploymentSequence sequence)
        {
            var doc = XDocument.Parse(sequence.WorkflowXaml);

            if (doc.Root == null)
            {
                throw new InvalidDataException("XML is not a valid release template.");
            }

            if (doc.Root.Elements(ActionParser.ActionActivity).Any())
            {
                throw new UnsupportedReleaseTemplateTypeException();
            }

            var sequenceName = doc.Root?.Attribute("DisplayName").Value;
            var seq          = new DeploymentSequence
            {
                ReleaseTemplateName      = sequence.ReleaseTemplateName,
                ReleaseTemplateStageName = sequence.ReleaseTemplateStageName,
                DisplayName            = sequenceName,
                ReleaseTemplateStageId = sequence.StageId,
                Containers             = ContainerParser.ProcessContainers(doc.Root?.Elements())
            };

            return(seq);
        }
        public async Task <RMDeploymentSequence> GetDeploymentSequence(string releaseTemplateName, string releaseTemplateStage)
        {
            var tableNamePrefix = this.version == RMVersion.Rm2015 ? "RM.tbl_" : "dbo.";

            var sqlQuery = $@"SELECT avs.Workflow, avs.id [StageId] FROM
                {tableNamePrefix}ApplicationVersion av
                INNER JOIN {tableNamePrefix}ApplicationVersionStage avs
                ON avs.ApplicationVersionId = av.id
                INNER JOIN {tableNamePrefix}Stage s
                ON s.Id = avs.stageid
                INNER JOIN {tableNamePrefix}stagetype st
                ON st.id = s.stagetypeid
                WHERE st.name = @stageName
                AND av.name = @templateName";

            using (var sqlConnection = new SqlConnection {
                ConnectionString = this.connectionString
            })
                using (var workflowCommand = new SqlCommand(sqlQuery, sqlConnection))
                    using (var da = new SqlDataAdapter(workflowCommand))
                        using (var results = new DataTable())
                        {
                            workflowCommand.Parameters.AddWithValue("@stageName", releaseTemplateStage);
                            workflowCommand.Parameters.AddWithValue("@templateName", releaseTemplateName);

                            await sqlConnection.OpenAsync();

                            da.Fill(results);

                            if (results.Rows.Count == 0)
                            {
                                throw new ArgumentException($@"Unable to locate a release template named ""{releaseTemplateName}"" with a stage named ""{releaseTemplateStage}"".");
                            }

                            var sequence = new RMDeploymentSequence
                            {
                                WorkflowXaml = (string)results.Rows[0]["Workflow"],
                                StageId      = (int)results.Rows[0]["StageID"]
                            };

                            return(sequence);
                        }
        }