summaryrefslogtreecommitdiff
path: root/packages/microsoft.dotnet.build.tasks.feed/2.1.0-rc1-03006-01/build/Microsoft.DotNet.Build.Tasks.Feed.targets
blob: 5e924fa333f7a2c3b4f31028ad1f5bb43f15ea92 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
<Project ToolsVersion="12.0" DefaultTargets="PublishOutputLeg" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!--
    Publish targets:
      PublishPackagesToBlobFeed
      PublishFilesToBlobFeed

    Required properties:

    ExpectedFeedUrl - This is the full URL to the index.json file for the blob feed.
    AccountKey - This is the access token used to gain write access to the blob feed.

    Optional properties:

    PushToBlobFeed_Overwrite - Set to true if you want to allow overrriting of existing files or packages. Defaults to 'false'.
    PushToBlobFeed_MaxClients - Number of clients to push in parallel.

    FileRelativePathBase - The base relative path from the blob feed root for any files uploaded. Defaults to 'assets'.

    Selecting packages for publish:

    PackagesToPublishPattern - Property to declare a file glob for selecting the packages to be pushed. (eg. $(PackageOutput)*.nupkg)
    PackagesToPublish - Item group that contains a list of packages to be pushed, if glob isn't enough.

    Selecting files for publish:

    FilesToPublishPattern - Property to declare a file glob for selecting the files to be pushed. (eg. $(OutputPath)*.zip)
    FilesToPublish - Item group that contains a list of files to be pushed, if glob isn't enough.
    %(RelativeBlobPath) - Metadata that can be put on file items to control the relative path where the file
    goes underneath the blob feed. If not specfied it is default based on the FileRelativePathBase

    Specifying build output manifest values:

    ManifestName - The repository name, listed inside the manifest and used to name the file.
      If $(GitHubRepositoryName) is defined, its value is used. Default: "anonymous"
    ManifestBuildId - Build ID listed in the manifest. Default: "no build id provided"
    ManifestBranch - Branch listed in the manifest. Default: none
    ManifestCommit - Commit listed in the manifest. Default: none
    SkipCreateManifest - If 'true', no manifest is written even if the blob feed allows them.
      Default: false
  -->
  
  <PropertyGroup>
    <_MicrosoftDotNetBuildTasksFeedTaskDir>$(MSBuildThisFileDirectory)net46/</_MicrosoftDotNetBuildTasksFeedTaskDir>
    <_MicrosoftDotNetBuildTasksFeedTaskDir Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)netstandard1.5/</_MicrosoftDotNetBuildTasksFeedTaskDir>
  </PropertyGroup>
  <UsingTask TaskName="ConfigureInputFeeds" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="CopyBlobDirectory" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="FetchOrchestratedBuildManifestInfo" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="GetBlobFeedPackageList" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="ParseBlobUrl" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="PushOrchestratedBuildManifest" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="PushToBlobFeed" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="UpdateOrchestratedBuildManifest" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="WriteOrchestratedBuildManifestToFile" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  <UsingTask TaskName="WriteOrchestratedBuildManifestSummaryToFile" AssemblyFile="$(_MicrosoftDotNetBuildTasksFeedTaskDir)Microsoft.DotNet.Build.Tasks.Feed.dll"/>
  
  <PropertyGroup>
    <PushToBlobFeed_Overwrite Condition="'$(PushToBlobFeed_Overwrite)' == ''">false</PushToBlobFeed_Overwrite>
    <PushToBlobFeed_MaxClients Condition="'$(PushToBlobFeed_MaxClients)' == ''">8</PushToBlobFeed_MaxClients>
    <FileRelativePathBase Condition="'$(FileRelativePathBase)' == ''">assets</FileRelativePathBase>
    <FileRelativePathBase Condition="!HasTrailingSlash('$(FileRelativePathBase)')">$(FileRelativePathBase)/</FileRelativePathBase>
    <ManifestName Condition="'$(ManifestName)' == ''">$(GitHubRepositoryName)</ManifestName>
  </PropertyGroup>

  <Target Name="PublishPackagesToBlobFeed" DependsOnTargets="@(PublishPackagesToBlobFeedDependsOn)" >
    <Error Text="The ExpectedFeedUrl  property must be set on the command line."
          Condition="'$(ExpectedFeedUrl)' == ''" />
    <Error Text="The AccountKey property must be set on the command line."
          Condition="'$(AccountKey)' == ''" />

    <ItemGroup>
      <_ItemsToPush Remove="@(_ItemsToPush)" />
      <_ItemsToPush Condition="'$(PackagesToPublishPattern)' != ''" Include="$(PackagesToPublishPattern)" />
      <_ItemsToPush Include="@(PackagesToPublish)" />
    </ItemGroup>

    <Error Condition="'@(_ItemsToPush)' == ''" Text="No packages to push." />

    <PushToBlobFeed ExpectedFeedUrl="$(ExpectedFeedUrl)"
                    AccountKey="$(AccountKey)"
                    ItemsToPush="@(_ItemsToPush)"
                    Overwrite="$(PushToBlobFeed_Overwrite)"
                    MaxClients="$(PushToBlobFeed_MaxClients)"
                    ManifestName="$(ManifestName)"
                    ManifestBuildId="$(ManifestBuildId)"
                    ManifestBranch="$(ManifestBranch)"
                    ManifestCommit="$(ManifestCommit)"
                    ManifestBuildData="$(ManifestBuildData)"
                    SkipCreateManifest="$(SkipCreateManifest)" />
  </Target>

  <Target Name="PublishFilesToBlobFeed">
    <Error Text="The ExpectedFeedUrl  property must be set on the command line."
          Condition="'$(ExpectedFeedUrl)' == ''" />
    <Error Text="The AccountKey property must be set on the command line."
          Condition="'$(AccountKey)' == ''" />

    <ItemGroup>
      <_ItemsToPush Remove="@(_ItemsToPush)" />
      <_ItemsToPush Condition="'$(FilesToPublishPattern)' != ''" Include="$(FilesToPublishPattern)" />
      <_ItemsToPush Include="@(FilesToPublish)" />
      <_ItemsToPush>
        <RelativeBlobPath Condition="'%(_ItemsToPush.RelativeBlobPath)' == ''">$(FileRelativePathBase)$([System.String]::Copy('%(RecursiveDir)%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
      </_ItemsToPush>
    </ItemGroup>

    <Error Condition="'@(_ItemsToPush)' == ''" Text="No files to push." />

    <PushToBlobFeed ExpectedFeedUrl="$(ExpectedFeedUrl)"
                    AccountKey="$(AccountKey)"
                    ItemsToPush="@(_ItemsToPush)"
                    PublishFlatContainer="true"
                    Overwrite="$(PushToBlobFeed_Overwrite)"
                    MaxClients="$(PushToBlobFeed_MaxClients)"
                    ManifestName="$(ManifestName)"
                    ManifestBuildId="$(ManifestBuildId)"
                    ManifestBranch="$(ManifestBranch)"
                    ManifestCommit="$(ManifestCommit)"
                    ManifestBuildData="$(ManifestBuildData)"
                    SkipCreateManifest="$(SkipCreateManifest)" />

  </Target>

  <!--
    Create an orchestrated build manifest based on the build output manifests uploaded to a feed.
  -->
  <Target Name="CreateFeedOrchestratedBuildManifest">
    <Error Text="The ExpectedFeedUrl property must be set." Condition="'$(ExpectedFeedUrl)' == ''" />
    <Error Text="The AccountKey property must be set." Condition="'$(AccountKey)' == ''" />
    <Error Text="The ManifestName property must be set." Condition="'$(ManifestName)' == ''" />
    <Error Text="The ManifestBuildId property must be set." Condition="'$(ManifestBuildId)' == ''" />

    <PropertyGroup>
      <ManifestTempDir Condition="'$(ManifestTempDir)' == ''">$(BaseIntermediateOutputPath)manifest-temp/</ManifestTempDir>
      <ManifestDownloadDir Condition="'$(ManifestDownloadDir)' == ''">$(ManifestTempDir)downloads/</ManifestDownloadDir>
      <ManifestFile Condition="'$(ManifestFile)' == ''">$(ManifestTempDir)build.xml</ManifestFile>
      <ManifestSummaryFile Condition="'$(ManifestSummaryFile)' == ''">$(ManifestTempDir)README.md</ManifestSummaryFile>
    </PropertyGroup>

    <ParseBlobUrl BlobUrl="$(ExpectedFeedUrl.Replace('/index.json', ''))">
      <Output TaskParameter="BlobElements" ItemName="ParsedFeedUrl" />
    </ParseBlobUrl>

    <DownloadFromAzure AccountName="%(ParsedFeedUrl.AccountName)"
                       AccountKey="$(AccountKey)"
                       ContainerName="%(ParsedFeedUrl.ContainerName)"
                       BlobNameExtension=".xml"
                       BlobNamePrefix="%(ParsedFeedUrl.BlobPath)/assets/orchestration-metadata/manifests/"
                       DownloadDirectory="$(ManifestDownloadDir)"
                       DownloadFlatFiles="true" />

    <ItemGroup>
      <BuildManifests Include="$(ManifestDownloadDir)*.xml" />
    </ItemGroup>

    <WriteOrchestratedBuildManifestToFile File="$(ManifestFile)"
                                          BlobFeedUrl="$(ExpectedFeedUrl)"
                                          BuildManifestFiles="@(BuildManifests)"
                                          ManifestName="$(ManifestName)"
                                          ManifestBuildId="$(ManifestBuildId)" />

    <WriteOrchestratedBuildManifestSummaryToFile File="$(ManifestSummaryFile)"
                                                 ManifestFile="$(ManifestFile)"
                                                 SdkTableTemplateFile="$(SdkTableTemplateFile)"
                                                 DotNetRuntimeTableTemplateFile="$(DotNetRuntimeTableTemplateFile)"
                                                 AspNetCoreRuntimeTableTemplateFile="$(AspNetCoreRuntimeTableTemplateFile)" />

    <ItemGroup>
      <SupplementaryFiles Include="$(ManifestSummaryFile)" />
    </ItemGroup>
  </Target>

  <!--
    Push the orchestrated build manifest for a certain feed to a versions repo.
  -->
  <Target Name="PushFeedOrchestratedBuildManifest"
          DependsOnTargets="CreateVersionsRepoDefaults;
                            CreateFeedOrchestratedBuildManifest">
    <Error Text="The VersionsRepoPath property must be set." Condition="'$(VersionsRepoPath)' == ''" />
    <Error Text="The GitHubAuthToken property must be set." Condition="'$(GitHubAuthToken)' == ''" />
    <Error Text="The GitHubUser property must be set." Condition="'$(GitHubUser)' == ''" />
    <Error Text="The GitHubEmail property must be set." Condition="'$(GitHubEmail)' == ''" />

    <PushOrchestratedBuildManifest ManifestFile="$(ManifestFile)"
                                   VersionsRepoPath="$(VersionsRepoPath)"
                                   GitHubAuthToken="$(GitHubAuthToken)"
                                   GitHubUser="$(GitHubUser)"
                                   GitHubEmail="$(GitHubEmail)"
                                   VersionsRepo="$(VersionsRepo)"
                                   VersionsRepoOwner="$(VersionsRepoOwner)"
                                   VersionsRepoBranch="$(VersionsRepoBranch)"
                                   CommitMessage="$(CommitMessage)"
                                   SupplementaryFiles="@(SupplementaryFiles)" />

  </Target>

  <Target Name="CreateVersionsRepoDefaults">
    <PropertyGroup>
      <VersionsRepo Condition="'$(VersionsRepo)' == ''">versions</VersionsRepo>
      <VersionsRepoOwner Condition="'$(VersionsRepoOwner)' == ''">dotnet</VersionsRepoOwner>
      <VersionsRepoBranch Condition="'$(VersionsRepoBranch)' == ''">master</VersionsRepoBranch>
    </PropertyGroup>
  </Target>

  <!--
    Fetch an orchestrated build manifest from the versions repo and extract its information into
    items and properties.

    [In]
    $(VersionsRepoPath): The root folder inside the target versions repo where the manifest is
      located. Doesn't include a trailing '/'.
    Optional:
      $(GitHubAuthToken): Auth token used when calling GitHub APIs. If this isn't provided,
        anonymous access is used. Provide an auth token to avoid rate limit errors.
      $(GitHubUser): The GitHub user associated with GitHubAuthToken.
      $(GitHubEmail): The email associated with GitHubAuthToken.
      $(VersionsRepo): The GitHub repo name. Default: 'versions'
      $(VersionsRepoOwner): The GitHub repo owner. Default: 'dotnet'
      $(VersionsRepoRef): The git ref to fetch from. If not specified, uses VersionsRepoBranch.
      $(VersionsRepoBranch): The branch to fetch from. Default: 'master'
    
    [Out]
    $(OrchestratedBuildId): The orchestrated build manifest's build id attribute value.
    $(OrchestratedIdentitySummary): Human-readable full identity of the orchestrated build manifest.
    @(OrchestratedBuild): A single item describing the root manifest element.
      %(Identity): The name of the build.
      %(Xml): The raw XML string representing the build in the manifest.
      %(...): Metadata is created for each attribute on the element.
    @(OrchestratedBlobFeed): A single item for the orchestrated blob feed Endpoint.
      %(...): Metadata is created for each attribute on the element.
    @(ParsedOrchestratedBlobFeed): The result of parsing the OrchestratedBlobFeed url.
      %(BlobPath): The root of the blob feed, without '/index.json'. Use this to construct artifact
        download urls.
      %(AccountName) %(ContainerName) %(Endpoint)
    @(OrchestratedBlobFeedArtifacts): An item for each artifact in the orchestrated blob feed.
      %(Identity): 'Package' or 'Blob', matching manifest element name.
      %(Xml): The raw XML string representing the artifact in the manifest.
      %(...): Metadata is created for each attribute on the element.
    @(OrchestratedBuildConstituents): An item for each Build in the orchestrated build manifest.
      %(Identity): The name of the build.
      %(Xml): The raw XML string representing the build in the manifest.
      %(...): Metadata is created for each attribute on the element.
  -->
  <Target Name="FetchOrchestratedBuildManifestInfo"
          DependsOnTargets="CreateVersionsRepoDefaults">
    <Error Text="The VersionsRepoPath property must be set." Condition="'$(VersionsRepoPath)' == ''" />

    <PropertyGroup>
      <VersionsRepoRef Condition="'$(VersionsRepoRef)' == ''">heads/$(VersionsRepoBranch)</VersionsRepoRef>
    </PropertyGroup>
    <Error Text="The VersionsRepoRef property must be set." Condition="'$(VersionsRepoRef)' == ''" />

    <FetchOrchestratedBuildManifestInfo VersionsRepoPath="$(VersionsRepoPath)"
                                        GitHubAuthToken="$(GitHubAuthToken)"
                                        GitHubUser="$(GitHubUser)"
                                        GitHubEmail="$(GitHubEmail)"
                                        VersionsRepo="$(VersionsRepo)"
                                        VersionsRepoOwner="$(VersionsRepoOwner)"
                                        VersionsRepoRef="$(VersionsRepoRef)">
      <Output TaskParameter="OrchestratedBuild" ItemName="OrchestratedBuild" />
      <Output TaskParameter="OrchestratedBlobFeed" ItemName="OrchestratedBlobFeed" />
      <Output TaskParameter="OrchestratedBlobFeedArtifacts" ItemName="OrchestratedBlobFeedArtifacts" />
      <Output TaskParameter="OrchestratedBuildConstituents" ItemName="OrchestratedBuildConstituents" />
    </FetchOrchestratedBuildManifestInfo>

    <PropertyGroup>
      <OrchestratedBuildId>%(OrchestratedBuild.BuildId)</OrchestratedBuildId>
      <OrchestratedIdentitySummary>%(OrchestratedBuild.IdentitySummary)</OrchestratedIdentitySummary>
      <OrchestratedBlobFeedUrl>%(OrchestratedBlobFeed.Url)</OrchestratedBlobFeedUrl>
    </PropertyGroup>

    <ParseBlobUrl BlobUrl="$(OrchestratedBlobFeedUrl.Replace('/index.json', ''))">
      <Output TaskParameter="BlobElements" ItemName="ParsedOrchestratedBlobFeed" />
    </ParseBlobUrl>
  </Target>

  <!--
    Download packages from an orchestrated feed given their identities and versions.

    [In]
    $(AccountKey): A key to use when accessing the blob feed's blob storage.
    @(OrchestratedBlobFeedArtifacts): The artifacts to download. All items with identity 'Package'
      are downloaded. Expected to have this from FetchOrchestratedBuildManifestInfo.
      %(Id): NuGet package identity.
      %(Version): NuGet package version.
    @(ParsedOrchestratedBlobFeed): The parsed feed to access. Output from
      FetchOrchestratedBuildManifestInfo is expected.
    Optional:
      $(FinalDownloadDirectory): Custom directory to place downloaded nupkg files. This directory will
        be removed and recreated to ensure no stale bits are included.

    [Out]
    @(DownloadedOrchestratedFeedPackages): Each nupkg file downloaded.
    @(FinalPackages): The downloaded subset of OrchestratedBlobFeedArtifacts. Metadata is preserved.
  -->
  <Target Name="DownloadOrchestratedFeedPackages">
    <Error Text="The AccountKey property must be set." Condition="'$(AccountKey)' == ''" />
    <Error Text="A ParsedOrchestratedBlobFeed item must be set." Condition="'@(ParsedOrchestratedBlobFeed)' == ''" />

    <PropertyGroup>
      <FinalDownloadDirectory Condition="'$(FinalDownloadDirectory)' == ''">$(BaseIntermediateOutputPath)final-package-download\</FinalDownloadDirectory>
      <BlobNamePrefix>%(ParsedOrchestratedBlobFeed.BlobPath)/flatcontainer/</BlobNamePrefix>
    </PropertyGroup>

    <ItemGroup>
      <FinalPackages Include="@(OrchestratedBlobFeedArtifacts)"
                     Condition="'%(Identity)' == 'Package'">
        <LowercaseId>$([System.String]::Copy('%(OrchestratedBlobFeedArtifacts.Id)').ToLowerInvariant())</LowercaseId>
        <LowercaseVersion>$([System.String]::Copy('%(OrchestratedBlobFeedArtifacts.Version)').ToLowerInvariant())</LowercaseVersion>
      </FinalPackages>

      <FinalPackages>
        <NupkgFile>%(LowercaseId).%(LowercaseVersion).nupkg</NupkgFile>
      </FinalPackages>

      <FinalPackages>
        <DownloadFullPath>$(FinalDownloadDirectory)%(NupkgFile)</DownloadFullPath>
      </FinalPackages>

      <PackageBlobNames Include="$(BlobNamePrefix)%(FinalPackages.LowercaseId)/%(FinalPackages.LowercaseVersion)/%(FinalPackages.NupkgFile)" />
    </ItemGroup>

    <!-- Ensure no stale packages are on disk. -->
    <RemoveDir Directories="$(FinalDownloadDirectory)" />

    <DownloadFromAzure AccountName="%(ParsedOrchestratedBlobFeed.AccountName)"
                       AccountKey="$(AccountKey)"
                       ContainerName="%(ParsedOrchestratedBlobFeed.ContainerName)"
                       BlobNames="@(PackageBlobNames)"
                       DownloadDirectory="$(FinalDownloadDirectory)"
                       DownloadFlatFiles="true" />

    <ItemGroup>
      <DownloadedOrchestratedFeedPackages Include="$(FinalDownloadDirectory)*.nupkg" />
    </ItemGroup>
  </Target>

  <!--
    Create/update a semaphore in the versions repo. This indicates some action is complete.

    [In]
    $(VersionsRepoPath): The root folder inside the target versions repo where the manifest is
      located. Doesn't include a trailing '/'.
    $(GitHubAuthToken): Auth token used when calling GitHub APIs.
    $(GitHubUser): The GitHub user associated with GitHubAuthToken.
    $(GitHubEmail): The email associated with GitHubAuthToken.
    $(OrchestratedBuildId): The orchestrated build id. Passing this along ensures that we aren't
      trying to pass stale data to the versions repo. This value is expected to come from the
      FetchOrchestratedBuildManifestInfo target. It prevents stale data from being uploaded to a
      newer manifest, instead emitting a warning.
    @(SemaphoreNames): Semaphores to update. Usually a single item, like 'packages.semaphore'.
    Optional:
      @(ManifestUpdates): Updates to perform on the manifest. These help convey information to
        downstream steps, but aren't required. For item requirements and behavior, see
        'UpdateOrchestratedBuildManifest.cs' in dotnet/buildtools.
      $(VersionsRepo): The GitHub repo name. Default: 'versions'
      $(VersionsRepoOwner): The GitHub repo owner. Default: 'dotnet'
      $(VersionsRepoBranch): The branch to fetch from. Default: 'master'
      $(OrchestratedIdentitySummary): Human-readable identity of the orchestrated build, used to
        generate a concise commit message. This is expected to come from
        FetchOrchestratedBuildManifestInfo.
        Default: the full VersionsRepoPath is used in the commit message.
      $(CommitMessage): Overrides the generated commit message.
      @(SupplementaryFiles): Uploads supplementary files to the versions repo as part of the update.
        For item requirements and behavior, see 'UpdateOrchestratedBuildManifest.cs' in
        dotnet/buildtools.
  -->
  <Target Name="UpdateOrchestratedBuildManifest"
          DependsOnTargets="CreateVersionsRepoDefaults">
    <Error Text="The VersionsRepoPath property must be set." Condition="'$(VersionsRepoPath)' == ''" />
    <Error Text="The GitHubAuthToken property must be set." Condition="'$(GitHubAuthToken)' == ''" />
    <Error Text="The GitHubUser property must be set." Condition="'$(GitHubUser)' == ''" />
    <Error Text="The GitHubEmail property must be set." Condition="'$(GitHubEmail)' == ''" />

    <Error Text="A SemaphoreNames item must be set." Condition="'@(SemaphoreNames)' == ''" />

    <UpdateOrchestratedBuildManifest ManifestUpdates="@(ManifestUpdates)"
                                     VersionsRepoPath="$(VersionsRepoPath)"
                                     SemaphoreNames="@(SemaphoreNames)"
                                     OrchestratedBuildId="$(OrchestratedBuildId)"
                                     GitHubAuthToken="$(GitHubAuthToken)"
                                     GitHubUser="$(GitHubUser)"
                                     GitHubEmail="$(GitHubEmail)"
                                     VersionsRepo="$(VersionsRepo)"
                                     VersionsRepoOwner="$(VersionsRepoOwner)"
                                     VersionsRepoBranch="$(VersionsRepoBranch)"
                                     CommitMessage="$(CommitMessage)"
                                     OrchestratedIdentitySummary="$(OrchestratedIdentitySummary)"
                                     SupplementaryFiles="@(SupplementaryFiles)"
                                     JoinSemaphoreGroups="@(JoinSemaphoreGroups)" />
  </Target>
</Project>