public int GeneralizingGetReleaseDefinitions()

in src/VstsDemoBuilder/Services/ExtractorService.cs [1178:1348]


        public int GeneralizingGetReleaseDefinitions(ProjectConfigurations appConfig)
        {
            try
            {
                BuildandReleaseDefs releaseDefs = new BuildandReleaseDefs(appConfig.ReleaseDefinitionConfig);
                List<JObject> releases = releaseDefs.GetReleaseDefs();
                string rells = JsonConvert.SerializeObject(releases);
                BuildandReleaseDefs agent = new BuildandReleaseDefs(appConfig.AgentQueueConfig);
                Dictionary<string, string> variableGroupNameId = GetVariableGroups(appConfig);
                Dictionary<string, int> queue = agent.GetQueues();
                string templatePath = extractedTemplatePath + appConfig.ReleaseDefinitionConfig.Project;
                int releasecount = 1;
                if (releases.Count > 0)
                {
                    foreach (JObject rel in releases)
                    {
                        var name = rel["name"];
                        rel["id"] = "";
                        rel["url"] = "";
                        rel["_links"] = "{}";
                        rel["createdBy"] = "{}";
                        rel["createdOn"] = "";
                        rel["modifiedBy"] = "{}";
                        rel["modifiedOn"] = "";

                        var variableGroup = rel["variableGroups"].HasValues ? rel["variableGroups"].ToArray() : new JToken[0];
                        if (variableGroup.Length > 0)
                        {
                            foreach (var groupId in variableGroup)
                            {
                                rel["variableGroups"] = new JArray("$" + variableGroupNameId.Where(x => x.Key == groupId.ToString()).FirstOrDefault().Value + "$");
                            }
                        }
                        else
                        {
                            rel["variableGroups"] = new JArray();
                        }
                        var env = rel["environments"];
                        foreach (var e in env)
                        {
                            e["badgeUrl"] = "";
                            var envVariableGroup = e["variableGroups"].HasValues ? e["variableGroups"].ToArray() : new JToken[0];
                            if (envVariableGroup.Length > 0)
                            {
                                foreach (var envgroupId in envVariableGroup)
                                {
                                    e["variableGroups"] = new JArray("$" + variableGroupNameId.Where(x => x.Key == envgroupId.ToString()).FirstOrDefault().Value + "$");
                                }
                            }
                            else
                            {
                                e["variableGroups"] = new JArray();
                            }
                            var owner = e["owner"];
                            owner["id"] = "$OwnerId$";
                            owner["displayName"] = "$OwnerDisplayName$";
                            owner["uniqueName"] = "$OwnerUniqueName$";
                            owner["url"] = "";
                            owner["_links"] = "{}";
                            owner["imageUrl"] = "";
                            owner["descriptor"] = "";

                            var deployPhases = e["deployPhases"];
                            if (deployPhases.HasValues)
                            {
                                foreach (var dep in deployPhases)
                                {

                                    var deploymentInput = dep["deploymentInput"];
                                    var queueID = deploymentInput["queueId"];
                                    string queueName = "";
                                    if (queue != null)
                                    {
                                        if (queue.Count > 0)
                                        {
                                            var q = queue.ContainsValue(Convert.ToInt32(queueID));
                                            if (q)
                                            {
                                                var agenetName = queue.Where(x => x.Value.ToString() == queueID.ToString()).FirstOrDefault();
                                                if (agenetName.Key != null)
                                                {
                                                    queueName = agenetName.Key.ToString();
                                                }
                                                else
                                                {
                                                    queueName = "";
                                                }
                                            }
                                        }
                                    }
                                    if (queueName != "")
                                    {
                                        deploymentInput["queueId"] = "$" + queueName + "$";
                                    }
                                    else
                                    {
                                        deploymentInput["queueId"] = "";
                                    }

                                    var workflow = dep["workflowTasks"];
                                    if (workflow.HasValues)
                                    {
                                        foreach (var flow in workflow)
                                        {
                                            var input = flow["inputs"];
                                            string keyConfig = File.ReadAllText(HostingEnvironment.MapPath("~") + @"\\Templates\EndpointKeyConfig.json");
                                            KeyConfig.Keys keyC = new KeyConfig.Keys();
                                            keyC = JsonConvert.DeserializeObject<KeyConfig.Keys>(keyConfig);
                                            foreach (var key in keyC.keys)
                                            {
                                                string keyVal = input[key] != null ? input[key].ToString() : "";
                                                if (!string.IsNullOrEmpty(keyVal))
                                                {
                                                    input[key] = "";
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        var artifact = rel["artifacts"];
                        if (artifact.HasValues)
                        {
                            foreach (var art in artifact)
                            {
                                string buildName = art["definitionReference"]["definition"]["name"].ToString();
                                string type = art["type"].ToString();
                                if (type.ToLower() == "build")
                                {
                                    art["sourceId"] = "$ProjectId$:" + "$" + buildName + "-id$";
                                    art["definitionReference"]["definition"]["id"] = "$" + buildName + "-id$";
                                    art["definitionReference"]["project"]["id"] = "$ProjectId$";
                                    art["definitionReference"]["project"]["name"] = "$ProjectName$";
                                    art["definitionReference"]["artifactSourceDefinitionUrl"] = "{}";
                                }
                                if (type.ToLower() == "azurecontainerrepository")
                                {
                                    art["sourceId"] = "$ProjectId$:" + "$" + buildName + "-id$";
                                    art["definitionReference"]["connection"]["id"] = "";
                                    art["definitionReference"]["definition"]["id"] = "";
                                    art["definitionReference"]["definition"]["name"] = "";
                                    art["definitionReference"]["registryurl"]["id"] = "";
                                    art["definitionReference"]["registryurl"]["name"] = "";
                                    art["definitionReference"]["resourcegroup"]["id"] = "";
                                    art["definitionReference"]["resourcegroup"]["name"] = "";
                                }
                            }
                        }
                        if (!(Directory.Exists(templatePath + "\\ReleaseDefinitions")))
                        {
                            Directory.CreateDirectory(templatePath + "\\ReleaseDefinitions");
                            File.WriteAllText(templatePath + "\\ReleaseDefinitions\\" + name + ".json", JsonConvert.SerializeObject(rel, Formatting.Indented));
                        }
                        else
                        {
                            File.WriteAllText(templatePath + "\\ReleaseDefinitions\\" + name + ".json", JsonConvert.SerializeObject(rel, Formatting.Indented));
                        }
                        releasecount++;
                    }
                }
                return releasecount;
            }
            catch (Exception ex)
            {
                logger.Info(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + ex.Message + "\n" + ex.StackTrace + "\n");
                AddMessage(appConfig.ReleaseDefinitionConfig.Id.ErrorId(), ex.Message + Environment.NewLine + ex.StackTrace);
            }
            return 0;
        }