summaryrefslogtreecommitdiff
path: root/src/Directory.Build.targets
blob: 1170fc62af2ef2b2d408dcc865269098dc4b004a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->

<Project>
  <PropertyGroup>
    <SigningToolFolder>$(ToolsFolder)</SigningToolFolder>
    <SigningToolExe>$(SigningToolFolder)\SignClient.exe</SigningToolExe>
    <SigningFilelist>$(SigningToolFolder)\empty-filelist.txt</SigningFilelist>
    <SigningConfiguration>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), signing.json))\signing.json</SigningConfiguration>
  </PropertyGroup>

  <Target Name="__FixupGitBaseVersion" BeforeTargets="_GitPopulateVersionInfo">
    <PropertyGroup>
      <GitBaseVersion>$(GitBaseVersion.Replace('{apiversion}', '$(ApiVersion)'))</GitBaseVersion>
      <GitBaseVersion>$(GitBaseVersion.Replace('{height}', '$(GitCommits)'))</GitBaseVersion>
      <GitBaseVersion>$(GitBaseVersion.Replace('{commits}', '$(GitCommits)'))</GitBaseVersion>
    </PropertyGroup>
  </Target>

  <PropertyGroup>
    <GetPackageVersionDependsOn>
      $(GetPackageVersionDependsOn);
      __SetPropertiesFromGit;
    </GetPackageVersionDependsOn>
  </PropertyGroup>

  <Target Name="__SetPropertiesFromGit" DependsOnTargets="GitVersion" Condition=" '$(GitInfoImported)'=='true' ">
    <PropertyGroup>
      <AssemblyVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor).0.0</AssemblyVersion>
      <FileVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch).$(GitCommits)</FileVersion>
      <PackageVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch)$(GitSemVerDashLabel)</PackageVersion>
      <MajorMinorVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor)</MajorMinorVersion>
      <Version>$(PackageVersion)</Version>
      <InformationalVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch)$(GitSemVerDashLabel)+$(GitSha)</InformationalVersion>
      <!-- We already included the $(GitSha) in the informational version so do not include it again.  -->
      <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>

      <RepositoryUrl Condition=" '$(RepositoryUrl)'=='' and '$(GitRepositoryUrl)'!='' ">$(GitRepositoryUrl.Replace('.git',''))</RepositoryUrl>
      <RepositoryType Condition=" '$(RepositoryType)'=='' ">git</RepositoryType>
      <RepositoryCommit Condition=" '$(RepositoryCommit)'=='' ">$(GitSha)</RepositoryCommit>
      <PublishRepositoryUrl>true</PublishRepositoryUrl>

      <ProjectUrl Condition=" '$(ProjectUrl)'=='' and '$(RepositoryUrl)'!='' ">$(RepositoryUrl)</ProjectUrl>
    </PropertyGroup>

    <Message Importance="$(GitInfoReportImportance)" Text="Properties from Git:
  GitCommits: $(GitCommits)
  AssemblyVersion: $(AssemblyVersion)
  FileVersion: $(FileVersion)
  InformationalVersion: $(InformationalVersion)
  PackageVersion: $(PackageVersion)
" />
  </Target>

  <PropertyGroup>
    <GenerateNuspecDependsOn>
      $(GenerateNuspecDependsOn);
      __SetPropertiesFromGit;
      __SetNuspecProperties
    </GenerateNuspecDependsOn>
  </PropertyGroup>

  <Target Name="__SetNuspecProperties" DependsOnTargets="__SetPropertiesFromGit"
          Condition=" Exists('$(MSBuildProjectName).nuspec') ">
    <PropertyGroup>
      <NuspecFile Condition=" '$(NuspecFile)'=='' ">$(MSBuildProjectName).nuspec</NuspecFile>
      <PackageId Condition=" '$(PackageId)'=='' ">$(MSBuildProjectName)</PackageId>
      <Title Condition=" '$(Title)'=='' ">$(Description)</Title>
      <NuspecBasePath Condition=" '$(NuspecBasePath)'=='' ">$(OutputPath)</NuspecBasePath>
      <NuspecProperties>$(NuspecProperties);Id=$(PackageId);Version=$(PackageVersion);Authors=$(Authors);Configuration=$(Configuration)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);Copyright=$(Copyright);Description=$(Description);Title=$(Title)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);RepositoryType=$(RepositoryType);RepositoryCommit=$(RepositoryCommit);RepositoryUrl=$(RepositoryUrl)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);ProjectUrl=$(ProjectUrl);ProjectFolder=$(MSBuildProjectDirectory)</NuspecProperties>
    </PropertyGroup>

    <Message Importance="$(GitInfoReportImportance)" Text="NuSpec info:
  NuspecFile: $(NuspecFile)
  NuspecBasePath: $(NuspecBasePath)
  NuspecProperties: $(NuspecProperties)
" />

  </Target>

  <Target Name="PackNative" DependsOnTargets="__SetNuspecProperties"
          Condition=" Exists('$(MSBuildProjectName).nuspec') ">
    <Error Text="There must be package reference to 'GitInfo'. Ensure the project was restored as well."
           Condition=" '$(GitInfoImported)'!='true' " />

    <Exec Command='nuget pack $(NuspecFile) -OutputDirectory "$(PackageOutputPath.Trim(&quot;\&quot;))" -BasePath $(NuspecBasePath) -Properties "$(NuspecProperties)"'
          WorkingDirectory="$(MSBuildProjectDirectory)" />

    <ItemGroup>
      <NuGetPackOutput Include="$(PackageOutputPath)\$(PackageId).$(PackageVersion).nupkg" />
    </ItemGroup>
  </Target>

  <Target Name="_GetSignClient"
          Condition=" !Exists('$(SigningToolExe)') ">

    <WriteLinesToFile File='$(SigningFilelist)' Lines='do-not-sign-files-in-nupkg' Overwrite='true' />

    <Exec Command='dotnet.exe tool install --tool-path "$(SigningToolFolder)" SignClient' />
  </Target>

  <Target Name="SignOutput" DependsOnTargets="_GetSignClient" AfterTargets="AfterBuild"
          Condition=" '$(SigningUser)'!='' and '$(SignOutput)'!='false' and 
                      ('$(MSBuildProjectExtension)'=='.csproj' or ('$(MSBuildProjectExtension)'=='.vcxproj' and '$(ConfigurationType)'!='StaticLibrary'))">

    <Exec Command='"$(SigningToolExe)" sign -i $(TargetPath) -c "$(SigningConfiguration)" -n "WiX Toolset" -d "WiX Toolset" -u https://wixtoolset.org/ -r "$(SigningUser)" -s "$(SigningSecret)"'
          WorkingDirectory="$(MSBuildProjectDirectory)" EchoOff="true" />
  </Target>

  <Target Name="SignNupkg" DependsOnTargets="_GetSignClient" AfterTargets="Pack;PackNative"
          Condition=" '$(SigningUser)'!='' and '@(NuGetPackOutput)'!='' and '$(SignNupkg)'!='false' ">
    <ItemGroup>
      <SigningNupkgs Include="@(NuGetPackOutput)" Condition=" '%(Extension)'=='.nupkg' " />
    </ItemGroup>

    <Exec Command='"$(SigningToolExe)" sign -i "@(SigningNupkgs->&apos;%(Identity)&apos;)" -c "$(SigningConfiguration)" -f "$(SigningFilelist)" -n "WiX Toolset" -d "WiX Toolset" -u https://wixtoolset.org/ -r "$(SigningUser)" -s "$(SigningSecret)"'
          WorkingDirectory="$(MSBuildProjectDirectory)" EchoOff="true" />
  </Target>

  <Import Project="Directory$(MSBuildProjectExtension).targets" Condition=" Exists('Directory$(MSBuildProjectExtension).targets') " />
  <Import Project="Custom.Build.targets" Condition=" Exists('Custom.Build.targets') " />
</Project>