/// <summary> /// Reverts the build version files. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="results">The results.</param> private static void RevertBuildVersionFiles( BuildControlParameters configuration, DailyBuildFullResults results) { string heroAppSource = FindHeroAppSourceFolder(configuration); for (Int32 i = 0; i < configuration.Projects.Length; i++) { string assemblyFile = ""; try { string appFolder = Path.Combine(heroAppSource, configuration.Projects[i].ProjectPath); assemblyFile = Path.Combine(appFolder, configuration.Projects[i].AssemblyFilePathAndNameFromProjectRoot); ProcessInformation process = ProcessOperations.SDRevert(configuration, assemblyFile); CheckForErrorFromSDOperation(process, results, results.BuildTargets[i].RevertVersion); results.BuildTargets[i].RevertVersion.Success = true; } catch (Exception e) { ProgramExecutionLog.AddEntry( "Failed to revert file " + assemblyFile + " Exception information was " + e.ToString()); results.BuildTargets[i].RevertVersion.SetResults(false, e.Message); } } }
/// <summary> /// Creates the build script and execute. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="results">The results.</param> public static void CreateBuildScriptAndExecute( BuildControlParameters configuration, DailyBuildFullResults results) { string heroAppSource = FindHeroAppSourceFolder(configuration); if (String.IsNullOrEmpty(heroAppSource)) { Console.WriteLine("Could not find Application Parent Folder. Aborting ..."); ProgramExecutionLog.AddEntry("Could not find Application Parent Folder. Aborting ..."); return; } Console.Write("Starting Build/Sign/License Process... "); GeneralFileOperations.WriteProgramStatusFile(ExecutionStatus.Running); if (configuration.BuildType == BuildTypeEnum.Daily && configuration.UpdateDailyBuildVersion) { bool allCompletedWithSuccess = ModifyBuildVersionFiles(configuration, results); Console.WriteLine("Completed Modifying Revision Files. Overall status was " + allCompletedWithSuccess.ToString()); } else { foreach (BuildTargetResults t in results.BuildTargets) { t.ModifyVersion.RequestedToRun = false; } } Console.WriteLine("Completed!"); Console.Write("Beginning to create batch file for build/sign/license operations ... "); string commandFile = BuildBatchFile(configuration, results); Console.WriteLine("Completed. Running batch file ...."); ProcessOperations.RunProcess(commandFile, App.StartupPath, "", true); Console.WriteLine("Batch File completed. Status not reported here"); ValidateBuildResults(configuration, results); PublishBuildOutput(configuration, results); if (configuration.BuildType == BuildTypeEnum.Daily && configuration.UpdateDailyBuildVersion) { RevertBuildVersionFiles(configuration, results); } if (configuration.EmailResults) { SendResultViaEmail(configuration, results); } }
/// <summary> /// Helper function that will check to see if a file has a read only /// attribute set. If it does, then the attribute is removed. /// </summary> /// <param name="configuration">Main program configuration</param> /// <param name="fullFileName">File Name to check for read only attribute</param> public static void RemoveReadOnlyAttribute( BuildControlParameters configuration, string fullFileName) { FileInfo f = new FileInfo(fullFileName); if ((f.Attributes & FileAttributes.ReadOnly) != 0) { if (configuration.SourceDepotOnlineMode) { ProcessOperations.SDEdit(configuration, fullFileName); } else { f.Attributes = f.Attributes & ~FileAttributes.ReadOnly; } } }
/// <summary> /// Syncs the enlistment. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="results">The results.</param> public static void SyncEnlistment( BuildControlParameters configuration, DailyBuildFullResults results) { Console.Write("Syncing Enlistment ... "); GeneralFileOperations.WriteProgramStatusFile(ExecutionStatus.SynEnlistment); try { ProcessInformation process = ProcessOperations.SDSync(configuration); CheckForErrorFromSDOperation(process, results, results.EnlistmentSync); Console.WriteLine("Success!"); } catch (Exception e) { Console.WriteLine("Fail!"); results.EnlistmentSync.SetResults(false, e.Message); ProgramExecutionLog.AddEntry( "Failed to sync enlistment " + " Error was " + e.Message); } Console.WriteLine("Enlistment Sync Status = " + results.EnlistmentSync.ToString()); }
/// <summary> /// Modifies the build version files. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="results">The results.</param> /// <returns></returns> private static bool ModifyBuildVersionFiles( BuildControlParameters configuration, DailyBuildFullResults results) { bool allCompletedWithSuccess = true; string heroAppSource = FindHeroAppSourceFolder(configuration); if (!String.IsNullOrEmpty(heroAppSource)) { DateTime currentTime = DateTime.Now; for (Int32 i = 0; i < configuration.Projects.Length; i++) { results.BuildTargets[i].BuildStartTime = currentTime; string appFolder = Path.Combine(heroAppSource, configuration.Projects[i].ProjectPath); string assemblyFile = Path.Combine(appFolder, configuration.Projects[i].AssemblyFilePathAndNameFromProjectRoot); if (File.Exists(assemblyFile)) { try { ProcessInformation process = ProcessOperations.SDEdit(configuration, assemblyFile); CheckForErrorFromSDOperation(process, results, results.BuildTargets[i].ModifyVersion); string[] assemblyFileContents = File.ReadAllLines(assemblyFile); for (Int32 j = 0; j < assemblyFileContents.Length; j++) { if (assemblyFileContents[j].ToLower().Contains(RevisionFileStringBase.ToLower())) { string v = assemblyFileContents[j]; string[] versions = v.Split('.'); if (versions.Length >= 3) { versions[2] = CreateDateTimeFormatString(currentTime); } v = ""; for (Int32 k = 0; k < versions.Length; k++) { v += versions[k] + "."; } assemblyFileContents[j] = v.TrimEnd('.'); break; } } File.WriteAllLines(assemblyFile, assemblyFileContents); results.BuildTargets[i].ModifyVersion.Success = true; } catch (Exception e) { results.BuildTargets[i].ModifyVersion.SetResults(false, e.Message); ProgramExecutionLog.AddEntry( "Failed to modify file " + assemblyFile + " Exception information was " + e.ToString()); allCompletedWithSuccess = false; } } else { string errorMessage = "Assembly File did not exist. Path was " + assemblyFile; results.BuildTargets[i].ModifyVersion.SetResults(false, errorMessage); ProgramExecutionLog.AddEntry(errorMessage); allCompletedWithSuccess = false; } } } else { return(false); } return(allCompletedWithSuccess); }