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); } }