summaryrefslogtreecommitdiff
path: root/Tools/packages.targets
blob: 7e6b3dd75e30b331e161a8a418e34ad6a8a56f08 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <UsingTask TaskName="GetPackageVersion" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />

  <ItemGroup>
    <PackagesNuSpecFiles Include="$(SourceDir)nuget\*.nuspec" />
  </ItemGroup>

  <PropertyGroup>
    <PackagesOutDir Condition="'$(PackagesOutDir)' == ''">$(OutDir)Packages\</PackagesOutDir>
    <PackagesBasePath Condition="'$(PackagesBasePath)' == ''">$(OutDir)</PackagesBasePath>
  </PropertyGroup>

  <UsingTask TaskName="NuGetPack" AssemblyFile="$(PackagingTaskDir)Microsoft.DotNet.Build.Tasks.Packaging.dll"/>
  
  <Target Name="BuildPackages"
    DependsOnTargets="AddNuGetPackageVersionMetadataToNuspecs"
    Condition="'$(SkipBuildPackages)' != 'true'">
    
    <!-- Create package output directory -->
    <MakeDir Directories="$(PackagesOutDir)" />

    <!-- Make package -->
    <NugetPack
      Condition="'@(PackagesNuSpecFiles)'!=''"
      Nuspecs="%(PackagesNuSpecFiles.FullPath)"
      OutputDirectory="$(PackagesOutDir)"
      BaseDirectory="$(PackagesBasePath)"
      PackageVersion="%(PackagesNuSpecFiles.PackageVersion)"
      ExcludeEmptyDirectories="true"
      NuspecProperties="@(NuspecProperties)"/>

    <Message
      Condition="'@(PackagesNuSpecFiles)'!=''"
      Importance="High"
      Text="%(PackagesNuSpecFiles.Filename) NuGet Package -> $(PackagesOutDir)%(PackagesNuSpecFiles.Filename).%(PackagesNuSpecFiles.PackageVersion).nupkg" />

    <ItemGroup>
      <PackagesForPublishing Include="$(PackagesOutDir)*.nupkg" />
    </ItemGroup>

    <!-- push all packages to a server if one has been specified -->
    <Exec
      Condition="'@(PackagesForPublishing)' != '' and '$(PublishPackageSource)' != ''"
      Command="$(NuGetExe) push &quot;%(PackagesForPublishing.Identity)&quot; -s $(PublishPackageSource)" />

  </Target>

  <Target
    Name="AddNuGetPackageVersionMetadataToNuspecs"
    Condition="'@(PackagesNuSpecFiles)'!=''"
    Outputs="%(PackagesNuSpecFiles.Identity)"
    DependsOnTargets="$(GetNuGetPackageVersionsDependsOn)">

    <PropertyGroup>
      <SelectedPackageVersion>$(BuildNumberMajor)-$(BuildNumberMinor)</SelectedPackageVersion>
    </PropertyGroup>

    <GetPackageVersion
      Condition="Exists('$(ToolsDir)Microsoft.DotNet.Build.Tasks.dll') and $(DoNotGeneratePackageVersion) != 'true'"
      RevisionNumber="$(SelectedPackageVersion)"
      NuSpecFile="%(PackagesNuSpecFiles.Identity)">
      <Output PropertyName="_TempPackageVersion" TaskParameter="PackageVersion" />
    </GetPackageVersion>
    
    <!-- Assign the package version that was automatically generated from the nuspecs -->
    <ItemGroup
      Condition="$(DoNotGeneratePackageVersion) != 'true'">
      <PackagesNuSpecFiles Condition="'%(PackagesNuSpecFiles.Identity)' == '%(Identity)'">
        <PackageVersion>$(_TempPackageVersion)</PackageVersion>
      </PackagesNuSpecFiles>
    </ItemGroup>

    <!-- Assign the package version that was provided by the user -->
    <ItemGroup
      Condition="$(DoNotGeneratePackageVersion) == 'true' and $(PackageVersion) != ''">
      <PackagesNuSpecFiles Condition="'%(PackagesNuSpecFiles.Identity)' == '%(Identity)'">
        <PackageVersion>$(PackageVersion)</PackageVersion>
      </PackagesNuSpecFiles>
    </ItemGroup>

    <Error
      Condition="$(DoNotGeneratePackageVersion) == 'true' and $(PackageVersion) == ''"
      Text="When DoNotGeneratePackageVersion is set to 'true' the user has to provide a PackageVersion property that applies to all nuget packages"
      />

    <PropertyGroup>
      <_TempPackageVersion />
    </PropertyGroup>
  </Target>

  <PropertyGroup>
    <LocalPublishPropsFile Condition="'$(LocalPublishPropsFile)'==''">$(PackagesDir)/localpublish.props</LocalPublishPropsFile>
    <NugetPackageBuildTargets Condition="'$(NugetPackageBuildTargets)'==''">BuildPackages</NugetPackageBuildTargets>
  </PropertyGroup>

  <Import Condition="Exists('$(LocalPublishPropsFile)')"  Project="$(LocalPublishPropsFile)"/>
  
  <!-- Publish the packages locally -->
  <Target Name="LocalPackagePublish" Condition="'@(LocalPackages)'!=''"
          Inputs="%(LocalPackages.Identity)/%(LocalPackages.PackageName).%(LocalPackages.PackageVersion).nupkg;%(LocalPackages.InstallLocation)/%(LocalPackages.PackageName).%(LocalPackages.PackageVersion)" 
          Outputs="%(LocalPackages.InstallLocation)/%(LocalPackages.PackageName).%(LocalPackages.PackageVersion)/MODIFIED.txt"
          AfterTargets="$(NugetPackageBuildTargets)">
    
    <!-- Generate the packages.config -->
    <ItemGroup>
      <LocalPackageConfigLine Include="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;" />
      <LocalPackageConfigLine Include="&lt;packages&gt;" />
      <LocalPackageConfigLine Include="&lt;package id=&quot;%(LocalPackages.PackageName)&quot; version=&quot;%(LocalPackages.PackageVersion)&quot; /&gt;"/>
      <LocalPackageConfigLine Include="&lt;/packages&gt;" />
    </ItemGroup>

    <PropertyGroup>
      <RestoreConfig>%(LocalPackages.InstallLocation)/packages.%(LocalPackages.PackageName).config</RestoreConfig>
    </PropertyGroup>
    
    <WriteLinesToFile File="$(RestoreConfig)" Lines="@(LocalPackageConfigLine)" Overwrite="true" />
    <Message Text="Generated $(RestoreConfig) for '%(LocalPackages.PackageName).%(LocalPackages.PackageVersion).nupkg'" />
    
    <PropertyGroup>
      <LocalPackagesSources>@(LocalPackages, ';')</LocalPackagesSources>
    </PropertyGroup>
    <Message Text="Generated package install sources: '$(LocalPackages)'"/>

    <!-- Remove existing directories -->
    <RemoveDir Directories="%(LocalPackages.InstallLocation)/%(LocalPackages.PackageName).%(LocalPackages.PackageVersion)" />

    <!-- Restoring the packages -->
    <Exec Command="$(NuGetExe) install &quot;$(RestoreConfig)&quot; -Source $(LocalPackagesSources) -NoCache -Prerelease -OutputDirectory &quot;%(LocalPackages.InstallLocation)&quot;" />

    <!-- Write a file in the packages folder to let the user know this is not the original package -->
    <ItemGroup>
      <NotOriginalPackages Include="The package was restored from $(LocalPackagesSources)" />
    </ItemGroup>
    <WriteLinesToFile File="%(LocalPackages.InstallLocation)/%(LocalPackages.PackageName).%(LocalPackages.PackageVersion)/MODIFIED.txt" Lines="@(NotOriginalPackages)" Overwrite="true" />
  </Target>
</Project>