public static object ProcessParameterDeserializer(string[] parameterSpec) { string paramKey = parameterSpec[0], paramValue = parameterSpec[1]; switch (paramKey) { case "BuildSettings": var buildSettings = JsonConvert.DeserializeObject <dynamic>(paramValue); return(new BuildSettings { ProjectsToBuild = ((JArray)buildSettings.ProjectsToBuild).ToObject <StringList>(), PlatformConfigurations = ((JArray)buildSettings.ConfigurationsToBuild).ToObject <PlatformConfigurationList>() }); case "AgentSettings": var agentSettings = JsonConvert.DeserializeObject <dynamic>(paramValue); if (agentSettings.TfvcAgentSettings != null) { AgentSettingsBuildParameter tfvcAgentSettings = ((JObject)agentSettings.TfvcAgentSettings).ToObject <AgentSettingsBuildParameter>(); return((AgentSettings)tfvcAgentSettings); } if (agentSettings.GitAgentSettings != null) { return(((JObject)agentSettings.GitAgentSettings).ToObject <BuildParameter>()); } throw new InvalidOperationException(paramKey + " isn't supported for the specified value. Try { \"TfvcAgentSettings\": {your settings} } or { \"GitAgentSettings\": {your settings}"); case "TestSpecs": goto case "AgileTestSpecs"; case "AgileTestSpecs": return(JsonConvert.DeserializeObject <List <ExportedAgileTestPlatformSpec> >(paramValue).ToSpecList()); default: return(paramValue); } }
private static void ExportDefinition(BuildDefinitionViewModel b, string filePath) { ExportedBuildDefinition buildToExport = new ExportedBuildDefinition { Name = b.BuildDefinition.Name, Description = b.BuildDefinition.Description }; if (b.BuildDefinition.BuildController != null) { buildToExport.BuildController = b.BuildDefinition.BuildController.Name; } buildToExport.ContinuousIntegrationType = b.BuildDefinition.ContinuousIntegrationType; buildToExport.DefaultDropLocation = b.BuildDefinition.DefaultDropLocation; buildToExport.Schedules = new List<ExportedISchedule>(); foreach (var schedule in b.BuildDefinition.Schedules) { buildToExport.Schedules.Add(new ExportedISchedule { StartTime = schedule.StartTime, DaysToBuild = schedule.DaysToBuild, TimeZone = schedule.TimeZone }); } buildToExport.SourceProviders = new List<ExportedIBuildDefinitionSourceProvider>(); foreach (var provider in b.BuildDefinition.SourceProviders) { buildToExport.SourceProviders.Add(new ExportedIBuildDefinitionSourceProvider { Fields = provider.Fields, Name = provider.Name, SupportedTriggerTypes = provider.SupportedTriggerTypes }); } buildToExport.QueueStatus = b.BuildDefinition.QueueStatus; buildToExport.ContinuousIntegrationQuietPeriod = b.BuildDefinition.ContinuousIntegrationQuietPeriod; if (b.BuildDefinition.SourceProviders.All(s => s.Name != "TFGIT")) { buildToExport.Mappings = new List<ExportedIWorkspaceMapping>(); foreach (var map in b.BuildDefinition.Workspace.Mappings) { buildToExport.Mappings.Add(new ExportedIWorkspaceMapping { Depth = map.Depth, LocalItem = map.LocalItem, MappingType = map.MappingType, ServerItem = map.ServerItem }); } } buildToExport.RetentionPolicyList = new List<ExportedIRetentionPolicy>(); foreach (var rp in b.BuildDefinition.RetentionPolicyList) { buildToExport.RetentionPolicyList.Add(new ExportedIRetentionPolicy { BuildDefinition = rp.BuildDefinition, BuildReason = rp.BuildReason, BuildStatus = rp.BuildStatus, NumberToKeep = rp.NumberToKeep, DeleteOptions = rp.DeleteOptions }); } if (b.BuildDefinition.Process != null) { buildToExport.ProcessTemplate = b.BuildDefinition.Process.ServerPath; } var processParameters = WorkflowHelpers.DeserializeProcessParameters(b.BuildDefinition.ProcessParameters); if (processParameters.ContainsKey("AgentSettings")) { if (processParameters["AgentSettings"].GetType() == typeof(AgentSettings)) { AgentSettings ags = (AgentSettings)processParameters["AgentSettings"]; AgentSettingsBuildParameter agentSet = new AgentSettingsBuildParameter(); agentSet.MaxExecutionTime = ags.MaxExecutionTime; agentSet.MaxWaitTime = ags.MaxWaitTime; agentSet.Name = ags.Name; agentSet.Comparison = ags.TagComparison; agentSet.Tags = ags.Tags; buildToExport.TfvcAgentSettings = agentSet; } else if (processParameters["AgentSettings"].GetType() == typeof(BuildParameter)) { BuildParameter ags = (BuildParameter)processParameters["AgentSettings"]; { buildToExport.GitAgentSettings = ags; } } } buildToExport.ProcessParameters = WorkflowHelpers.DeserializeProcessParameters(b.BuildDefinition.ProcessParameters); File.WriteAllText(Path.Combine(filePath, b.Name + ".json"), JsonConvert.SerializeObject(buildToExport, Formatting.Indented)); }
public static void ExportDefinition(BuildDefinitionViewModel b, string filePath) { ExportedBuildDefinition buildToExport = new ExportedBuildDefinition { Name = b.BuildDefinition.Name, Description = b.BuildDefinition.Description }; if (b.BuildDefinition.BuildController != null) { buildToExport.BuildController = b.BuildDefinition.BuildController.Name; } buildToExport.ContinuousIntegrationType = b.BuildDefinition.ContinuousIntegrationType; buildToExport.DefaultDropLocation = b.BuildDefinition.DefaultDropLocation; buildToExport.Schedules = new List<ExportedISchedule>(); foreach (var schedule in b.BuildDefinition.Schedules) { buildToExport.Schedules.Add(new ExportedISchedule { StartTime = schedule.StartTime, DaysToBuild = schedule.DaysToBuild, TimeZone = schedule.TimeZone }); } buildToExport.SourceProviders = new List<ExportedIBuildDefinitionSourceProvider>(); foreach (var provider in b.BuildDefinition.SourceProviders) { buildToExport.SourceProviders.Add(new ExportedIBuildDefinitionSourceProvider { Fields = provider.Fields, Name = provider.Name, SupportedTriggerTypes = provider.SupportedTriggerTypes }); } buildToExport.QueueStatus = b.BuildDefinition.QueueStatus; buildToExport.ContinuousIntegrationQuietPeriod = b.BuildDefinition.ContinuousIntegrationQuietPeriod; if (b.BuildDefinition.SourceProviders.All(s => s.Name != "TFGIT")) { buildToExport.Mappings = new List<ExportedIWorkspaceMapping>(); foreach (var map in b.BuildDefinition.Workspace.Mappings) { buildToExport.Mappings.Add(new ExportedIWorkspaceMapping { Depth = map.Depth, LocalItem = map.LocalItem, MappingType = map.MappingType, ServerItem = map.ServerItem }); } } buildToExport.RetentionPolicyList = new List<ExportedIRetentionPolicy>(); foreach (var rp in b.BuildDefinition.RetentionPolicyList) { buildToExport.RetentionPolicyList.Add(new ExportedIRetentionPolicy { BuildDefinition = rp.BuildDefinition, BuildReason = rp.BuildReason, BuildStatus = rp.BuildStatus, NumberToKeep = rp.NumberToKeep, DeleteOptions = rp.DeleteOptions }); } if (b.BuildDefinition.Process != null) { buildToExport.ProcessTemplate = b.BuildDefinition.Process.ServerPath; } var processParameters = WorkflowHelpers.DeserializeProcessParameters(b.BuildDefinition.ProcessParameters); if (processParameters.ContainsKey("AgentSettings")) { if (processParameters["AgentSettings"].GetType() == typeof(AgentSettings)) { AgentSettings ags = (AgentSettings)processParameters["AgentSettings"]; AgentSettingsBuildParameter agentSet = new AgentSettingsBuildParameter(); agentSet.MaxExecutionTime = ags.MaxExecutionTime; agentSet.MaxWaitTime = ags.MaxWaitTime; agentSet.Name = ags.Name; agentSet.Comparison = ags.TagComparison; agentSet.Tags = ags.Tags; buildToExport.TfvcAgentSettings = agentSet; } else if (processParameters["AgentSettings"].GetType() == typeof(BuildParameter)) { BuildParameter ags = (BuildParameter)processParameters["AgentSettings"]; { buildToExport.GitAgentSettings = ags; } } } if (processParameters.ContainsKey("BuildSettings")) { var buildSettings = processParameters["BuildSettings"] as BuildSettings; if (buildSettings != null && buildSettings.HasProjectsToBuild) { buildToExport.ProjectsToBuild = buildSettings.ProjectsToBuild; if (buildSettings.HasPlatformConfigurations) { buildToExport.ConfigurationsToBuild = buildSettings.PlatformConfigurations; } } } if (processParameters.ContainsKey("TestSpecs")) { var testSpecs = processParameters["TestSpecs"] as TestSpecList; if (testSpecs != null) { buildToExport.AgileTestSpecs = new List<ExportedAgileTestPlatformSpec>(); foreach (var spec in testSpecs) { var agilespec = spec as AgileTestPlatformSpec; if (agilespec != null) { ExportedAgileTestPlatformSpec expAgileSpec = new ExportedAgileTestPlatformSpec(); expAgileSpec.AssemblyFileSpec = agilespec.AssemblyFileSpec; expAgileSpec.ExecutionPlatform = agilespec.ExecutionPlatform; expAgileSpec.FailBuildOnFailure = agilespec.FailBuildOnFailure; expAgileSpec.RunName = agilespec.RunName; expAgileSpec.TestCaseFilter = agilespec.TestCaseFilter; expAgileSpec.RunSettingsFileName = agilespec.RunSettingsForTestRun.ServerRunSettingsFile; expAgileSpec.TypeRunSettings = agilespec.RunSettingsForTestRun.TypeRunSettings; buildToExport.AgileTestSpecs.Add(expAgileSpec); } } } } buildToExport.ProcessParameters = WorkflowHelpers.DeserializeProcessParameters(b.BuildDefinition.ProcessParameters); foreach (KeyValuePair<string, object> item in processParameters) { if (item.Value.GetType() == typeof(Microsoft.TeamFoundation.Build.Common.BuildParameter)) { buildToExport.ProcessParameters[item.Key] = JsonConvert.DeserializeObject(item.Value.ToString()); } else if (item.Value.GetType() == typeof(BuildReason)) { buildToExport.BuildReasons.Add(item.Key, (BuildReason)item.Value); } else if (item.Value is int) { buildToExport.IntegerParameters.Add(item.Key, (int)item.Value); } else if (item.Value.GetType() == typeof(BuildVerbosity)) { buildToExport.BuildVerbosities.Add(item.Key, (BuildVerbosity)item.Value); } } var jsonSerializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }; File.WriteAllText(Path.Combine(filePath, b.Name + ".json"), JsonConvert.SerializeObject(buildToExport, Formatting.Indented, jsonSerializerSettings)); }