publish.csproj 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Project DefaultTargets="Publish" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3. <!-- build targets -->
  4. <Target Name="Clean" DependsOnTargets="_Clean" />
  5. <Target Name="Build" DependsOnTargets="_Clean;_Prerequisites;_StampVersion;_GenerateSource;_Build" />
  6. <Target Name="Label" DependsOnTargets="_HgLabel" />
  7. <Target Name="Package" DependsOnTargets="_HgPack;_NugetPack" />
  8. <Target Name="Prepare" DependsOnTargets="Clean;Build;Label;Package" />
  9. <Target Name="PushAll" DependsOnTargets="_HgPush;_NugetPush" />
  10. <Target Name="Publish" DependsOnTargets="Prepare;PushAll" />
  11. <PropertyGroup>
  12. <ProjectName>Protocol Buffers</ProjectName>
  13. <VersionMajor>2</VersionMajor>
  14. <VersionMinor>4</VersionMinor>
  15. <VersionBuild>1</VersionBuild>
  16. <VersionRevision></VersionRevision>
  17. <VersionLabel></VersionLabel>
  18. <PackagePrefix>protobuf-csharp-port-</PackagePrefix>
  19. <PublishDebug>false</PublishDebug>
  20. <GoogleUsername></GoogleUsername>
  21. <GooglePassword></GooglePassword>
  22. <!--Directory Paths-->
  23. <ProjectDirectory>$(MSBuildProjectDirectory)\..</ProjectDirectory>
  24. <BuildTempDirectory>$(ProjectDirectory)\build_temp</BuildTempDirectory>
  25. <BuildOutputDirectory>$(ProjectDirectory)\build_output</BuildOutputDirectory>
  26. <SourceDirectory>$(ProjectDirectory)\src</SourceDirectory>
  27. <LibDirectory>$(ProjectDirectory)\lib</LibDirectory>
  28. <!-- File Paths -->
  29. <SigningKey>$(ProjectDirectory)\release-key\Google.ProtocolBuffers.snk</SigningKey>
  30. <!--Tool Paths-->
  31. <HgTool>hg.exe</HgTool>
  32. <Python>C:\Python25\python.exe</Python>
  33. <SnTool>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A@InstallationFolder)Bin\sn.exe</SnTool>
  34. <StampVer>$(LibDirectory)\StampVersion.exe</StampVer>
  35. <ZipExePath>$(LibDirectory)\7-Zip 9.20\7za.exe</ZipExePath>
  36. <NuGet>$(LibDirectory)\NuGet.exe</NuGet>
  37. <ProtogenExePath>$(BuildOutputDirectory)\tools\protogen.exe</ProtogenExePath>
  38. </PropertyGroup>
  39. <!-- Import user settings -->
  40. <Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')" />
  41. <!-- Files -->
  42. <ItemGroup>
  43. </ItemGroup>
  44. <!-- Tasks -->
  45. <Target Name="_Prerequisites" DependsOnTargets="_CheckEnvironment;_ReadVersion" />
  46. <Target Name="_Clean">
  47. <MSBuild Properties="Configuration=Debug;" Targets="Clean" Projects="$(MSBuildProjectDirectory)\target.csproj" />
  48. <MSBuild Properties="Configuration=Release;" Targets="Clean" Projects="$(MSBuildProjectDirectory)\target.csproj" />
  49. <MakeDir Directories="$(BuildTempDirectory)" />
  50. <MakeDir Directories="$(BuildOutputDirectory)" />
  51. </Target>
  52. <Target Name="_WriteUserConfig">
  53. <ItemGroup>
  54. <Lines Include="&lt;Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>" />
  55. <Lines Include=" &lt;PropertyGroup>"/>
  56. <Lines Include=" &lt;GoogleUsername> (Enter your google-code user/password here) &lt;/GoogleUsername>"/>
  57. <Lines Include=" &lt;GooglePassword>&lt;/GooglePassword>"/>
  58. <Lines Include=" &lt;/PropertyGroup>" />
  59. <Lines Include="&lt;/Project>" />
  60. </ItemGroup>
  61. <WriteLinesToFile File="$(MSBuildProjectFullPath).user" Lines="@(Lines)" Overwrite="true" Condition="!Exists('$(MSBuildProjectFullPath).user')" />
  62. <Exec Command="Notepad.exe $(MSBuildProjectFullPath).user" />
  63. </Target>
  64. <Target Name="_CheckEnvironment">
  65. <!-- Require google credentials -->
  66. <CallTarget Targets="_WriteUserConfig" Condition=" '$(GooglePassword)' == '' " />
  67. <Error Text="Restart after you verify your credentials in $(MSBuildProjectFullPath).user" Condition=" '$(GooglePassword)' == '' " />
  68. <!-- Require Win7.0A SDK to verify strong-name -->
  69. <Error Text="Unable to locate Win7SDK Tools: $(SnTool)" Condition="!Exists($(SnTool))" />
  70. <!-- Require Python 2.5 installed -->
  71. <!-- Error Text="Unable to locate Python 2.5: $(Python)" Condition="!Exists($(Python))" / -->
  72. <!-- Require production signing key -->
  73. <Exec Command="$(HgTool) clone https://bitbucket.org/rknapp/protobuf-csharp-port-keyfile $(ProjectDirectory)\release-key" Condition="!Exists('$(SigningKey)')" />
  74. <Error Text="Unable to locate release signing key: $(SigningKey)" Condition="!Exists($(SigningKey))" />
  75. </Target>
  76. <Target Name="_ReadVersion" Condition=" '$(VersionLabel)' == '' ">
  77. <Exec Command="$(HgTool) log -l 1 --template &quot;{rev}&quot; > &quot;$(BuildTempDirectory)\revision.txt&quot;"></Exec>
  78. <ReadLinesFromFile File="$(BuildTempDirectory)\revision.txt">
  79. <Output TaskParameter="Lines" PropertyName="VersionRevision"/>
  80. </ReadLinesFromFile>
  81. <PropertyGroup>
  82. <VersionLabel>$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)</VersionLabel>
  83. </PropertyGroup>
  84. <Message Text="Building version $(VersionLabel)" Importance="high" />
  85. </Target>
  86. <Target Name="_StampVersion" DependsOnTargets="_Prerequisites">
  87. <Exec Command="$(StampVer) /major:$(VersionMajor) /minor:$(VersionMinor) /build:$(VersionBuild) /revision:$(VersionRevision)" WorkingDirectory="$(SourceDirectory)" />
  88. <Exec Command="FIND &quot;$(VersionLabel)&quot; ProtocolBuffers\Properties\AssemblyInfo.cs" WorkingDirectory="$(SourceDirectory)" />
  89. </Target>
  90. <Target Name="_GenerateSource" DependsOnTargets="_Prerequisites">
  91. <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="GenerateProjects;BuildTools;GenerateSource" Projects="$(MSBuildProjectDirectory)\build.csproj" />
  92. <Exec Command="&quot;$(SnTool)&quot; -T &quot;$(ProtogenExePath)&quot; > signkey.txt" WorkingDirectory="$(BuildTempDirectory)" />
  93. <!-- Make sure we are signing with the correct key -->
  94. <Exec Command="FIND &quot;55f7125234beb589&quot; signkey.txt" WorkingDirectory="$(BuildTempDirectory)" />
  95. </Target>
  96. <Target Name="_Build" DependsOnTargets="_Prerequisites">
  97. <!-- Release Build -->
  98. <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="_CompileAll" Projects="$(MSBuildProjectDirectory)\build.csproj" />
  99. <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey);PackageName=$(PackagePrefix)$(VersionLabel)-release" Targets="GeneratePackage" Projects="$(MSBuildProjectDirectory)\build.csproj" />
  100. <!-- Debug Build -->
  101. <MSBuild Condition=" '$(PublishDebug)' == 'true' " Properties="Configuration=Debug;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="_CompileAll" Projects="$(MSBuildProjectDirectory)\build.csproj" />
  102. <MSBuild Condition=" '$(PublishDebug)' == 'true' " Properties="Configuration=Debug;AssemblyOriginatorKeyFile=$(SigningKey);PackageName=$(PackagePrefix)$(VersionLabel)-full" Targets="GeneratePackage" Projects="$(MSBuildProjectDirectory)\build.csproj" />
  103. </Target>
  104. <Target Name="_HgPack" DependsOnTargets="_Prerequisites">
  105. <Exec Command="$(HgTool) archive $(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-source.zip" WorkingDirectory="$(ProjectDirectory)" />
  106. </Target>
  107. <Target Name="_HgLabel" DependsOnTargets="_Prerequisites">
  108. <Exec Command="$(HgTool) commit -m &quot;version $(VersionLabel)&quot;" WorkingDirectory="$(ProjectDirectory)" />
  109. <Exec Command="$(HgTool) tag $(VersionLabel)" WorkingDirectory="$(ProjectDirectory)" />
  110. </Target>
  111. <Target Name="_HgPush" DependsOnTargets="_Prerequisites">
  112. <Exec Command="$(HgTool) push" WorkingDirectory="$(ProjectDirectory)" />
  113. </Target>
  114. <Target Name="_PkgPush" DependsOnTargets="_Prerequisites">
  115. <PropertyGroup>
  116. <UploadPackage>$(Python) "$(MSBuildProjectDirectory)\googlecode_upload.py" --project protobuf-csharp-port --user "$(GoogleUsername)" --password "$(GooglePassword)"</UploadPackage>
  117. <SourcePackage>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-source.zip</SourcePackage>
  118. <ReleasePackageBin>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-release-binaries.zip</ReleasePackageBin>
  119. <ReleasePackageSyb>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-release-symbols.zip</ReleasePackageSyb>
  120. <DebugPackageBin>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-full-binaries.zip</DebugPackageBin>
  121. <DebugPackageSyb>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-full-symbols.zip</DebugPackageSyb>
  122. </PropertyGroup>
  123. <Error Condition="!Exists('$(SourcePackage)')" Text="File not found: $(SourcePackage)" />
  124. <Error Condition="!Exists('$(ReleasePackageBin)')" Text="File not found: $(ReleasePackageBin)" />
  125. <Error Condition="!Exists('$(ReleasePackageSyb)')" Text="File not found: $(ReleasePackageSyb)" />
  126. <Error Condition="'$(PublishDebug)' == 'true' And !Exists('$(DebugPackageBin)')" Text="File not found: $(DebugPackageBin)" />
  127. <Error Condition="'$(PublishDebug)' == 'true' And !Exists('$(DebugPackageSyb)')" Text="File not found: $(DebugPackageSyb)" />
  128. <Exec WorkingDirectory="$(ProjectDirectory)"
  129. Command="$(UploadPackage) --labels Type-Source,Featured --summary &quot;Version $(VersionLabel) source&quot; $(SourcePackage)" />
  130. <Exec WorkingDirectory="$(ProjectDirectory)"
  131. Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) release binaries only&quot; $(ReleasePackageBin)" />
  132. <Exec WorkingDirectory="$(ProjectDirectory)"
  133. Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) release binaries and symbols&quot; $(ReleasePackageSyb)" />
  134. <Exec WorkingDirectory="$(ProjectDirectory)" Condition=" '$(PublishDebug)' == 'true' "
  135. Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) all binaries&quot; $(DebugPackageBin)" />
  136. <Exec WorkingDirectory="$(ProjectDirectory)" Condition=" '$(PublishDebug)' == 'true' "
  137. Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) all binaries and symbols&quot; $(DebugPackageSyb)" />
  138. </Target>
  139. <Target Name="_NugetPack" DependsOnTargets="_Prerequisites">
  140. <Exec WorkingDirectory="$(MSBuildProjectDirectory)"
  141. Command="$(NuGet) update -self" />
  142. <Exec WorkingDirectory="$(MSBuildProjectDirectory)"
  143. Command="$(NuGet) pack Google.ProtocolBuffers.nuspec -Symbols -Version $(VersionLabel) -NoPackageAnalysis -OutputDirectory $(BuildTempDirectory)" />
  144. <Exec WorkingDirectory="$(MSBuildProjectDirectory)"
  145. Command="$(NuGet) pack Google.ProtocolBuffersLite.nuspec -Symbols -Version $(VersionLabel) -NoPackageAnalysis -OutputDirectory $(BuildTempDirectory)" />
  146. </Target>
  147. <Target Name="_NugetPush" DependsOnTargets="_Prerequisites">
  148. <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffers.$(VersionLabel).nupkg" ContinueOnError="true" />
  149. <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffersLite.$(VersionLabel).nupkg" ContinueOnError="true" />
  150. <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffers.$(VersionLabel).symbols.nupkg" ContinueOnError="true" />
  151. <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffersLite.$(VersionLabel).symbols.nupkg" ContinueOnError="true" />
  152. </Target>
  153. </Project>