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;
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-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>
2015-07-06 11:59:03 +02:00
<PropertyGroup Condition="'$(BUILD_RELEASE)'!='' AND '$(BUILD_NIGHTLY)'!=''">
2015-07-07 15:20:35 +02:00
<DECIMAL_BUILD_NUMBER>.$(BUILD_RELEASE)-$(BUILD_NIGHTLY)</DECIMAL_BUILD_NUMBER>
2015-07-06 11:59:03 +02:00
</PropertyGroup>
<PropertyGroup Condition="'$(BUILD_RELEASE)'!='' AND '$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''">
2015-07-07 15:11:40 +02:00
<DECIMAL_BUILD_NUMBER>.$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)</DECIMAL_BUILD_NUMBER>
2015-07-06 11:59:03 +02:00
</PropertyGroup>
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>
<ItemGroup>
<SystemFolders Include="$(WebAppFolder)App_Data" />
<SystemFolders Include="$(WebAppFolder)Media" />
<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>
<Target Name="CleanUp" DependsOnTargets="ZipWebPiApp">
<Message Text="Deleting $(BuildFolder)" Importance="high" />
<RemoveDir Directories="$(BuildFolder)" />
<Message Text="Finished deleting $(BuildFolder)" Importance="high" />
</Target>
<Target Name="ZipWebPiApp" DependsOnTargets="ZipWebApp" >
<!-- Clean folders -->
<RemoveDir Directories="$(WebPiFolder)" />
<MakeDir Directories="$(WebPiFolder)" />
<MakeDir Directories="$(WebPiFolder)umbraco" />
<!-- Copy fresh built umbraco files -->
<Exec Command="xcopy %22$(WebAppFolderAbsolutePath)*%22 %22$(WebPiFolderAbsolutePath)umbraco%22 /S /E /Y /I" />
<!-- Copy Web Pi template files -->
<ItemGroup>
<WebPiFiles Include="..\src\WebPi\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(WebPiFiles)"
DestinationFiles="@(WebPiFiles->'$(WebPiFolder)%(RecursiveDir)%(Filename)%(Extension)')" />
<!-- Zip the files -->
2015-07-27 15:51:57 +02:00
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameWebPi)%22 %22$(WebPiFolderAbsolutePath)*%22 -x!dotLess.Core.dll -x![Content_Types].xml >NUL" />
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" />
2015-06-21 14:40:23 +02:00
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameBin)%22 %22$(SolutionBinFolderAbsolutePath)*%22 -x!dotLess.Core.dll >NUL" />
2015-07-27 15:51:57 +02:00
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileName)%22 %22$(WebAppFolderAbsolutePath)*%22 -x!dotLess.Core.dll -x![Content_Types].xml >NUL" />
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
2016-02-17 11:44:33 +01:00
Include="..\src\packages\SqlServerCE.4.0.0.1\**\*.*"
Exclude="..\src\packages\SqlServerCE.4.0.0.1\lib\**\*;..\src\packages\SqlServerCE.4.0.0.1\**\*.nu*"
2012-12-10 11:35:31 -01:00
/>
2013-02-02 06:08:14 +06:00
</ItemGroup>
<Copy SourceFiles="@(SQLCE4Files)"
DestinationFiles="@(SQLCE4Files->'$(SolutionBinFolder)%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<Copy SourceFiles="@(SQLCE4Files)"
DestinationFiles="@(SQLCE4Files->'$(WebAppFolder)bin\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
<!-- 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>
<!-- 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" />
2015-07-27 15:51:57 +02:00
<CustomLanguageFiles Include="$(WebAppFolder)config\lang\*.xml" />
2015-03-20 09:31:14 +11:00
<WebConfigTransformFile Include="$(WebAppFolder)Web.config" />
</ItemGroup>
<Copy SourceFiles="@(ConfigFiles)"
DestinationFiles="@(ConfigFiles->'$(ConfigsFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
2015-07-27 15:51:57 +02:00
<Copy SourceFiles="@(CustomLanguageFiles)"
2015-07-27 16:08:28 +02:00
DestinationFiles="@(CustomLanguageFiles->'$(ConfigsFolder)Lang\%(RecursiveDir)%(Filename)%(Extension)')"
2015-07-27 15:51:57 +02:00
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
2015-03-20 09:31:14 +11:00
<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 -->
2015-06-21 14:40:23 +02: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);Verbosity=minimal" 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>
2015-03-30 20:13:03 +11:00
2013-02-02 06:08:14 +06:00
<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>
2015-07-07 15:11:40 +02:00
<NewVersion Condition="'$(BUILD_NIGHTLY)'!=''">$(BUILD_RELEASE)-$(BUILD_NIGHTLY)</NewVersion>
<NewVersion Condition="'$(BUILD_COMMENT)'!='' And '$(BUILD_NIGHTLY)'!=''">$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)</NewVersion>
2015-03-20 09:31:14 +11:00
</PropertyGroup>
2015-07-06 11:59:03 +02:00
<!-- Match & replace 3 and 4 digit version numbers and -beta and +nightly (if they're 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
2015-07-06 11:59:03 +02:00
<FileUpdate Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Condition="'$(BUILD_NIGHTLY)'!=''"
Regex="CurrentComment { get { return "(.+)?""
2015-07-07 15:11:40 +02:00
ReplacementText="CurrentComment { get { return "$(BUILD_NIGHTLY)""/>
2015-07-06 11:59:03 +02:00
<FileUpdate Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Condition="'$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''"
Regex="CurrentComment { get { return "(.+)?""
2015-07-07 15:11:40 +02:00
ReplacementText="CurrentComment { get { return "$(BUILD_COMMENT)-$(BUILD_NIGHTLY)""/>
2015-07-06 11:59:03 +02:00
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)")"/>
2015-07-06 11:59:03 +02:00
<FileUpdate
Condition="'$(BUILD_NIGHTLY)'!=''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\("(.+)?"\)"
2015-07-07 15:11:40 +02:00
ReplacementText="AssemblyInformationalVersion("$(BUILD_RELEASE)-$(BUILD_NIGHTLY)")"/>
2015-07-06 11:59:03 +02:00
<FileUpdate
Condition="'$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\("(.+)?"\)"
2015-07-07 15:11:40 +02:00
ReplacementText="AssemblyInformationalVersion("$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)")"/>
2015-07-06 11:59:03 +02:00
<FileUpdate
Condition="'$(BUILD_COMMENT)'=='' AND '$(BUILD_NIGHTLY)'==''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\("(.+)?"\)"
ReplacementText="AssemblyInformationalVersion("$(BUILD_RELEASE)")"/>
2015-03-20 09:31:14 +11:00
<!--This updates the copyright year-->
<FileUpdate
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>