Skip to content

Commit 4235998

Browse files
authored
Publish to the build asset registry and conditionally skip building Windows Azure build task (#6683)
1 parent 0fff8bb commit 4235998

File tree

6 files changed

+207
-127
lines changed

6 files changed

+207
-127
lines changed

build.ps1

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ param(
102102
[Parameter(ParameterSetName = 'Groups')]
103103
[switch]$Installers,
104104

105+
# By default, Windows builds will use MSBuild.exe. Passing this will force the build to run on
106+
# dotnet.exe instead, which may cause issues if you invoke build on a project unsupported by
107+
# MSBuild for .NET Core
108+
[switch]$ForceCoreMsbuild,
109+
105110
# Other lifecycle targets
106111
[switch]$Help, # Show help
107112

@@ -269,6 +274,9 @@ Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')
269274

270275
try {
271276
Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $RepoRoot -ConfigFile $ConfigFile -CI:$CI
277+
if ($ForceCoreMsbuild) {
278+
$global:KoreBuildSettings.MSBuildType = 'core'
279+
}
272280
Invoke-KoreBuildCommand 'default-build' @MSBuildArguments
273281
}
274282
finally {

build/Publish.targets

Lines changed: 8 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,13 @@
11
<Project>
22

3-
<PropertyGroup>
4-
<PublishDependsOn>
5-
GetFilesToPublish;
6-
PublishToAzureFeed;
7-
PublishToMyGet;
8-
</PublishDependsOn>
9-
</PropertyGroup>
10-
11-
<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)" />
12-
13-
<Target Name="GetFilesToPublish">
14-
<ItemGroup>
15-
<!-- Installer output files with specific metadata. -->
16-
<_FilesToPublish Include="$(InstallersOutputPath)*.txt">
17-
<ContentType>text/plain</ContentType>
18-
</_FilesToPublish>
19-
20-
<_FilesToPublish Include="$(InstallersOutputPath)*.version">
21-
<ContentType>text/plain</ContentType>
22-
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
23-
</_FilesToPublish>
24-
25-
<_FilesToPublish Include="$(InstallersOutputPath)*.svg">
26-
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
27-
<ContentType>image/svg+xml</ContentType>
28-
</_FilesToPublish>
29-
30-
<!-- All other installer files. -->
31-
<_FilesToPublish Include="$(InstallersOutputPath)*" Exclude="@(_FilesToPublish)" />
32-
33-
<!-- Java packages -->
34-
<_FilesToPublish Include="$(ProductPackageOutputPath)*.jar;$(ProductPackageOutputPath)*.pom">
35-
<BlobBasePath>aspnetcore/jar/$(PackageVersion)/</BlobBasePath>
36-
</_FilesToPublish>
37-
38-
<!--
39-
Transform the intermediate item group into the final group.
40-
You can't use globbing _and_ set metadata using FileName and Extension at the same time. MSBuild quirks are fun.
41-
-->
42-
<FilesToPublish Include="@(_FilesToPublish)">
43-
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' != ''">%(_FilesToPublish.BlobBasePath)%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
44-
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' == ''">aspnetcore/Runtime/$(PackageVersion)/%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
45-
</FilesToPublish>
46-
<_FilesToPublish Remove="@(_FilesToPublish)" />
47-
48-
<!-- NPM packages -->
49-
<NpmPackageToPublish Include="$(ProductPackageOutputPath)*.tgz" />
50-
51-
<PackageToPublish Include="$(ProductPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true" />
52-
<PackageToPublish Include="$(ProductPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)" />
53-
</ItemGroup>
54-
55-
<!--
56-
'Internal' packages are used to transfer bits to partner teams, and should not be used by customers.
57-
Publishing these can be disabled.
58-
-->
59-
<ItemGroup Condition=" '$(PublishInternalPackages)' != 'false' ">
60-
<PackageToPublish Include="$(InternalPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true">
61-
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
62-
</PackageToPublish>
63-
<PackageToPublish Include="$(InternalPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)">
64-
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
65-
</PackageToPublish>
66-
</ItemGroup>
67-
</Target>
68-
69-
<Target Name="PublishToMyGet"
70-
DependsOnTargets="GetFilesToPublish;GetToolsets"
71-
Condition="'$(PublishToMyget)' == 'true'">
72-
73-
<Error Text="Missing required property: PublishMyGetFeedUrl" Condition=" '$(PublishMyGetFeedUrl)' == '' "/>
74-
<Error Text="Missing required property: PublishMyGetSymbolsFeedUrl" Condition=" '$(PublishMyGetSymbolsFeedUrl)' == '' "/>
75-
<Error Text="Missing required property: PublishMyGetNpmRegistryUrl" Condition=" '$(PublishMyGetNpmRegistryUrl)' == '' "/>
76-
<Error Text="Missing required property: PublishMyGetFeedKey" Condition=" '$(PublishMyGetFeedKey)' == '' "/>
77-
78-
<Error Text="No packages found to publish" Condition="@(PackageToPublish->Count()) == 0" />
79-
80-
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' != 'true' AND @(PackageToPublish->Count()) != 0"
81-
Packages="@(PackageToPublish)"
82-
Feed="$(PublishMyGetFeedUrl)"
83-
ApiKey="$(PublishMyGetFeedKey)" />
84-
85-
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' == 'true' AND @(PackageToPublish->Count()) != 0"
86-
Packages="@(PackageToPublish)"
87-
Feed="$(PublishMyGetSymbolsFeedUrl)"
88-
ApiKey="$(PublishMyGetFeedKey)" />
89-
90-
<PropertyGroup>
91-
<AuthTokenSetting>$(PublishMyGetNpmRegistryUrl.Replace("https:", "")):_authToken</AuthTokenSetting>
92-
</PropertyGroup>
93-
94-
<Message Condition=" @(NpmPackageToPublish->Count()) != 0 "
95-
Text="Skipping NPM publish because there are no npm packages to publish."
96-
Importance="high" />
97-
98-
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
99-
Command="npm config set &quot;$(AuthTokenSetting)&quot; $(PublishMyGetFeedKey)"
100-
StandardOutputImportance="Normal" />
101-
102-
<!-- When you UseCommandProcessor FileName is ignored -->
103-
<Run Condition=" @(NpmPackageToPublish->Count()) != 0 "
104-
FileName="cmd"
105-
Arguments="npm;publish;--registry;$(PublishMyGetNpmRegistryUrl);%(NpmPackageToPublish.Identity)"
106-
MaxRetries="5"
107-
UseCommandProcessor="true"
108-
ContinueOnError="true">
109-
<Output TaskParameter="ExitCode" ItemName="_NpmExitCodes" />
110-
</Run>
111-
112-
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
113-
Command="npm config delete $(AuthTokenSetting)"
114-
StandardOutputImportance="Normal" />
115-
116-
<Error Text="Publishing npm modules failed" Condition=" @(NpmPackageToPublish->Count()) != 0 AND %(_NpmExitCodes.Identity) != 0" />
117-
</Target>
118-
119-
<Target Name="PublishToAzureFeed"
120-
DependsOnTargets="GetFilesToPublish"
121-
Condition="'$(PublishToAzureFeed)' == 'true'">
122-
123-
<RepoTasks.PublishToAzureBlob
124-
AccountName="$(AzureAccountName)"
125-
SharedAccessToken="$(AzureSharedAccessToken)"
126-
ContainerName="$(AzureContainerName)"
127-
Files="@(FilesToPublish)" />
3+
<Target Name="Publish">
4+
<MSBuild Projects="$(MSBuildThisFileDirectory)publish\Publish.csproj"
5+
Targets="Restore"
6+
Properties="$(BuildProperties);KoreBuildTasksDll=$(KoreBuildTasksDll);__DummyTarget=Restore" />
7+
8+
<MSBuild Projects="$(MSBuildThisFileDirectory)publish\Publish.csproj"
9+
Targets="Publish"
10+
Properties="$(BuildProperties);KoreBuildTasksDll=$(KoreBuildTasksDll);__DummyTarget=Publish" />
12811
</Target>
12912

13013
</Project>

build/publish/Publish.csproj

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
<Project>
2+
3+
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
4+
5+
<PropertyGroup>
6+
<!-- TFM doesn't matter. These settings are required to make NuGet happy so we can restore required MSBuild packages. -->
7+
<TargetFramework>netcoreapp3.0</TargetFramework>
8+
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
9+
<ManifestsPath>$(ArtifactsDir)manifests\</ManifestsPath>
10+
<MaestroApiEndpoint Condition="'$(MaestroApiEndpoint)' == ''">https://maestro-prod.westus2.cloudapp.azure.com</MaestroApiEndpoint>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Microsoft.DotNet.Build.Tasks.Feed" Version="2.2.0-beta.19061.6" />
15+
<PackageReference Include="Microsoft.DotNet.Maestro.Tasks" Version="1.1.0-beta.19065.2" />
16+
</ItemGroup>
17+
18+
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
19+
20+
<PropertyGroup>
21+
<PublishDependsOn>
22+
GetFilesToPublish;
23+
GenerateBuildAssetManifest;
24+
PublishToAzureFeed;
25+
PublishToMyGet;
26+
PublishToBuildAssetRegistry;
27+
</PublishDependsOn>
28+
</PropertyGroup>
29+
30+
<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)" />
31+
32+
<Target Name="GetFilesToPublish">
33+
<ItemGroup>
34+
<!-- Installer output files with specific metadata. -->
35+
<_FilesToPublish Include="$(InstallersOutputPath)*.txt">
36+
<ContentType>text/plain</ContentType>
37+
</_FilesToPublish>
38+
39+
<_FilesToPublish Include="$(InstallersOutputPath)*.version">
40+
<ContentType>text/plain</ContentType>
41+
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
42+
</_FilesToPublish>
43+
44+
<_FilesToPublish Include="$(InstallersOutputPath)*.svg">
45+
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
46+
<ContentType>image/svg+xml</ContentType>
47+
</_FilesToPublish>
48+
49+
<!-- All other installer files. -->
50+
<_FilesToPublish Include="$(InstallersOutputPath)*" Exclude="@(_FilesToPublish)" />
51+
52+
<!-- Java packages -->
53+
<_FilesToPublish Include="$(ProductPackageOutputPath)*.jar;$(ProductPackageOutputPath)*.pom">
54+
<BlobBasePath>aspnetcore/jar/$(PackageVersion)/</BlobBasePath>
55+
</_FilesToPublish>
56+
57+
<!-- NPM packages -->
58+
<NpmPackageToPublish Include="$(ProductPackageOutputPath)*.tgz">
59+
<BlobBasePath>aspnetcore/npm/$(PackageVersion)/</BlobBasePath>
60+
</NpmPackageToPublish>
61+
<_FilesToPublish Include="@(NpmPackageToPublish)" />
62+
63+
<!--
64+
Transform the intermediate item group into the final group.
65+
You can't use globbing _and_ set metadata using FileName and Extension at the same time. MSBuild quirks are fun.
66+
-->
67+
<FilesToPublish Include="@(_FilesToPublish)">
68+
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' != ''">%(_FilesToPublish.BlobBasePath)%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
69+
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' == ''">aspnetcore/Runtime/$(PackageVersion)/%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
70+
</FilesToPublish>
71+
<_FilesToPublish Remove="@(_FilesToPublish)" />
72+
73+
<PackageToPublish Include="$(ProductPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true" />
74+
<PackageToPublish Include="$(ProductPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)" />
75+
</ItemGroup>
76+
77+
<!--
78+
'Internal' packages are used to transfer bits to partner teams, and should not be used by customers.
79+
Publishing these can be disabled.
80+
-->
81+
<ItemGroup Condition=" '$(PublishInternalPackages)' != 'false' ">
82+
<PackageToPublish Include="$(InternalPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true">
83+
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
84+
</PackageToPublish>
85+
<PackageToPublish Include="$(InternalPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)">
86+
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
87+
</PackageToPublish>
88+
</ItemGroup>
89+
90+
<Error Text="Missing required metadata 'RelativeBlobPath' for FilesToPublish: @(FilesToPublish)" Condition="'@(FilesToPublish)' != '' AND '%(RelativeBlobPath)' == ''" />
91+
</Target>
92+
93+
<UsingTask TaskName="KoreBuild.Tasks.PushNuGetPackages" AssemblyFile="$(KoreBuildTasksDll)" />
94+
95+
<Target Name="PublishToMyGet"
96+
DependsOnTargets="GetFilesToPublish"
97+
Condition="'$(PublishToMyget)' == 'true'">
98+
99+
<Error Text="Missing required property: PublishMyGetFeedUrl" Condition=" '$(PublishMyGetFeedUrl)' == '' "/>
100+
<Error Text="Missing required property: PublishMyGetSymbolsFeedUrl" Condition=" '$(PublishMyGetSymbolsFeedUrl)' == '' "/>
101+
<Error Text="Missing required property: PublishMyGetNpmRegistryUrl" Condition=" '$(PublishMyGetNpmRegistryUrl)' == '' "/>
102+
<Error Text="Missing required property: PublishMyGetFeedKey" Condition=" '$(PublishMyGetFeedKey)' == '' "/>
103+
104+
<Error Text="No packages found to publish" Condition="@(PackageToPublish->Count()) == 0" />
105+
106+
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' != 'true' AND @(PackageToPublish->Count()) != 0"
107+
Packages="@(PackageToPublish)"
108+
TimeoutSeconds="300"
109+
Feed="$(PublishMyGetFeedUrl)"
110+
ApiKey="$(PublishMyGetFeedKey)" />
111+
112+
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' == 'true' AND @(PackageToPublish->Count()) != 0"
113+
Packages="@(PackageToPublish)"
114+
TimeoutSeconds="300"
115+
Feed="$(PublishMyGetSymbolsFeedUrl)"
116+
ApiKey="$(PublishMyGetFeedKey)" />
117+
118+
<PropertyGroup>
119+
<AuthTokenSetting>$(PublishMyGetNpmRegistryUrl.Replace("https:", "")):_authToken</AuthTokenSetting>
120+
</PropertyGroup>
121+
122+
<Message Condition=" @(NpmPackageToPublish->Count()) != 0 "
123+
Text="Skipping NPM publish because there are no npm packages to publish."
124+
Importance="high" />
125+
126+
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
127+
Command="npm config set &quot;$(AuthTokenSetting)&quot; $(PublishMyGetFeedKey)"
128+
StandardOutputImportance="Normal" />
129+
130+
<!-- When you UseCommandProcessor FileName is ignored -->
131+
<Run Condition=" @(NpmPackageToPublish->Count()) != 0 "
132+
FileName="cmd"
133+
Arguments="npm;publish;--registry;$(PublishMyGetNpmRegistryUrl);%(NpmPackageToPublish.Identity)"
134+
MaxRetries="5"
135+
UseCommandProcessor="true"
136+
ContinueOnError="true">
137+
<Output TaskParameter="ExitCode" ItemName="_NpmExitCodes" />
138+
</Run>
139+
140+
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
141+
Command="npm config delete $(AuthTokenSetting)"
142+
StandardOutputImportance="Normal" />
143+
144+
<Error Text="Publishing npm modules failed" Condition=" @(NpmPackageToPublish->Count()) != 0 AND %(_NpmExitCodes.Identity) != 0" />
145+
</Target>
146+
147+
<Target Name="PublishToAzureFeed"
148+
DependsOnTargets="GetFilesToPublish"
149+
Condition="'$(PublishToAzureFeed)' == 'true'">
150+
151+
<RepoTasks.PublishToAzureBlob
152+
AccountName="$(AzureAccountName)"
153+
SharedAccessToken="$(AzureSharedAccessToken)"
154+
ContainerName="$(AzureContainerName)"
155+
Files="@(FilesToPublish)" />
156+
</Target>
157+
158+
<Target Name="GenerateBuildAssetManifest"
159+
DependsOnTargets="GetFilesToPublish;ResolveRepositoryBranch;ResolveCommitHash">
160+
161+
<GenerateBuildManifest
162+
Artifacts="@(PackageToPublish);@(FilesToPublish)"
163+
OutputPath="$(ManifestsPath)aspnetcore-$(SharedFxRid)-$(PackageVersion).xml"
164+
BuildId="$(PackageVersion)"
165+
BuildData="Location=https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json"
166+
RepoUri="$(RepositoryUrl)"
167+
RepoBranch="$(RepositoryBranch)"
168+
RepoCommit="$(RepositoryCommit)" />
169+
</Target>
170+
171+
<UsingTask TaskName="PushMetadataToBuildAssetRegistry" AssemblyFile="$(PkgMicrosoft_DotNet_Maestro_Tasks)\tools\netcoreapp2.1\Microsoft.DotNet.Maestro.Tasks.dll"/>
172+
173+
<Target Name="PublishToBuildAssetRegistry"
174+
DependsOnTargets="GenerateBuildAssetManifest"
175+
Condition="'$(PublishToBuildAssetRegistry)' == 'true'">
176+
177+
<Error Text="Missing required property: MaestroApiEndpoint" Condition=" '$(MaestroApiEndpoint)' == '' "/>
178+
<Error Text="Missing required property: BuildAssetRegistryToken" Condition=" '$(BuildAssetRegistryToken)' == '' "/>
179+
180+
<PushMetadataToBuildAssetRegistry
181+
ManifestsPath="$(ManifestsPath)"
182+
BuildAssetRegistryToken="$(BuildAssetRegistryToken)"
183+
MaestroApiEndpoint="$(MaestroApiEndpoint)" />
184+
</Target>
185+
186+
</Project>

build/tasks/PublishToAzureBlob.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
#if BUILD_AZ_TASKS
45
using System;
56
using System.Collections.Generic;
67
using System.IO;
@@ -142,3 +143,4 @@ private async Task PushFileAsync(OperationContext ctx, CloudBlobContainer contai
142143
}
143144
}
144145
}
146+
#endif

build/tasks/RepoTasks.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
<TargetFramework Condition="'$(MSBuildRuntimeType)' == 'Core' ">netcoreapp2.2</TargetFramework>
66
<TargetFramework Condition="'$(MSBuildRuntimeType)' != 'Core' ">net461</TargetFramework>
77
<DefineConstants Condition="'$(BuildWindowsInstallers)' == 'true'">$(DefineConstants);BUILD_MSI_TASKS</DefineConstants>
8+
<DefineConstants Condition="'$(PublishToAzureFeed)' == 'true'">$(DefineConstants);BUILD_AZ_TASKS</DefineConstants>
89
</PropertyGroup>
910

1011
<ItemGroup>
1112
<PackageReference Remove="Internal.AspNetCore.Sdk" />
1213
<PackageReference Include="NuGet.Build.Tasks" Version="4.9.1" />
1314
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
14-
<PackageReference Include="WindowsAzure.Storage" Version="8.7.0" />
15+
<PackageReference Include="WindowsAzure.Storage" Version="8.7.0" Condition="'$(PublishToAzureFeed)' == 'true'" />
1516
</ItemGroup>
1617

1718
<ItemGroup Condition="'$(BuildWindowsInstallers)' == 'true'">

build/tasks/RepoTasks.tasks

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
<UsingTask TaskName="RepoTasks.JoinRepoItems" AssemblyFile="$(_RepoTaskAssembly)" />
1010
<UsingTask TaskName="RepoTasks.OrderBy" AssemblyFile="$(_RepoTaskAssembly)" />
1111
<UsingTask TaskName="RepoTasks.GenerateSharedFrameworkMetadataFiles" AssemblyFile="$(_RepoTaskAssembly)" />
12-
<UsingTask TaskName="RepoTasks.PublishToAzureBlob" AssemblyFile="$(_RepoTaskAssembly)" />
12+
<UsingTask TaskName="RepoTasks.PublishToAzureBlob" AssemblyFile="$(_RepoTaskAssembly)" Condition="'$(PublishToAzureFeed)' == 'true'" />
1313
<UsingTask TaskName="RepoTasks.RemoveSharedFrameworkDependencies" AssemblyFile="$(_RepoTaskAssembly)" />
1414
</Project>

0 commit comments

Comments
 (0)