2012-12-03 15:53:06 -01:00
<Project DefaultTargets= "Build" ToolsVersion= "4.0" xmlns= "http://schemas.microsoft.com/developer/msbuild/2003" >
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<!--
2012-08-16 07:06:46 -01:00
****************************************************
INCLUDES
*****************************************************
-->
2013-02-02 06:08:14 +06:00
<PropertyGroup>
<MSBuildCommunityTasksPath> ..\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
<UmbracoMSBuildTasksPath> ..\UmbracoMSBuildTasks</UmbracoMSBuildTasksPath>
</PropertyGroup>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<Import Project= "..\tools\UmbracoMSBuildTasks\Umbraco.MSBuild.Tasks.Targets" />
<Import Project= "..\tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
2015-03-20 09:31:14 +11:00
<UsingTask TaskName= "GenerateHash" TaskFactory= "CodeTaskFactory" AssemblyFile= "$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
2013-02-20 18:28:07 -01:00
<ParameterGroup>
2015-03-20 09:31:14 +11:00
<InputFiles ParameterType= "Microsoft.Build.Framework.ITaskItem[]" Required= "true" />
<OutputFile ParameterType= "System.String" Required= "true" />
2013-02-20 18:28:07 -01:00
</ParameterGroup>
<Task>
2015-03-20 09:31:14 +11:00
<Using Namespace= "System.IO" />
<Using Namespace= "System.Linq" />
<Using Namespace= "System.Security.Cryptography" />
<Code Type= "Fragment" Language= "cs" >
<![CDATA[
2013-02-20 18:28:07 -01:00
using (var ms = new MemoryStream())
{
foreach (var item in InputFiles)
{
string path = item.ItemSpec;
2013-02-02 06:08:14 +06:00
2013-02-20 18:28:07 -01:00
using (FileStream stream = new FileStream(path, FileMode.Open))
{
using (var cryptoProvider = new SHA1CryptoServiceProvider())
{
var fileHash = cryptoProvider.ComputeHash(stream);
using (TextWriter w = new StreamWriter(OutputFile, false))
{
w.WriteLine(string.Join("", fileHash.Select(b => b.ToString("x2"))));
}
}
}
}
}
]]>
2015-03-20 09:31:14 +11:00
</Code>
2013-02-20 18:28:07 -01:00
</Task>
2015-03-20 09:31:14 +11:00
</UsingTask>
2013-02-20 18:28:07 -01:00
2013-02-02 06:08:14 +06:00
<!--
2012-08-16 07:06:46 -01:00
****************************************************
VARIABLES
*****************************************************
-->
2013-02-02 06:08:14 +06:00
<!-- NB: BUILD_NUMBER is passed in by the build server -->
<PropertyGroup Condition= "'$(BUILD_NUMBER)'!=''" >
<DECIMAL_BUILD_NUMBER> .$(BUILD_NUMBER)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
<PropertyGroup Condition= "'$(BUILD_RELEASE)'!=''" >
<DECIMAL_BUILD_NUMBER> .$(BUILD_RELEASE)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
<PropertyGroup Condition= "'$(BUILD_RELEASE)'!='' AND '$(BUILD_COMMENT)'!=''" >
<DECIMAL_BUILD_NUMBER> .$(BUILD_RELEASE)-$(BUILD_COMMENT)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<PropertyGroup>
2014-05-08 13:56:19 +02:00
<BuildConfiguration> Release</BuildConfiguration>
2013-02-02 06:08:14 +06:00
<BuildFolder> _BuildOutput\</BuildFolder>
<BuildZipFileName> UmbracoCms$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileName>
<BuildZipFileNameBin> UmbracoCms.AllBinaries$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileNameBin>
<BuildZipFileNameWebPi> UmbracoCms.WebPI$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileNameWebPi>
<IncludeSymbols> False</IncludeSymbols>
<BuildFolderRelativeToProjects> ..\..\build\$(BuildFolder)</BuildFolderRelativeToProjects>
<BuildFolderAbsolutePath> $(MSBuildProjectDirectory)\$(BuildFolder)</BuildFolderAbsolutePath>
<SolutionBinFolder> $(BuildFolder)bin\</SolutionBinFolder>
<WebAppFolder> $(BuildFolder)WebApp\</WebAppFolder>
<WebPiFolder> $(BuildFolder)WebPi\</WebPiFolder>
2015-03-20 09:31:14 +11:00
<ConfigsFolder> $(BuildFolder)Configs\</ConfigsFolder>
2013-02-02 06:08:14 +06:00
<SolutionBinFolderRelativeToProjects> $(BuildFolderRelativeToProjects)bin\</SolutionBinFolderRelativeToProjects>
<SolutionBinFolderAbsolutePath> $(BuildFolderAbsolutePath)bin\</SolutionBinFolderAbsolutePath>
<WebAppFolderRelativeToProjects> $(BuildFolderRelativeToProjects)WebApp\</WebAppFolderRelativeToProjects>
<WebAppFolderAbsolutePath> $(BuildFolderAbsolutePath)WebApp\</WebAppFolderAbsolutePath>
<WebPiFolderRelativeToProjects> $(BuildFolderRelativeToProjects)WebPi\</WebPiFolderRelativeToProjects>
<WebPiFolderAbsolutePath> $(BuildFolderAbsolutePath)WebPi\</WebPiFolderAbsolutePath>
</PropertyGroup>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<ItemGroup>
<SystemFolders Include= "$(WebAppFolder)App_Plugins" />
<SystemFolders Include= "$(WebAppFolder)App_Code" />
<SystemFolders Include= "$(WebAppFolder)App_Data" />
<SystemFolders Include= "$(WebAppFolder)Media" />
<SystemFolders Include= "$(WebAppFolder)Masterpages" />
<SystemFolders Include= "$(WebAppFolder)Scripts" />
<SystemFolders Include= "$(WebAppFolder)Css" />
<SystemFolders Include= "$(WebAppFolder)Xslt" />
<SystemFolders Include= "$(WebAppFolder)UserControls" />
<SystemFolders Include= "$(WebAppFolder)Views" />
</ItemGroup>
<!--
2012-08-16 07:06:46 -01:00
****************************************************
TARGETS
*****************************************************
-->
2015-03-20 09:31:14 +11:00
<Target Name= "Build" DependsOnTargets= "GenerateWebPiHash" >
2013-02-02 06:08:14 +06:00
<Message Text= "Build finished" />
2015-03-20 09:31:14 +11:00
</Target>
<Target Name= "GenerateWebPiHash" DependsOnTargets= "ZipWebPiApp" >
<ItemGroup>
2013-02-20 18:28:07 -01:00
<WebPiFile Include= "$(BuildZipFileNameWebPi)" />
2015-03-20 09:31:14 +11:00
</ItemGroup>
<Message Text= "Calculating hash for $(BuildZipFileNameWebPi)" />
<GenerateHash InputFiles= "@(WebPiFile)" OutputFile= "webpihash.txt" />
2013-02-02 06:08:14 +06:00
</Target>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<Target Name= "CleanUp" DependsOnTargets= "ZipWebPiApp" >
<Message Text= "Deleting $(BuildFolder)" Importance= "high" />
<RemoveDir Directories= "$(BuildFolder)" />
<Message Text= "Finished deleting $(BuildFolder)" Importance= "high" />
</Target>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<Target Name= "ZipWebPiApp" DependsOnTargets= "ZipWebApp" >
<!-- Clean folders -->
<RemoveDir Directories= "$(WebPiFolder)" />
<MakeDir Directories= "$(WebPiFolder)" />
<MakeDir Directories= "$(WebPiFolder)umbraco" />
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<!-- Copy fresh built umbraco files -->
<Exec Command= "xcopy %22$(WebAppFolderAbsolutePath)*%22 %22$(WebPiFolderAbsolutePath)umbraco%22 /S /E /Y /I" />
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<!-- Copy Web Pi template files -->
<ItemGroup>
<WebPiFiles Include= "..\src\WebPi\**\*.*" />
</ItemGroup>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<Copy SourceFiles= "@(WebPiFiles)"
DestinationFiles= "@(WebPiFiles->'$(WebPiFolder)%(RecursiveDir)%(Filename)%(Extension)')" />
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<!-- Zip the files -->
2015-05-01 14:27:26 +02:00
<Exec Command= "..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameWebPi)%22 %22$(WebPiFolderAbsolutePath)*%22 -x!dotLess.Core.dll" />
2013-02-02 06:08:14 +06:00
</Target>
2015-03-31 13:49:28 +11:00
<Target Name= "ZipWebApp" DependsOnTargets= "CreateSystemFolders" >
2013-02-02 06:08:14 +06:00
<Message Text= "Starting to zip to $(buildDate)-$(BuildZipFileName)" Importance= "high" />
2014-12-02 11:43:58 +01:00
<Exec Command= "..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameBin)%22 %22$(SolutionBinFolderAbsolutePath)*%22 -x!dotLess.Core.dll" />
<Exec Command= "..\tools\7zip\7za.exe a -r %22$(BuildZipFileName)%22 %22$(WebAppFolderAbsolutePath)*%22 -x!dotLess.Core.dll" />
2013-02-02 06:08:14 +06:00
<Message Text= "Finished zipping to build\$(BuildFolder)\$(buildDate)-$(BuildZipFileName)" Importance= "high" />
</Target>
2015-03-31 13:49:28 +11:00
2013-08-20 14:18:02 +02:00
<Target Name= "CreateSystemFolders" DependsOnTargets= "CopyBelleBuild" Inputs= "@(SystemFolders)" Outputs= "%(Identity).Dummy" >
2013-02-02 06:08:14 +06:00
<MakeDir Directories= "@(SystemFolders)" />
</Target>
2013-08-20 14:18:02 +02:00
<Target Name= "CopyBelleBuild" DependsOnTargets= "CopyLibraries" >
<ItemGroup>
2013-08-20 16:43:36 +02:00
<BelleFiles Include= "..\src\Umbraco.Web.UI.Client\build\belle\**\*.*" Exclude= "..\src\Umbraco.Web.UI.Client\build\belle\index.html" />
2015-03-20 09:31:14 +11:00
</ItemGroup>
<Copy SourceFiles= "@(BelleFiles)"
DestinationFiles= "@(BelleFiles->'$(WebAppFolder)umbraco\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
2013-08-20 14:18:02 +02:00
</Target>
2015-03-20 09:31:14 +11:00
2013-02-02 06:08:14 +06:00
<Target Name= "CopyLibraries" DependsOnTargets= "OffsetTimestamps" >
<!-- Copy SQL CE -->
<ItemGroup>
<SQLCE4Files
Include= "..\src\packages\SqlServerCE.4.0.0.0\**\*.*"
Exclude= "..\src\packages\SqlServerCE.4.0.0.0\lib\**\*;..\src\packages\SqlServerCE.4.0.0.0\**\*.nu*"
2012-12-10 11:35:31 -01:00
/>
2013-02-02 06:08:14 +06:00
</ItemGroup>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<Copy SourceFiles= "@(SQLCE4Files)"
DestinationFiles= "@(SQLCE4Files->'$(SolutionBinFolder)%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
2012-12-10 11:35:31 -01:00
2013-02-02 06:08:14 +06:00
<Copy SourceFiles= "@(SQLCE4Files)"
DestinationFiles= "@(SQLCE4Files->'$(WebAppFolder)bin\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
</Target>
2012-08-16 07:06:46 -01:00
2013-02-02 06:08:14 +06:00
<!-- Offset the modified timestamps on all umbraco dlls, as WebResources break if date is in the future, which, due to timezone offsets can happen. -->
<Target Name= "OffsetTimestamps" DependsOnTargets= "CopyTransformedWebConfig" >
<CreateItem Include= "$(BuildFolder)**\umbraco.*.dll" >
<Output TaskParameter= "Include" ItemName= "FilesToOffsetTimestamp" />
</CreateItem>
<Message Text= "Starting to offset timestamps" Importance= "high" />
<Umbraco.MSBuild.Tasks.TimestampOffset Files= "@(FilesToOffsetTimestamp)" Offset= "-11" />
<Message Text= "Finished offsetting timestamps" Importance= "high" />
</Target>
2013-01-15 09:13:48 -01:00
2013-02-02 06:08:14 +06:00
<!-- Copy the transformed web.config file to the root -->
2015-03-20 09:31:14 +11:00
<Target Name= "CopyTransformedWebConfig" DependsOnTargets= "CopyTransformedConfig" >
2013-02-02 06:08:14 +06:00
<ItemGroup>
<WebConfigFile Include= "..\src\Umbraco.Web.UI\web.$(BuildConfiguration).Config.transformed" />
</ItemGroup>
<Copy SourceFiles= "@(WebConfigFile)"
DestinationFiles= "$(WebAppFolder)Web.config"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
2015-03-20 09:31:14 +11:00
</Target>
<!-- Copy the config files and rename them to *.config.transform -->
<Target Name= "CopyTransformedConfig" DependsOnTargets= "CopyXmlDocumentation" >
2013-06-27 15:15:27 +02:00
<ItemGroup>
2015-03-20 09:31:14 +11:00
<ConfigFiles Include= "$(WebAppFolder)config\*.config;$(WebAppFolder)config\*.js" />
<WebConfigTransformFile Include= "$(WebAppFolder)Web.config" />
</ItemGroup>
<Copy SourceFiles= "@(ConfigFiles)"
DestinationFiles= "@(ConfigFiles->'$(ConfigsFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
<Copy SourceFiles= "@(WebConfigTransformFile)"
DestinationFiles= "$(ConfigsFolder)Web.config.transform"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
2013-02-02 06:08:14 +06:00
</Target>
<!-- Copy the xml documentation to the bin folder -->
2013-08-20 18:08:34 +02:00
<Target Name= "CopyXmlDocumentation" DependsOnTargets= "CleanupPresentation" >
2013-02-02 06:08:14 +06:00
<ItemGroup>
<XmlDocumentationFiles Include= "$(SolutionBinFolder)*.xml" />
</ItemGroup>
<Copy SourceFiles= "@(XmlDocumentationFiles)"
DestinationFiles= "@(XmlDocumentationFiles->'$(WebAppFolder)bin\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles= "true"
SkipUnchangedFiles= "false" />
<Message Text= "CopyXmlDocumentation" />
</Target>
2013-08-20 18:08:34 +02:00
<!-- Unlike 2010, the VS2012 build targets file doesn't clean up the umbraco.presentation dir, do it manually -->
<Target Name= "CleanupPresentation" DependsOnTargets= "CompileProjects" >
2015-03-20 09:31:14 +11:00
<ItemGroup>
<PresentationFolderToDelete Include= "$(WebAppFolder)umbraco.presentation" />
2013-08-20 18:08:34 +02:00
</ItemGroup>
2015-03-20 09:31:14 +11:00
<RemoveDir Directories= "@(PresentationFolderToDelete)" />
2013-08-20 18:08:34 +02:00
</Target>
2015-03-31 13:49:28 +11:00
<Target Name= "CompileProjects" DependsOnTargets= "SetVersionNumber" >
2015-03-20 09:31:14 +11:00
2013-02-02 06:08:14 +06:00
<Message Text= "Compiling web project to build\$(BuildFolder)" Importance= "high" />
<!-- For UseWPP_CopyWebApplication=True see http://stackoverflow.com/questions/1983575/copywebapplication-with-web-config-transformations -->
<!-- Build the Umbraco.Web.UI project -->
2014-01-19 15:21:47 +01:00
<MSBuild Projects= "..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj" Properties= "WarningLevel=0;Configuration=$(BuildConfiguration);UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False;OutDir=$(SolutionBinFolderAbsolutePath);WebProjectOutputDir=$(WebAppFolderAbsolutePath)" Targets= "Clean;Rebuild;" BuildInParallel= "False" ToolsVersion= "4.0" UnloadProjectsOnCompletion= "False" >
2013-02-02 06:08:14 +06:00
</MSBuild>
2015-03-20 09:31:14 +11:00
2013-02-02 06:08:14 +06:00
<!-- DONE -->
<Message Text= "Finished compiling projects" Importance= "high" />
</Target>
<Target Name= "SetVersionNumber" Condition= "'$(BUILD_RELEASE)'!=''" >
2015-03-20 09:31:14 +11:00
<PropertyGroup>
<NewVersion> $(BUILD_RELEASE)</NewVersion>
<NewVersion Condition= "'$(BUILD_COMMENT)'!=''" > $(BUILD_RELEASE)-$(BUILD_COMMENT)</NewVersion>
</PropertyGroup>
<!-- Match & replace 3 and 4 digit version numbers and -beta (if it's there) -->
2013-02-02 06:08:14 +06:00
<FileUpdate
2013-01-15 09:13:48 -01:00
Files= "..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
2013-01-14 12:16:55 -01:00
Regex= "(\d+)\.(\d+)\.(\d+)(.(\d+))?"
2013-01-15 09:13:48 -01:00
ReplacementText= "$(BUILD_RELEASE)" />
2013-01-14 12:16:55 -01:00
<FileUpdate Files= "..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
2015-02-26 12:38:03 +01:00
Regex= "CurrentComment { get { return "(.+)?""
2013-01-14 12:16:55 -01:00
ReplacementText= "CurrentComment { get { return "$(BUILD_COMMENT)"" />
2015-03-20 09:31:14 +11:00
<!--This updates the AssemblyFileVersion for the solution to the umbraco version-->
<FileUpdate
Files= "..\src\SolutionInfo.cs"
Regex= "AssemblyFileVersion\("(.+)?"\)"
ReplacementText= "AssemblyFileVersion("$(BUILD_RELEASE)")" />
<!--This updates the AssemblyInformationalVersion for the solution to the umbraco version and comment-->
<FileUpdate
Condition= "'$(BUILD_COMMENT)'!=''"
Files= "..\src\SolutionInfo.cs"
Regex= "AssemblyInformationalVersion\("(.+)?"\)"
ReplacementText= "AssemblyInformationalVersion("$(BUILD_RELEASE)-$(BUILD_COMMENT)")" />
<FileUpdate
Condition= "'$(BUILD_COMMENT)'==''"
Files= "..\src\SolutionInfo.cs"
Regex= "AssemblyInformationalVersion\("(.+)?"\)"
ReplacementText= "AssemblyInformationalVersion("$(BUILD_RELEASE)")" />
<!--This updates the copyright year-->
<FileUpdate
Condition= "'$(BUILD_COMMENT)'==''"
Files= "..\src\SolutionInfo.cs"
Regex= "AssemblyCopyright\("Copyright © Umbraco (\d{4})"\)"
ReplacementText= "AssemblyCopyright("Copyright © Umbraco $([System.DateTime]::Now.ToString(`yyyy`))")" />
<XmlPoke XmlInputPath= ".\NuSpecs\build\UmbracoCms.props"
Namespaces= "<Namespace Prefix='x' Uri='http://schemas.microsoft.com/developer/msbuild/2003' />"
Query= "//x:UmbracoVersion"
Value= "$(NewVersion)" />
2013-02-02 06:08:14 +06:00
</Target>
2012-08-16 07:06:46 -01:00
</Project>