<?xml version="1.0" encoding="utf-8"?> <!--********************************************************************************************************* MasterBuild.buildproj - Gbtc**** Copyright © 2013, Grid Protection Alliance. All Rights Reserved.**** Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See** the NOTICE file distributed with this work for additional information regarding copyright ownership.** The GPA licenses this file to you under the Eclipse Public License -v 1.0 (the "License"); you may** not use this file except in compliance with the License. You may obtain a copy of the License at:**** http://www.opensource.org/licenses/eclipse-1.0.php**** Unless agreed to in writing, the subject software distributed under the License is distributed on an** "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the** License for the specific language governing permissions and limitations.**** Code Modification History:** ===================================================================================================** 10/05/2009 - Pinal C. Patel** Generated original version of source code.** 10/07/2009 - Pinal C. Patel** Fixed a bug in deletion of unwanted files prior to deployment.** 10/10/2009 - Pinal C. Patel** Added the ability to compile install packages.** Added the ability to choose the files to be versioned.** 10/13/2009 - Pinal C. Patel** Enabled the check for Sandcastle Builder as a required tool.** Modified deletion of *.pdb files to be active for release builds only.** 10/15/2009 - Pinal C. Patel** Added unit testing to the build process.** 10/16/2009 - Pinal C. Patel** Modified to skip the build process in the absence of new changes since the last build.** 10/19/2009 - Pinal C. Patel** Modified to allow archiving of binaries and installs for easy access.** 04/27/2010 - Pinal C. Patel** Modified to automatically force a build when a specific version is being built.** 04/28/2010 - Pinal C. Patel** Modified ProjectsToBuild to include an optional Properties property that can be used to** override project properties during the build process.** 08/01/2010 - Pinal C. Patel** Modified to force a build if a specific version of the source code is being built by ** specifying the version using the SourceVersion property.** 10/09/2010 - Pinal C. Patel** Modified the build archival process to allow for customization.** Moved initialization if FilesToDelete list to CoreBuildProjects target.** Implemented VersionPrecision logic in CoreVersionSource target.** 10/23/2010 - Pinal C. Patel** Moved checkin of pending changes to CoreDeleteWorkspace task so version changes are ** checked-in only if the entire build completes successfully.** 11/02/2010 - Pinal C. Patel** Added missing logic in ArchiveBuildOutput target so binary and install archive files are ** created only if there are files to be added to these archives.** 12/25/2010 - Pinal C. Patel** Updated the versioning logic to not use the changeset for revision number since the maximum** value allowed for revision number is 65534.** 01/08/2011 - Pinal C. Patel** Made TfsServer a must-override property.** Allowed for customization of versioning scheme by consuming script.** 08/26/2013 - J. Ritchie Carroll** Added flag "SkipVersioning" to allow bypass of versioning steps.*********************************************************************************************************--> <Project DefaultTargets="All" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="Targets\Inline\GitHistory.targets"/> <Import Project="Targets\MSBuild Community Tasks\MSBuild.Community.Tasks.Targets"/> <Import Project="Targets\MSBuild Extension Pack\MSBuild.ExtensionPack.tasks"/> <PropertyGroup> <!-- Name of the project being built. --> <ProjectName></ProjectName> <!-- Solution of the project being built. --> <ProjectSolution></ProjectSolution> <!-- URL of the Git Server. --> <GitServer>$(GitServer)</GitServer> <!-- Root local folder of the project. --> <LocalFolder>$(LocalFolder)</LocalFolder> <!-- Source control tag for the build. --> <BuildTag></BuildTag> <!-- Type of the build to compile. --> <BuildFlavor>$(BuildFlavor)</BuildFlavor> <!-- Target platform of the build. --> <BuildTarget>$(BuildTarget)</BuildTarget> <!-- Output folder of build content. --> <BuildOutputFolder>$(BuildOutputFolder)</BuildOutputFolder> <!-- Drop location of the build content. --> <BuildDeployFolder>$(BuildDeployFolder)</BuildDeployFolder> <!-- Setting for enabling user propmts. --> <BuildInteractive>$(BuildInteractive)</BuildInteractive> <!-- File containing the build version. --> <VersionFile></VersionFile> <!-- Versioning scheme major number change type. --> <VersionMajorChange></VersionMajorChange> <!-- Versioning scheme minor number change type. --> <VersionMinorChange></VersionMinorChange> <!-- Versioning scheme build number change type. --> <VersionBuildChange></VersionBuildChange> <!-- Versioning scheme revision number change type. --> <VersionRevisionChange></VersionRevisionChange> <!-- Paths to Git Client. --> <GitClient>$(GitClient)</GitClient> <!-- Branch to be built. --> <GitBranch>$(GitBranch)</GitBranch> <!-- Path to unit testing tool. --> <MSTest>$(MSTest)</MSTest> <!-- Path to Sandcastle Builder. --> <SandcastleBuilder>$(SandcastleBuilder)</SandcastleBuilder> <!-- Forces a build regardless of new changes since last build. --> <ForceBuild>$(ForceBuild)</ForceBuild> <!-- Skips the versioning process and just executes build steps. --> <SkipVersioning>$(SkipVersioning)</SkipVersioning> <!-- Prevents the build script from pushing to the remote repository. --> <DoNotPush>$(DoNotPush)</DoNotPush> <!--Executes build without running unit tests when true.--> <SkipUnitTest>$(SkipUnitTest)</SkipUnitTest> <!-- Name of binaries archive file. --> <BinariesArchiveFileName></BinariesArchiveFileName> <!-- Name of installs archive file. --> <InstallsArchiveFileName></InstallsArchiveFileName> <!-- Name of scripts archive file. --> <ScriptsArchiveFileName></ScriptsArchiveFileName> <!-- Name of source code archive file. --> <SourceArchiveFileName></SourceArchiveFileName> <!-- Working directory for creating binaries archive file. --> <BinariesArchiveWorkingDirectory></BinariesArchiveWorkingDirectory> <!-- Working directory for creating installs archive file. --> <InstallsArchiveWorkingDirectory></InstallsArchiveWorkingDirectory> <!-- Working directory for creating scripts archive file. --> <ScriptsArchiveWorkingDirectory></ScriptsArchiveWorkingDirectory> <!-- Working directory for creating source code archive file. --> <SourceArchiveWorkingDirectory></SourceArchiveWorkingDirectory> </PropertyGroup> <PropertyGroup> <!-- InitializeBuild PrepareSettings (Before > Core > After) CheckEnvironment (Before > Core > After) CreateWorkspace (Before > Core > After) CompileBuild UpdateRepository (Before > Core > After) VersionSource (Before > Core > After) BuildProjects (Before > Core > After) ExecuteUnitTests (Before > Core > After) FinalizeBuild CleanBuild (Before > Core > After) DeployBuild (Before > Core > After) PushToServer (Before > Core > After) --> <InitializeBuildDependsOn> PrepareSettings; CheckEnvironment; CreateWorkspace; </InitializeBuildDependsOn> <CompileBuildDependsOn> UpdateRepository; VersionSource; BuildProjects; ExecuteUnitTests; </CompileBuildDependsOn> <FinalizeBuildDependsOn> CleanBuild; DeployBuild; PushToServer; </FinalizeBuildDependsOn> <CheckEnvironmentDependsOn> BeforeCheckEnvironment; CoreCheckEnvironment; AfterCheckEnvironment; </CheckEnvironmentDependsOn> <PrepareSettingsDependsOn> BeforePrepareSettings; CorePrepareSettings; AfterPrepareSettings; </PrepareSettingsDependsOn> <CreateWorkspaceDependsOn> BeforeCreateWorkspace; CoreCreateWorkspace; AfterCreateWorkspace; </CreateWorkspaceDependsOn> <UpdateRepositoryDependsOn> BeforeUpdateRepository; CoreUpdateRepository; AfterUpdateRepository; </UpdateRepositoryDependsOn> <VersionSourceDependsOn> BeforeVersionSource; CoreVersionSource; AfterVersionSource; </VersionSourceDependsOn> <BuildProjectsDependsOn> BeforeBuildProjects; CoreBuildProjects; AfterBuildProjects; </BuildProjectsDependsOn> <ExecuteUnitTestsDependsOn> BeforeExecuteUnitTests; CoreExecuteUnitTests; AfterExecuteUnitTests; </ExecuteUnitTestsDependsOn> <CleanBuildDependsOn> BeforeCleanBuild; CoreCleanBuild; AfterCleanBuild; </CleanBuildDependsOn> <DeployBuildDependsOn> BeforeDeployBuild; CoreDeployBuild; AfterDeployBuild; </DeployBuildDependsOn> <PushToServerDependsOn> BeforePushToServer; CorePushToServer; AfterPushToServer; </PushToServerDependsOn> </PropertyGroup> <ItemGroup> <!-- List of projects to build. --> <ProjectsToBuild Include="Nothing" Exclude="Nothing"/> <!-- List of files to be versioned. --> <FilesToVersion Include="Nothing" Exclude="Nothing"> <VersionRegex>(?'BeforeVersion')(?'CoreVersion')(?'AfterVersion')</VersionRegex> <VersionPrecision>4</VersionPrecision> </FilesToVersion> <!-- List of unit test assemblies. --> <UnitTestAssemblies Include="Nothing" Exclude="Nothing"/> <!-- List of binaries to archive. --> <BinariesToArchive Include="Nothing" Exclude="Nothing"/> <!-- List of installs to archive. --> <InstallsToArchive Include="Nothing" Exclude="Nothing"/> <!-- List of source code files to archive. --> <SourcesToArchive Include="Nothing" Exclude="Nothing"/> <!-- Destinations of archive files (*.zip). --> <ArchiveDestinations Include="Nothing" Exclude="Nothing"/> </ItemGroup> <Target Name="All"> <!-- Entry point for the build. --> <CallTarget Targets="InitializeBuild"/> <CallTarget Targets="CompileBuild"/> <CallTarget Targets="FinalizeBuild"/> <Beep/> <OnError ExecuteTargets="HandleBuildFailure"/> </Target> <Target Name="InitializeBuild" DependsOnTargets="$(InitializeBuildDependsOn)"/> <Target Name="CompileBuild" DependsOnTargets="$(CompileBuildDependsOn)"/> <Target Name="FinalizeBuild" DependsOnTargets="$(FinalizeBuildDependsOn)"/> <Target Name="PrepareSettings" DependsOnTargets="$(PrepareSettingsDependsOn)"/> <Target Name="CheckEnvironment" DependsOnTargets="$(CheckEnvironmentDependsOn)"/> <Target Name="CreateWorkspace" DependsOnTargets="$(CreateWorkspaceDependsOn)"/> <Target Name="UpdateRepository" DependsOnTargets="$(UpdateRepositoryDependsOn)"/> <Target Name="VersionSource" DependsOnTargets="$(VersionSourceDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="BuildProjects" DependsOnTargets="$(BuildProjectsDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="ExecuteUnitTests" DependsOnTargets="$(ExecuteUnitTestsDependsOn)" Condition="'$(ForceBuild)' == 'true' And '$(SkipUnitTest)' == 'false'"/> <Target Name="CleanBuild" DependsOnTargets="$(CleanBuildDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="DeployBuild" DependsOnTargets="$(DeployBuildDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="PushToServer" DependsOnTargets="$(PushToServerDependsOn)"/> <Target Name="BeforePrepareSettings"/> <Target Name="CorePrepareSettings"> <!-- Assign default values to unassigned properties. --> <Message Text="Preparing settings for build..."/> <Error Condition="'$(ProjectName)' == ''" Text="ProjectName property must be set."/> <Error Condition="'$(GitServer)' == ''" Text="GitServer property must be set."/> <PropertyGroup> <ProgramFiles32>$(MSBuildProgramFiles32)</ProgramFiles32> <ProgramFiles32 Condition="'$(ProgramFiles32)' == ''">$(ProgramFiles)</ProgramFiles32> <ProgramFiles64>$(ProgramW6432)</ProgramFiles64> <ProgramFiles64 Condition="'$(ProgramFiles64)' == ''">$(ProgramFiles)</ProgramFiles64> <LocalFolder Condition="'$(LocalFolder)' == ''">$([System.IO.Path]::GetFullPath('$(TEMP)\MSBuild\$(ProjectName)'))</LocalFolder> <BuildFlavor Condition="'$(BuildFlavor)' == ''">Release</BuildFlavor> <BuildTarget Condition="'$(BuildTarget)' == ''">Any CPU</BuildTarget> <BuildInParallel Condition="'$(BuildInParallel)' == ''">True</BuildInParallel> <BuildOutputFolder Condition="'$(BuildOutputFolder)' == ''">$(LocalFolder)\Build\Output\$(BuildFlavor)</BuildOutputFolder> <BuildInteractive Condition="'$(BuildInteractive)' == ''">true</BuildInteractive> <VersionFile Condition="'$(VersionFile)' == ''">$(LocalFolder)\Build\Scripts\$(ProjectName).version</VersionFile> <NuGet Condition="'$(NuGet)' == ''">$(ProgramFiles64)\NuGet\nuget.exe</NuGet> <GitClient Condition="'$(GitClient)' == ''">$(ProgramFiles32)\Git\cmd\git.exe</GitClient> <GitBranch Condition="'$(GitBranch)' == ''">master</GitBranch> <SetUpWorkspace Condition="'$(SetUpWorkspace)' == ''">True</SetUpWorkspace> <MSTest Condition="'$(MSTest)' == ''">$(VS140COMNTOOLS)\..\IDE\mstest.exe</MSTest> <!-- <SandcastleBuilder Condition="'$(SandcastleBuilder)' == ''">$(SHFBROOT)\SandcastleBuilderGUI.exe</SandcastleBuilder> --> <ForceBuild Condition="'$(ForceBuild)' == ''">false</ForceBuild> <SkipVersioning Condition="'$(SkipVersioning)' == ''">false</SkipVersioning> <DoNotPush Condition="'$(DoNotPush)' == ''">false</DoNotPush> <BinariesArchiveFileName Condition="'$(BinariesArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Binaries.zip</BinariesArchiveFileName> <InstallsArchiveFileName Condition="'$(InstallsArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Installs.zip</InstallsArchiveFileName> <ScriptsArchiveFileName Condition="'$(ScriptsArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Scripts.zip</ScriptsArchiveFileName> <SourceArchiveFileName Condition="'$(SourceArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Source.zip</SourceArchiveFileName> <BinariesArchiveWorkingDirectory Condition="'$(BinariesArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Binaries</BinariesArchiveWorkingDirectory> <InstallsArchiveWorkingDirectory Condition="'$(InstallsArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Installs</InstallsArchiveWorkingDirectory> <ScriptsArchiveWorkingDirectory Condition="'$(ScriptsArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Scripts</ScriptsArchiveWorkingDirectory> <SourceArchiveWorkingDirectory Condition="'$(SourceArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Source</SourceArchiveWorkingDirectory> </PropertyGroup> </Target> <Target Name="AfterPrepareSettings"/> <Target Name="BeforeCheckEnvironment"/> <Target Name="CoreCheckEnvironment"> <!-- Ensure that all required tools are installed. --> <Message Text="Checking for required application..."/> <Error Condition="'$(GitClient)' != '' And !Exists('$(GitClient)')" Text="Git Client is not installed."/> <Error Condition="'$(MSTest)' != '' And !Exists('$(MSTest)')" Text="Unit testing tool is not installed."/> <Error Condition="'$(SandcastleBuilder)' != '' And !Exists('$(SandcastleBuilder)')" Text="Sandcastle Builder is not installed."/> </Target> <Target Name="AfterCheckEnvironment"/> <Target Name="BeforeCreateWorkspace"/> <Target Name="CoreCreateWorkspace"> <!-- Create a workspace for the build. --> <Message Text="Creating local build workspace..."/> <RemoveDir Directories="$(LocalFolder)" Condition="Exists('$(LocalFolder)') And !Exists('$(LocalFolder)\.git')"/> <MakeDir Directories="$(LocalFolder)" Condition="!Exists('$(LocalFolder)')"/> <Exec Command="%22$(GitClient)%22 clone %22$(GitServer)%22 ." WorkingDirectory="$(LocalFolder)" Condition="!Exists('$(LocalFolder)\.git')"/> <Exec Command="%22$(GitClient)%22 checkout %22$(GitBranch)%22" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> </Target> <Target Name="AfterCreateWorkspace"/> <Target Name="BeforeUpdateRepository"/> <Target Name="CoreUpdateRepository"> <!-- Get source code for the specified version. --> <Message Text="Getting latest updates from repo..."/> <Exec Command="%22$(GitClient)%22 gc" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 fetch" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 reset --hard %22origin/$(GitBranch)%22" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 clean -f -d -x" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(NuGet)%22 restore %22$(ProjectSolution)%22"/> <CallTarget Targets="CheckForChanges"/> </Target> <Target Name="CheckForChanges" Condition="'$(ForceBuild)' != 'true'"> <!-- Check for new changes since the last build. --> <ReadLinesFromFile File="$(VersionFile)"> <Output TaskParameter="Lines" ItemName="VersionNumber"/> </ReadLinesFromFile> <GitHistory GitClient="$(GitClient)" LocalPath="$(LocalFolder)" VersionTag="v@(VersionNumber)-$(GitBranch)" ContinueOnError="true"> <Output TaskParameter="TotalChanges" PropertyName="TotalChanges"/> </GitHistory> <Message Text="Detected $(TotalChanges) changes since last version."/> <PropertyGroup> <ForceBuild Condition="'$(TotalChanges)' == '-1' Or '$(TotalChanges)' > '0'">true</ForceBuild> <SkipVersioning Condition="'$(ForceBuild)' != 'true'">true</SkipVersioning> </PropertyGroup> <Message Text="Build is skipped - No new changes." Condition="'$(ForceBuild)' != 'true'"/> </Target> <Target Name="AfterUpdateRepository"/> <Target Name="BeforeVersionSource"/> <Target Name="CoreVersionSource" Condition="'@(FilesToVersion)' != '' And '$(SkipVersioning)' != 'true'"> <!-- Update version number of the source code. --> <Message Text="Versioning source code..."/> <Version VersionFile="$(VersionFile)" MajorType="$(VersionMajorChange)" MinorType="$(VersionMinorChange)" BuildType="$(VersionBuildChange)" RevisionType="$(VersionRevisionChange)"> <Output TaskParameter="Major" PropertyName="Major"/> <Output TaskParameter="Minor" PropertyName="Minor"/> <Output TaskParameter="Build" PropertyName="Build"/> <Output TaskParameter="Revision" PropertyName="Revision"/> </Version> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' <= '2'"/> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor).$(Build)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' == '3'"/> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor).$(Build).$(Revision)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' == '4'"/> <PropertyGroup> <BuildTag Condition="'$(BuildTag)' == ''">v$(Major).$(Minor).$(Build).$(Revision)-$(GitBranch)</BuildTag> </PropertyGroup> <Exec Command="%22$(GitClient)%22 add --all" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> <Exec Command="%22$(GitClient)%22 commit -m %22$(ProjectName): Version change for build $(BuildTag).%22" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> <Exec Command="%22$(GitClient)%22 tag -f %22$(BuildTag)%22" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> </Target> <Target Name="AfterVersionSource"/> <Target Name="BeforeBuildProjects"/> <Target Name="CoreBuildProjects"> <!-- Build all of the specified projects. --> <Message Text="Compiling projects..."/> <MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=$(BuildFlavor);Platform=$(BuildTarget);BuildInParallel=$(BuildInParallel)"/> <!-- Create list of files to be deleted from build output. --> <ItemGroup> <FilesToDelete Include="$(BuildOutputFolder)\**\setup.exe"/> <!-- <FilesToDelete Include="$(BuildOutputFolder)\**\*.pdb" Condition="'$(BuildFlavor)' == 'Release'"/> --> <FilesToDelete Include="$(BuildOutputFolder)\**\*.vshost.exe"/> <FilesToDelete Include="$(BuildOutputFolder)\**\*.vshost.exe.manifest"/> </ItemGroup> </Target> <Target Name="AfterBuildProjects"/> <Target Name="BeforeExecuteUnitTests"/> <Target Name="CoreExecuteUnitTests" Condition="'@(UnitTestAssemblies)' != ''"> <!-- Execute tests in unit test assemblies. --> <Message Text="Executing unit tests..."/> <Exec Command="%22$(MSTest)%22 /testcontainer:%22%(UnitTestAssemblies.FullPath)%22" WorkingDirectory="%(UnitTestAssemblies.RootDir)%(UnitTestAssemblies.Directory)"/> </Target> <Target Name="AfterExecuteUnitTests"/> <Target Name="BeforeCleanBuild"/> <Target Name="CoreCleanBuild"> <!-- Clean output of the current build. --> <Message Text="Cleaning build output..."/> <Delete Files="@(FilesToDelete)" ContinueOnError="true"/> </Target> <Target Name="AfterCleanBuild"/> <Target Name="BeforeDeployBuild"/> <Target Name="CoreDeployBuild" Condition="'$(BuildOutputFolder)' != '' And '$(BuildDeployFolder)' != ''"> <!-- Copy build content to the deploy folder. --> <Message Text="Deploying build content..."/> <ItemGroup> <FilesToDeploy Include="$(BuildOutputFolder)\**\*.*"/> </ItemGroup> <MakeDir Directories="$(BuildDeployFolder)" Condition="!Exists('$(BuildDeployFolder)')"/> <Folder TaskAction="RemoveContent" Path="$(BuildDeployFolder)"/> <Copy SourceFiles="@(FilesToDeploy)" DestinationFolder="$(BuildDeployFolder)\%(FilesToDeploy.RecursiveDir)"/> <CallTarget Targets="ArchiveBuildOutput"/> <CallTarget Targets="ArchiveSource"/> <CallTarget Targets="DeployArchives"/> </Target> <Target Name="ArchiveBuildOutput" Condition="'@(BinariesToArchive)' != '' Or '@(InstallsToArchive)' != '' Or '@(ScriptsToArchive)' != ''"> <!-- Create specified archives of build content. --> <Message Text="Archiving build content..."/> <Copy SourceFiles="@(BinariesToArchive)" DestinationFolder="$(BinariesArchiveWorkingDirectory)\%(BinariesToArchive.RecursiveDir)"/> <Copy SourceFiles="@(InstallsToArchive)" DestinationFolder="$(InstallsArchiveWorkingDirectory)\%(InstallsToArchive.RecursiveDir)"/> <Copy SourceFiles="@(ScriptsToArchive)" DestinationFolder="$(ScriptsArchiveWorkingDirectory)\%(ScriptsToArchive.RecursiveDir)"/> <ItemGroup> <BinariesToArchive Remove="@(BinariesToArchive)"/> <InstallsToArchive Remove="@(InstallsToArchive)"/> <ScriptsToArchive Remove="@(ScriptsToArchive)"/> <BinariesToArchive Include="$(BinariesArchiveWorkingDirectory)\**\*.*"/> <InstallsToArchive Include="$(InstallsArchiveWorkingDirectory)\**\*.*"/> <ScriptsToArchive Include="$(ScriptsArchiveWorkingDirectory)\**\*.*"/> </ItemGroup> <MSBuild.Community.Tasks.Zip Files="@(BinariesToArchive)" ZipFileName="$(BinariesArchiveFileName)" WorkingDirectory="$(BinariesArchiveWorkingDirectory)" Condition="'@(BinariesToArchive)' != ''"/> <MSBuild.Community.Tasks.Zip Files="@(InstallsToArchive)" ZipFileName="$(InstallsArchiveFileName)" WorkingDirectory="$(InstallsArchiveWorkingDirectory)" Condition="'@(InstallsToArchive)' != ''"/> <MSBuild.Community.Tasks.Zip Files="@(ScriptsToArchive)" ZipFileName="$(ScriptsArchiveFileName)" WorkingDirectory="$(ScriptsArchiveWorkingDirectory)" Condition="'@(ScriptsToArchive)' != ''"/> <ItemGroup> <Archives Include="$(LocalFolder)\*.zip"/> </ItemGroup> </Target> <Target Name="ArchiveSource" Condition="'@(SourcesToArchive)' != ''"> <!-- Create archive of source tree. --> <Message Text="Archiving source code..."/> <Copy SourceFiles="@(SourcesToArchive)" DestinationFolder="$(SourceArchiveWorkingDirectory)\%(SourcesToArchive.RecursiveDir)"/> <ItemGroup> <SourcesToArchive Remove="@(SourcesToArchive)"/> <SourcesToArchive Include="$(SourceArchiveWorkingDirectory)\**\*.*"/> </ItemGroup> <MSBuild.Community.Tasks.Zip Files="@(SourcesToArchive)" ZipFileName="$(SourceArchiveFileName)" WorkingDirectory="$(SourceArchiveWorkingDirectory)" Condition="'@(SourcesToArchive)' != ''"/> <ItemGroup> <Archives Include="$(SourceArchiveFileName)"/> </ItemGroup> </Target> <Target Name="DeployArchives" Condition="'@(Archives)' != ''"> <Copy SourceFiles="@(Archives)" DestinationFolder="%(ArchiveDestinations.FullPath)" ContinueOnError="true"/> </Target> <Target Name="AfterDeployBuild"/> <Target Name="BeforePushToServer"/> <Target Name="CorePushToServer" Condition="'$(DoNotPush)' == 'false' And '$(SkipVersioning)' != 'true'"> <!-- Commit all of the pending changes. --> <Message Text="Pushing changes to Git server..." /> <Exec Command="%22$(GitClient)%22 push origin $(GitBranch):$(GitBranch)" WorkingDirectory="$(LocalFolder)" ContinueOnError="true" /> </Target> <Target Name="AfterPushToServer"/> <Target Name="HandleBuildFailure"> <!-- Handle any unexpected build errors. --> <Exec Command="%22$(GitClient)%22 reset --hard %22origin/$(GitBranch)%22" WorkingDirectory="$(LocalFolder)"/>Lines 1–500 of 503. Load more
<?xml version="1.0" encoding="utf-8"?> <!-- ******************************************************************************************************* ** MasterBuild.buildproj - Gbtc ** ** Copyright © 2013, Grid Protection Alliance. All Rights Reserved. ** ** Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See ** the NOTICE file distributed with this work for additional information regarding copyright ownership. ** The GPA licenses this file to you under the Eclipse Public License -v 1.0 (the "License"); you may ** not use this file except in compliance with the License. You may obtain a copy of the License at: ** ** http://www.opensource.org/licenses/eclipse-1.0.php ** ** Unless agreed to in writing, the subject software distributed under the License is distributed on an ** "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the ** License for the specific language governing permissions and limitations. ** ** Code Modification History: ** =================================================================================================== ** 10/05/2009 - Pinal C. Patel ** Generated original version of source code. ** 10/07/2009 - Pinal C. Patel ** Fixed a bug in deletion of unwanted files prior to deployment. ** 10/10/2009 - Pinal C. Patel ** Added the ability to compile install packages. ** Added the ability to choose the files to be versioned. ** 10/13/2009 - Pinal C. Patel ** Enabled the check for Sandcastle Builder as a required tool. ** Modified deletion of *.pdb files to be active for release builds only. ** 10/15/2009 - Pinal C. Patel ** Added unit testing to the build process. ** 10/16/2009 - Pinal C. Patel ** Modified to skip the build process in the absence of new changes since the last build. ** 10/19/2009 - Pinal C. Patel ** Modified to allow archiving of binaries and installs for easy access. ** 04/27/2010 - Pinal C. Patel ** Modified to automatically force a build when a specific version is being built. ** 04/28/2010 - Pinal C. Patel ** Modified ProjectsToBuild to include an optional Properties property that can be used to ** override project properties during the build process. ** 08/01/2010 - Pinal C. Patel ** Modified to force a build if a specific version of the source code is being built by ** specifying the version using the SourceVersion property. ** 10/09/2010 - Pinal C. Patel ** Modified the build archival process to allow for customization. ** Moved initialization if FilesToDelete list to CoreBuildProjects target. ** Implemented VersionPrecision logic in CoreVersionSource target. ** 10/23/2010 - Pinal C. Patel ** Moved checkin of pending changes to CoreDeleteWorkspace task so version changes are ** checked-in only if the entire build completes successfully. ** 11/02/2010 - Pinal C. Patel ** Added missing logic in ArchiveBuildOutput target so binary and install archive files are ** created only if there are files to be added to these archives. ** 12/25/2010 - Pinal C. Patel ** Updated the versioning logic to not use the changeset for revision number since the maximum ** value allowed for revision number is 65534. ** 01/08/2011 - Pinal C. Patel ** Made TfsServer a must-override property. ** Allowed for customization of versioning scheme by consuming script. ** 08/26/2013 - J. Ritchie Carroll ** Added flag "SkipVersioning" to allow bypass of versioning steps. ** ******************************************************************************************************* --> <Project DefaultTargets="All" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="Targets\Inline\GitHistory.targets"/> <Import Project="Targets\MSBuild Community Tasks\MSBuild.Community.Tasks.Targets"/> <Import Project="Targets\MSBuild Extension Pack\MSBuild.ExtensionPack.tasks"/> <PropertyGroup> <!-- Name of the project being built. --> <ProjectName></ProjectName> <!-- Solution of the project being built. --> <ProjectSolution></ProjectSolution> <!-- URL of the Git Server. --> <GitServer>$(GitServer)</GitServer> <!-- Root local folder of the project. --> <LocalFolder>$(LocalFolder)</LocalFolder> <!-- Source control tag for the build. --> <BuildTag></BuildTag> <!-- Type of the build to compile. --> <BuildFlavor>$(BuildFlavor)</BuildFlavor> <!-- Target platform of the build. --> <BuildTarget>$(BuildTarget)</BuildTarget> <!-- Output folder of build content. --> <BuildOutputFolder>$(BuildOutputFolder)</BuildOutputFolder> <!-- Drop location of the build content. --> <BuildDeployFolder>$(BuildDeployFolder)</BuildDeployFolder> <!-- Setting for enabling user propmts. --> <BuildInteractive>$(BuildInteractive)</BuildInteractive> <!-- File containing the build version. --> <VersionFile></VersionFile> <!-- Versioning scheme major number change type. --> <VersionMajorChange></VersionMajorChange> <!-- Versioning scheme minor number change type. --> <VersionMinorChange></VersionMinorChange> <!-- Versioning scheme build number change type. --> <VersionBuildChange></VersionBuildChange> <!-- Versioning scheme revision number change type. --> <VersionRevisionChange></VersionRevisionChange> <!-- Paths to Git Client. --> <GitClient>$(GitClient)</GitClient> <!-- Branch to be built. --> <GitBranch>$(GitBranch)</GitBranch> <!-- Path to unit testing tool. --> <MSTest>$(MSTest)</MSTest> <!-- Path to Sandcastle Builder. --> <SandcastleBuilder>$(SandcastleBuilder)</SandcastleBuilder> <!-- Forces a build regardless of new changes since last build. --> <ForceBuild>$(ForceBuild)</ForceBuild> <!-- Skips the versioning process and just executes build steps. --> <SkipVersioning>$(SkipVersioning)</SkipVersioning> <!-- Prevents the build script from pushing to the remote repository. --> <DoNotPush>$(DoNotPush)</DoNotPush> <!--Executes build without running unit tests when true.--> <SkipUnitTest>$(SkipUnitTest)</SkipUnitTest> <!-- Name of binaries archive file. --> <BinariesArchiveFileName></BinariesArchiveFileName> <!-- Name of installs archive file. --> <InstallsArchiveFileName></InstallsArchiveFileName> <!-- Name of scripts archive file. --> <ScriptsArchiveFileName></ScriptsArchiveFileName> <!-- Name of source code archive file. --> <SourceArchiveFileName></SourceArchiveFileName> <!-- Working directory for creating binaries archive file. --> <BinariesArchiveWorkingDirectory></BinariesArchiveWorkingDirectory> <!-- Working directory for creating installs archive file. --> <InstallsArchiveWorkingDirectory></InstallsArchiveWorkingDirectory> <!-- Working directory for creating scripts archive file. --> <ScriptsArchiveWorkingDirectory></ScriptsArchiveWorkingDirectory> <!-- Working directory for creating source code archive file. --> <SourceArchiveWorkingDirectory></SourceArchiveWorkingDirectory> </PropertyGroup> <PropertyGroup> <!-- InitializeBuild PrepareSettings (Before > Core > After) CheckEnvironment (Before > Core > After) CreateWorkspace (Before > Core > After) CompileBuild UpdateRepository (Before > Core > After) VersionSource (Before > Core > After) BuildProjects (Before > Core > After) ExecuteUnitTests (Before > Core > After) FinalizeBuild CleanBuild (Before > Core > After) DeployBuild (Before > Core > After) PushToServer (Before > Core > After) --> <InitializeBuildDependsOn> PrepareSettings; CheckEnvironment; CreateWorkspace; </InitializeBuildDependsOn> <CompileBuildDependsOn> UpdateRepository; VersionSource; BuildProjects; ExecuteUnitTests; </CompileBuildDependsOn> <FinalizeBuildDependsOn> CleanBuild; DeployBuild; PushToServer; </FinalizeBuildDependsOn> <CheckEnvironmentDependsOn> BeforeCheckEnvironment; CoreCheckEnvironment; AfterCheckEnvironment; </CheckEnvironmentDependsOn> <PrepareSettingsDependsOn> BeforePrepareSettings; CorePrepareSettings; AfterPrepareSettings; </PrepareSettingsDependsOn> <CreateWorkspaceDependsOn> BeforeCreateWorkspace; CoreCreateWorkspace; AfterCreateWorkspace; </CreateWorkspaceDependsOn> <UpdateRepositoryDependsOn> BeforeUpdateRepository; CoreUpdateRepository; AfterUpdateRepository; </UpdateRepositoryDependsOn> <VersionSourceDependsOn> BeforeVersionSource; CoreVersionSource; AfterVersionSource; </VersionSourceDependsOn> <BuildProjectsDependsOn> BeforeBuildProjects; CoreBuildProjects; AfterBuildProjects; </BuildProjectsDependsOn> <ExecuteUnitTestsDependsOn> BeforeExecuteUnitTests; CoreExecuteUnitTests; AfterExecuteUnitTests; </ExecuteUnitTestsDependsOn> <CleanBuildDependsOn> BeforeCleanBuild; CoreCleanBuild; AfterCleanBuild; </CleanBuildDependsOn> <DeployBuildDependsOn> BeforeDeployBuild; CoreDeployBuild; AfterDeployBuild; </DeployBuildDependsOn> <PushToServerDependsOn> BeforePushToServer; CorePushToServer; AfterPushToServer; </PushToServerDependsOn> </PropertyGroup> <ItemGroup> <!-- List of projects to build. --> <ProjectsToBuild Include="Nothing" Exclude="Nothing"/> <!-- List of files to be versioned. --> <FilesToVersion Include="Nothing" Exclude="Nothing"> <VersionRegex>(?'BeforeVersion')(?'CoreVersion')(?'AfterVersion')</VersionRegex> <VersionPrecision>4</VersionPrecision> </FilesToVersion> <!-- List of unit test assemblies. --> <UnitTestAssemblies Include="Nothing" Exclude="Nothing"/> <!-- List of binaries to archive. --> <BinariesToArchive Include="Nothing" Exclude="Nothing"/> <!-- List of installs to archive. --> <InstallsToArchive Include="Nothing" Exclude="Nothing"/> <!-- List of source code files to archive. --> <SourcesToArchive Include="Nothing" Exclude="Nothing"/> <!-- Destinations of archive files (*.zip). --> <ArchiveDestinations Include="Nothing" Exclude="Nothing"/> </ItemGroup> <Target Name="All"> <!-- Entry point for the build. --> <CallTarget Targets="InitializeBuild"/> <CallTarget Targets="CompileBuild"/> <CallTarget Targets="FinalizeBuild"/> <Beep/> <OnError ExecuteTargets="HandleBuildFailure"/> </Target> <Target Name="InitializeBuild" DependsOnTargets="$(InitializeBuildDependsOn)"/> <Target Name="CompileBuild" DependsOnTargets="$(CompileBuildDependsOn)"/> <Target Name="FinalizeBuild" DependsOnTargets="$(FinalizeBuildDependsOn)"/> <Target Name="PrepareSettings" DependsOnTargets="$(PrepareSettingsDependsOn)"/> <Target Name="CheckEnvironment" DependsOnTargets="$(CheckEnvironmentDependsOn)"/> <Target Name="CreateWorkspace" DependsOnTargets="$(CreateWorkspaceDependsOn)"/> <Target Name="UpdateRepository" DependsOnTargets="$(UpdateRepositoryDependsOn)"/> <Target Name="VersionSource" DependsOnTargets="$(VersionSourceDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="BuildProjects" DependsOnTargets="$(BuildProjectsDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="ExecuteUnitTests" DependsOnTargets="$(ExecuteUnitTestsDependsOn)" Condition="'$(ForceBuild)' == 'true' And '$(SkipUnitTest)' == 'false'"/> <Target Name="CleanBuild" DependsOnTargets="$(CleanBuildDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="DeployBuild" DependsOnTargets="$(DeployBuildDependsOn)" Condition="'$(ForceBuild)' == 'true'"/> <Target Name="PushToServer" DependsOnTargets="$(PushToServerDependsOn)"/> <Target Name="BeforePrepareSettings"/> <Target Name="CorePrepareSettings"> <!-- Assign default values to unassigned properties. --> <Message Text="Preparing settings for build..."/> <Error Condition="'$(ProjectName)' == ''" Text="ProjectName property must be set."/> <Error Condition="'$(GitServer)' == ''" Text="GitServer property must be set."/> <PropertyGroup> <ProgramFiles32>$(MSBuildProgramFiles32)</ProgramFiles32> <ProgramFiles32 Condition="'$(ProgramFiles32)' == ''">$(ProgramFiles)</ProgramFiles32> <ProgramFiles64>$(ProgramW6432)</ProgramFiles64> <ProgramFiles64 Condition="'$(ProgramFiles64)' == ''">$(ProgramFiles)</ProgramFiles64> <LocalFolder Condition="'$(LocalFolder)' == ''">$([System.IO.Path]::GetFullPath('$(TEMP)\MSBuild\$(ProjectName)'))</LocalFolder> <BuildFlavor Condition="'$(BuildFlavor)' == ''">Release</BuildFlavor> <BuildTarget Condition="'$(BuildTarget)' == ''">Any CPU</BuildTarget> <BuildInParallel Condition="'$(BuildInParallel)' == ''">True</BuildInParallel> <BuildOutputFolder Condition="'$(BuildOutputFolder)' == ''">$(LocalFolder)\Build\Output\$(BuildFlavor)</BuildOutputFolder> <BuildInteractive Condition="'$(BuildInteractive)' == ''">true</BuildInteractive> <VersionFile Condition="'$(VersionFile)' == ''">$(LocalFolder)\Build\Scripts\$(ProjectName).version</VersionFile> <NuGet Condition="'$(NuGet)' == ''">$(ProgramFiles64)\NuGet\nuget.exe</NuGet> <GitClient Condition="'$(GitClient)' == ''">$(ProgramFiles32)\Git\cmd\git.exe</GitClient> <GitBranch Condition="'$(GitBranch)' == ''">master</GitBranch> <SetUpWorkspace Condition="'$(SetUpWorkspace)' == ''">True</SetUpWorkspace> <MSTest Condition="'$(MSTest)' == ''">$(VS140COMNTOOLS)\..\IDE\mstest.exe</MSTest> <!-- <SandcastleBuilder Condition="'$(SandcastleBuilder)' == ''">$(SHFBROOT)\SandcastleBuilderGUI.exe</SandcastleBuilder> --> <ForceBuild Condition="'$(ForceBuild)' == ''">false</ForceBuild> <SkipVersioning Condition="'$(SkipVersioning)' == ''">false</SkipVersioning> <DoNotPush Condition="'$(DoNotPush)' == ''">false</DoNotPush> <BinariesArchiveFileName Condition="'$(BinariesArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Binaries.zip</BinariesArchiveFileName> <InstallsArchiveFileName Condition="'$(InstallsArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Installs.zip</InstallsArchiveFileName> <ScriptsArchiveFileName Condition="'$(ScriptsArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Scripts.zip</ScriptsArchiveFileName> <SourceArchiveFileName Condition="'$(SourceArchiveFileName)' == ''">$(LocalFolder)\$(ProjectName).Source.zip</SourceArchiveFileName> <BinariesArchiveWorkingDirectory Condition="'$(BinariesArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Binaries</BinariesArchiveWorkingDirectory> <InstallsArchiveWorkingDirectory Condition="'$(InstallsArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Installs</InstallsArchiveWorkingDirectory> <ScriptsArchiveWorkingDirectory Condition="'$(ScriptsArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Scripts</ScriptsArchiveWorkingDirectory> <SourceArchiveWorkingDirectory Condition="'$(SourceArchiveWorkingDirectory)' == ''">$(LocalFolder)\Archives\Source</SourceArchiveWorkingDirectory> </PropertyGroup> </Target> <Target Name="AfterPrepareSettings"/> <Target Name="BeforeCheckEnvironment"/> <Target Name="CoreCheckEnvironment"> <!-- Ensure that all required tools are installed. --> <Message Text="Checking for required application..."/> <Error Condition="'$(GitClient)' != '' And !Exists('$(GitClient)')" Text="Git Client is not installed."/> <Error Condition="'$(MSTest)' != '' And !Exists('$(MSTest)')" Text="Unit testing tool is not installed."/> <Error Condition="'$(SandcastleBuilder)' != '' And !Exists('$(SandcastleBuilder)')" Text="Sandcastle Builder is not installed."/> </Target> <Target Name="AfterCheckEnvironment"/> <Target Name="BeforeCreateWorkspace"/> <Target Name="CoreCreateWorkspace"> <!-- Create a workspace for the build. --> <Message Text="Creating local build workspace..."/> <RemoveDir Directories="$(LocalFolder)" Condition="Exists('$(LocalFolder)') And !Exists('$(LocalFolder)\.git')"/> <MakeDir Directories="$(LocalFolder)" Condition="!Exists('$(LocalFolder)')"/> <Exec Command="%22$(GitClient)%22 clone %22$(GitServer)%22 ." WorkingDirectory="$(LocalFolder)" Condition="!Exists('$(LocalFolder)\.git')"/> <Exec Command="%22$(GitClient)%22 checkout %22$(GitBranch)%22" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> </Target> <Target Name="AfterCreateWorkspace"/> <Target Name="BeforeUpdateRepository"/> <Target Name="CoreUpdateRepository"> <!-- Get source code for the specified version. --> <Message Text="Getting latest updates from repo..."/> <Exec Command="%22$(GitClient)%22 gc" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 fetch" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 reset --hard %22origin/$(GitBranch)%22" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(GitClient)%22 clean -f -d -x" WorkingDirectory="$(LocalFolder)" Condition="'$(SetUpWorkspace)' != 'False'"/> <Exec Command="%22$(NuGet)%22 restore %22$(ProjectSolution)%22"/> <CallTarget Targets="CheckForChanges"/> </Target> <Target Name="CheckForChanges" Condition="'$(ForceBuild)' != 'true'"> <!-- Check for new changes since the last build. --> <ReadLinesFromFile File="$(VersionFile)"> <Output TaskParameter="Lines" ItemName="VersionNumber"/> </ReadLinesFromFile> <GitHistory GitClient="$(GitClient)" LocalPath="$(LocalFolder)" VersionTag="v@(VersionNumber)-$(GitBranch)" ContinueOnError="true"> <Output TaskParameter="TotalChanges" PropertyName="TotalChanges"/> </GitHistory> <Message Text="Detected $(TotalChanges) changes since last version."/> <PropertyGroup> <ForceBuild Condition="'$(TotalChanges)' == '-1' Or '$(TotalChanges)' > '0'">true</ForceBuild> <SkipVersioning Condition="'$(ForceBuild)' != 'true'">true</SkipVersioning> </PropertyGroup> <Message Text="Build is skipped - No new changes." Condition="'$(ForceBuild)' != 'true'"/> </Target> <Target Name="AfterUpdateRepository"/> <Target Name="BeforeVersionSource"/> <Target Name="CoreVersionSource" Condition="'@(FilesToVersion)' != '' And '$(SkipVersioning)' != 'true'"> <!-- Update version number of the source code. --> <Message Text="Versioning source code..."/> <Version VersionFile="$(VersionFile)" MajorType="$(VersionMajorChange)" MinorType="$(VersionMinorChange)" BuildType="$(VersionBuildChange)" RevisionType="$(VersionRevisionChange)"> <Output TaskParameter="Major" PropertyName="Major"/> <Output TaskParameter="Minor" PropertyName="Minor"/> <Output TaskParameter="Build" PropertyName="Build"/> <Output TaskParameter="Revision" PropertyName="Revision"/> </Version> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' <= '2'"/> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor).$(Build)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' == '3'"/> <FileUpdate Files="%(FilesToVersion.FullPath)" Regex="%(FilesToVersion.VersionRegex)" ReplacementText="${BeforeVersion}$(Major).$(Minor).$(Build).$(Revision)%(FilesToVersion.VersionTag)${AfterVersion}" Condition="'%(FilesToVersion.VersionPrecision)' == '4'"/> <PropertyGroup> <BuildTag Condition="'$(BuildTag)' == ''">v$(Major).$(Minor).$(Build).$(Revision)-$(GitBranch)</BuildTag> </PropertyGroup> <Exec Command="%22$(GitClient)%22 add --all" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> <Exec Command="%22$(GitClient)%22 commit -m %22$(ProjectName): Version change for build $(BuildTag).%22" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> <Exec Command="%22$(GitClient)%22 tag -f %22$(BuildTag)%22" WorkingDirectory="$(LocalFolder)" ContinueOnError="true"/> </Target> <Target Name="AfterVersionSource"/> <Target Name="BeforeBuildProjects"/> <Target Name="CoreBuildProjects"> <!-- Build all of the specified projects. --> <Message Text="Compiling projects..."/> <MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=$(BuildFlavor);Platform=$(BuildTarget);BuildInParallel=$(BuildInParallel)"/> <!-- Create list of files to be deleted from build output. --> <ItemGroup> <FilesToDelete Include="$(BuildOutputFolder)\**\setup.exe"/> <!-- <FilesToDelete Include="$(BuildOutputFolder)\**\*.pdb" Condition="'$(BuildFlavor)' == 'Release'"/> --> <FilesToDelete Include="$(BuildOutputFolder)\**\*.vshost.exe"/> <FilesToDelete Include="$(BuildOutputFolder)\**\*.vshost.exe.manifest"/> </ItemGroup> </Target> <Target Name="AfterBuildProjects"/> <Target Name="BeforeExecuteUnitTests"/> <Target Name="CoreExecuteUnitTests" Condition="'@(UnitTestAssemblies)' != ''"> <!-- Execute tests in unit test assemblies. --> <Message Text="Executing unit tests..."/> <Exec Command="%22$(MSTest)%22 /testcontainer:%22%(UnitTestAssemblies.FullPath)%22" WorkingDirectory="%(UnitTestAssemblies.RootDir)%(UnitTestAssemblies.Directory)"/> </Target> <Target Name="AfterExecuteUnitTests"/> <Target Name="BeforeCleanBuild"/> <Target Name="CoreCleanBuild"> <!-- Clean output of the current build. --> <Message Text="Cleaning build output..."/> <Delete Files="@(FilesToDelete)" ContinueOnError="true"/> </Target> <Target Name="AfterCleanBuild"/> <Target Name="BeforeDeployBuild"/> <Target Name="CoreDeployBuild" Condition="'$(BuildOutputFolder)' != '' And '$(BuildDeployFolder)' != ''"> <!-- Copy build content to the deploy folder. --> <Message Text="Deploying build content..."/> <ItemGroup> <FilesToDeploy Include="$(BuildOutputFolder)\**\*.*"/> </ItemGroup> <MakeDir Directories="$(BuildDeployFolder)" Condition="!Exists('$(BuildDeployFolder)')"/> <Folder TaskAction="RemoveContent" Path="$(BuildDeployFolder)"/> <Copy SourceFiles="@(FilesToDeploy)" DestinationFolder="$(BuildDeployFolder)\%(FilesToDeploy.RecursiveDir)"/> <CallTarget Targets="ArchiveBuildOutput"/> <CallTarget Targets="ArchiveSource"/> <CallTarget Targets="DeployArchives"/> </Target> <Target Name="ArchiveBuildOutput" Condition="'@(BinariesToArchive)' != '' Or '@(InstallsToArchive)' != '' Or '@(ScriptsToArchive)' != ''"> <!-- Create specified archives of build content. --> <Message Text="Archiving build content..."/> <Copy SourceFiles="@(BinariesToArchive)" DestinationFolder="$(BinariesArchiveWorkingDirectory)\%(BinariesToArchive.RecursiveDir)"/> <Copy SourceFiles="@(InstallsToArchive)" DestinationFolder="$(InstallsArchiveWorkingDirectory)\%(InstallsToArchive.RecursiveDir)"/> <Copy SourceFiles="@(ScriptsToArchive)" DestinationFolder="$(ScriptsArchiveWorkingDirectory)\%(ScriptsToArchive.RecursiveDir)"/> <ItemGroup> <BinariesToArchive Remove="@(BinariesToArchive)"/> <InstallsToArchive Remove="@(InstallsToArchive)"/> <ScriptsToArchive Remove="@(ScriptsToArchive)"/> <BinariesToArchive Include="$(BinariesArchiveWorkingDirectory)\**\*.*"/> <InstallsToArchive Include="$(InstallsArchiveWorkingDirectory)\**\*.*"/> <ScriptsToArchive Include="$(ScriptsArchiveWorkingDirectory)\**\*.*"/> </ItemGroup> <MSBuild.Community.Tasks.Zip Files="@(BinariesToArchive)" ZipFileName="$(BinariesArchiveFileName)" WorkingDirectory="$(BinariesArchiveWorkingDirectory)" Condition="'@(BinariesToArchive)' != ''"/> <MSBuild.Community.Tasks.Zip Files="@(InstallsToArchive)" ZipFileName="$(InstallsArchiveFileName)" WorkingDirectory="$(InstallsArchiveWorkingDirectory)" Condition="'@(InstallsToArchive)' != ''"/> <MSBuild.Community.Tasks.Zip Files="@(ScriptsToArchive)" ZipFileName="$(ScriptsArchiveFileName)" WorkingDirectory="$(ScriptsArchiveWorkingDirectory)" Condition="'@(ScriptsToArchive)' != ''"/> <ItemGroup> <Archives Include="$(LocalFolder)\*.zip"/> </ItemGroup> </Target> <Target Name="ArchiveSource" Condition="'@(SourcesToArchive)' != ''"> <!-- Create archive of source tree. --> <Message Text="Archiving source code..."/> <Copy SourceFiles="@(SourcesToArchive)" DestinationFolder="$(SourceArchiveWorkingDirectory)\%(SourcesToArchive.RecursiveDir)"/> <ItemGroup> <SourcesToArchive Remove="@(SourcesToArchive)"/> <SourcesToArchive Include="$(SourceArchiveWorkingDirectory)\**\*.*"/> </ItemGroup> <MSBuild.Community.Tasks.Zip Files="@(SourcesToArchive)" ZipFileName="$(SourceArchiveFileName)" WorkingDirectory="$(SourceArchiveWorkingDirectory)" Condition="'@(SourcesToArchive)' != ''"/> <ItemGroup> <Archives Include="$(SourceArchiveFileName)"/> </ItemGroup> </Target> <Target Name="DeployArchives" Condition="'@(Archives)' != ''"> <Copy SourceFiles="@(Archives)" DestinationFolder="%(ArchiveDestinations.FullPath)" ContinueOnError="true"/> </Target> <Target Name="AfterDeployBuild"/> <Target Name="BeforePushToServer"/> <Target Name="CorePushToServer" Condition="'$(DoNotPush)' == 'false' And '$(SkipVersioning)' != 'true'"> <!-- Commit all of the pending changes. --> <Message Text="Pushing changes to Git server..." /> <Exec Command="%22$(GitClient)%22 push origin $(GitBranch):$(GitBranch)" WorkingDirectory="$(LocalFolder)" ContinueOnError="true" /> </Target> <Target Name="AfterPushToServer"/> <Target Name="HandleBuildFailure"> <!-- Handle any unexpected build errors. --> <Exec Command="%22$(GitClient)%22 reset --hard %22origin/$(GitBranch)%22" WorkingDirectory="$(LocalFolder)"/>