private static void CompareBuilds(Options options) { var collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(options.TeamCollection)); var buildServer = collection.GetService<IBuildServer>(); var commonStructureService = collection.GetService<ICommonStructureService>(); Console.Write("Finding build definitions for collection '{0}'...", collection.DisplayName); var buildDefinitionResults = Helpers.QueryBuildDefinitions(commonStructureService, buildServer, buildName: options.BuildName); var buildDefinitions = new List<IBuildDefinition>(); foreach (var buildDefinitionResult in buildDefinitionResults) { if (buildDefinitionResult.Failures != null && buildDefinitionResult.Failures.Length > 0) { // print out the errors foreach (var f in buildDefinitionResult.Failures) { Console.WriteLine(f.Code + ": " + f.Message); } } // There still might be some definitions to modify in this result buildDefinitions.AddRange(buildDefinitionResult.Definitions.Where(buildDefinition => buildDefinition != null && buildDefinition.QueueStatus == DefinitionQueueStatus.Enabled && !buildDefinition.Name.EndsWith(".Service"))); } Console.WriteLine("{0} found", buildDefinitions.Count); var builds = ClassifyBuilds(buildDefinitions); foreach (var buildDefinition in builds) { if(options.Verbose) { Console.WriteLine("Processing '{0}'", buildDefinition.Key); } if (buildDefinition.Value.Main == null) { Console.WriteLine("Build definition '{0}' exists only in Release", buildDefinition.Key); continue; } if (buildDefinition.Value.Release == null) { Console.WriteLine("Build definition '{0}' exists only in Main", buildDefinition.Key); continue; } var paramValuesMain = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.Value.Main.ProcessParameters); var paramValuesRelease = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.Value.Release.ProcessParameters); if (!paramValuesMain.ContainsKey(options.ParameterToCompare) || !paramValuesRelease.ContainsKey(options.ParameterToCompare)) continue; var assembliesPatternsMain = (string)paramValuesMain[options.ParameterToCompare]; var assembliesPatternsRelease = (string)paramValuesRelease[options.ParameterToCompare]; if(assembliesPatternsMain != assembliesPatternsRelease) { Console.WriteLine("Build definitions '{0}' differ in Main and Release for parameter '{1}'", buildDefinition.Key, options.ParameterToCompare); Console.WriteLine("\tMain: '{0}'.", assembliesPatternsMain); Console.WriteLine("\tRelease: '{0}'.", assembliesPatternsRelease); } } }
static void Main(string[] args) { // Try to parse options from command line var options = new Options(); if (Parser.Default.ParseArguments(args, options)) { try { CompareBuilds(options); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("An error occured:"); Console.WriteLine(ex.Message); Console.WriteLine(); } } else { Console.WriteLine("Couldn't read options"); Console.WriteLine(); } }