Publish to the build asset registry and conditionally skip building Windows Azure build task (#6683)

This commit is contained in:
Nate McMaster 2019-01-15 10:05:30 -08:00 committed by GitHub
parent 0fff8bbd04
commit 4235998962
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 206 additions and 126 deletions

View File

@ -102,6 +102,11 @@ param(
[Parameter(ParameterSetName = 'Groups')]
[switch]$Installers,
# By default, Windows builds will use MSBuild.exe. Passing this will force the build to run on
# dotnet.exe instead, which may cause issues if you invoke build on a project unsupported by
# MSBuild for .NET Core
[switch]$ForceCoreMsbuild,
# Other lifecycle targets
[switch]$Help, # Show help
@ -269,6 +274,9 @@ Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')
try {
Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $RepoRoot -ConfigFile $ConfigFile -CI:$CI
if ($ForceCoreMsbuild) {
$global:KoreBuildSettings.MSBuildType = 'core'
}
Invoke-KoreBuildCommand 'default-build' @MSBuildArguments
}
finally {

View File

@ -1,130 +1,13 @@
<Project>
<PropertyGroup>
<PublishDependsOn>
GetFilesToPublish;
PublishToAzureFeed;
PublishToMyGet;
</PublishDependsOn>
</PropertyGroup>
<Target Name="Publish">
<MSBuild Projects="$(MSBuildThisFileDirectory)publish\Publish.csproj"
Targets="Restore"
Properties="$(BuildProperties);KoreBuildTasksDll=$(KoreBuildTasksDll);__DummyTarget=Restore" />
<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)" />
<Target Name="GetFilesToPublish">
<ItemGroup>
<!-- Installer output files with specific metadata. -->
<_FilesToPublish Include="$(InstallersOutputPath)*.txt">
<ContentType>text/plain</ContentType>
</_FilesToPublish>
<_FilesToPublish Include="$(InstallersOutputPath)*.version">
<ContentType>text/plain</ContentType>
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
</_FilesToPublish>
<_FilesToPublish Include="$(InstallersOutputPath)*.svg">
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
<ContentType>image/svg+xml</ContentType>
</_FilesToPublish>
<!-- All other installer files. -->
<_FilesToPublish Include="$(InstallersOutputPath)*" Exclude="@(_FilesToPublish)" />
<!-- Java packages -->
<_FilesToPublish Include="$(ProductPackageOutputPath)*.jar;$(ProductPackageOutputPath)*.pom">
<BlobBasePath>aspnetcore/jar/$(PackageVersion)/</BlobBasePath>
</_FilesToPublish>
<!--
Transform the intermediate item group into the final group.
You can't use globbing _and_ set metadata using FileName and Extension at the same time. MSBuild quirks are fun.
-->
<FilesToPublish Include="@(_FilesToPublish)">
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' != ''">%(_FilesToPublish.BlobBasePath)%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' == ''">aspnetcore/Runtime/$(PackageVersion)/%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
</FilesToPublish>
<_FilesToPublish Remove="@(_FilesToPublish)" />
<!-- NPM packages -->
<NpmPackageToPublish Include="$(ProductPackageOutputPath)*.tgz" />
<PackageToPublish Include="$(ProductPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true" />
<PackageToPublish Include="$(ProductPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)" />
</ItemGroup>
<!--
'Internal' packages are used to transfer bits to partner teams, and should not be used by customers.
Publishing these can be disabled.
-->
<ItemGroup Condition=" '$(PublishInternalPackages)' != 'false' ">
<PackageToPublish Include="$(InternalPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true">
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
</PackageToPublish>
<PackageToPublish Include="$(InternalPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)">
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
</PackageToPublish>
</ItemGroup>
</Target>
<Target Name="PublishToMyGet"
DependsOnTargets="GetFilesToPublish;GetToolsets"
Condition="'$(PublishToMyget)' == 'true'">
<Error Text="Missing required property: PublishMyGetFeedUrl" Condition=" '$(PublishMyGetFeedUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetSymbolsFeedUrl" Condition=" '$(PublishMyGetSymbolsFeedUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetNpmRegistryUrl" Condition=" '$(PublishMyGetNpmRegistryUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetFeedKey" Condition=" '$(PublishMyGetFeedKey)' == '' "/>
<Error Text="No packages found to publish" Condition="@(PackageToPublish->Count()) == 0" />
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' != 'true' AND @(PackageToPublish->Count()) != 0"
Packages="@(PackageToPublish)"
Feed="$(PublishMyGetFeedUrl)"
ApiKey="$(PublishMyGetFeedKey)" />
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' == 'true' AND @(PackageToPublish->Count()) != 0"
Packages="@(PackageToPublish)"
Feed="$(PublishMyGetSymbolsFeedUrl)"
ApiKey="$(PublishMyGetFeedKey)" />
<PropertyGroup>
<AuthTokenSetting>$(PublishMyGetNpmRegistryUrl.Replace("https:", "")):_authToken</AuthTokenSetting>
</PropertyGroup>
<Message Condition=" @(NpmPackageToPublish->Count()) != 0 "
Text="Skipping NPM publish because there are no npm packages to publish."
Importance="high" />
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
Command="npm config set &quot;$(AuthTokenSetting)&quot; $(PublishMyGetFeedKey)"
StandardOutputImportance="Normal" />
<!-- When you UseCommandProcessor FileName is ignored -->
<Run Condition=" @(NpmPackageToPublish->Count()) != 0 "
FileName="cmd"
Arguments="npm;publish;--registry;$(PublishMyGetNpmRegistryUrl);%(NpmPackageToPublish.Identity)"
MaxRetries="5"
UseCommandProcessor="true"
ContinueOnError="true">
<Output TaskParameter="ExitCode" ItemName="_NpmExitCodes" />
</Run>
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
Command="npm config delete $(AuthTokenSetting)"
StandardOutputImportance="Normal" />
<Error Text="Publishing npm modules failed" Condition=" @(NpmPackageToPublish->Count()) != 0 AND %(_NpmExitCodes.Identity) != 0" />
</Target>
<Target Name="PublishToAzureFeed"
DependsOnTargets="GetFilesToPublish"
Condition="'$(PublishToAzureFeed)' == 'true'">
<RepoTasks.PublishToAzureBlob
AccountName="$(AzureAccountName)"
SharedAccessToken="$(AzureSharedAccessToken)"
ContainerName="$(AzureContainerName)"
Files="@(FilesToPublish)" />
<MSBuild Projects="$(MSBuildThisFileDirectory)publish\Publish.csproj"
Targets="Publish"
Properties="$(BuildProperties);KoreBuildTasksDll=$(KoreBuildTasksDll);__DummyTarget=Publish" />
</Target>
</Project>

View File

@ -0,0 +1,186 @@
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<!-- TFM doesn't matter. These settings are required to make NuGet happy so we can restore required MSBuild packages. -->
<TargetFramework>netcoreapp3.0</TargetFramework>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<ManifestsPath>$(ArtifactsDir)manifests\</ManifestsPath>
<MaestroApiEndpoint Condition="'$(MaestroApiEndpoint)' == ''">https://maestro-prod.westus2.cloudapp.azure.com</MaestroApiEndpoint>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.DotNet.Build.Tasks.Feed" Version="2.2.0-beta.19061.6" />
<PackageReference Include="Microsoft.DotNet.Maestro.Tasks" Version="1.1.0-beta.19065.2" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<PublishDependsOn>
GetFilesToPublish;
GenerateBuildAssetManifest;
PublishToAzureFeed;
PublishToMyGet;
PublishToBuildAssetRegistry;
</PublishDependsOn>
</PropertyGroup>
<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)" />
<Target Name="GetFilesToPublish">
<ItemGroup>
<!-- Installer output files with specific metadata. -->
<_FilesToPublish Include="$(InstallersOutputPath)*.txt">
<ContentType>text/plain</ContentType>
</_FilesToPublish>
<_FilesToPublish Include="$(InstallersOutputPath)*.version">
<ContentType>text/plain</ContentType>
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
</_FilesToPublish>
<_FilesToPublish Include="$(InstallersOutputPath)*.svg">
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
<ContentType>image/svg+xml</ContentType>
</_FilesToPublish>
<!-- All other installer files. -->
<_FilesToPublish Include="$(InstallersOutputPath)*" Exclude="@(_FilesToPublish)" />
<!-- Java packages -->
<_FilesToPublish Include="$(ProductPackageOutputPath)*.jar;$(ProductPackageOutputPath)*.pom">
<BlobBasePath>aspnetcore/jar/$(PackageVersion)/</BlobBasePath>
</_FilesToPublish>
<!-- NPM packages -->
<NpmPackageToPublish Include="$(ProductPackageOutputPath)*.tgz">
<BlobBasePath>aspnetcore/npm/$(PackageVersion)/</BlobBasePath>
</NpmPackageToPublish>
<_FilesToPublish Include="@(NpmPackageToPublish)" />
<!--
Transform the intermediate item group into the final group.
You can't use globbing _and_ set metadata using FileName and Extension at the same time. MSBuild quirks are fun.
-->
<FilesToPublish Include="@(_FilesToPublish)">
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' != ''">%(_FilesToPublish.BlobBasePath)%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
<RelativeBlobPath Condition="'%(_FilesToPublish.BlobBasePath)' == ''">aspnetcore/Runtime/$(PackageVersion)/%(_FilesToPublish.FileName)%(_FilesToPublish.Extension)</RelativeBlobPath>
</FilesToPublish>
<_FilesToPublish Remove="@(_FilesToPublish)" />
<PackageToPublish Include="$(ProductPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true" />
<PackageToPublish Include="$(ProductPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)" />
</ItemGroup>
<!--
'Internal' packages are used to transfer bits to partner teams, and should not be used by customers.
Publishing these can be disabled.
-->
<ItemGroup Condition=" '$(PublishInternalPackages)' != 'false' ">
<PackageToPublish Include="$(InternalPackageOutputPath)*.symbols.nupkg" IsSymbolsPackage="true">
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
</PackageToPublish>
<PackageToPublish Include="$(InternalPackageOutputPath)*.nupkg" Exclude="@(PackageToPublish)">
<ManifestArtifactData>NonShipping=true</ManifestArtifactData>
</PackageToPublish>
</ItemGroup>
<Error Text="Missing required metadata 'RelativeBlobPath' for FilesToPublish: @(FilesToPublish)" Condition="'@(FilesToPublish)' != '' AND '%(RelativeBlobPath)' == ''" />
</Target>
<UsingTask TaskName="KoreBuild.Tasks.PushNuGetPackages" AssemblyFile="$(KoreBuildTasksDll)" />
<Target Name="PublishToMyGet"
DependsOnTargets="GetFilesToPublish"
Condition="'$(PublishToMyget)' == 'true'">
<Error Text="Missing required property: PublishMyGetFeedUrl" Condition=" '$(PublishMyGetFeedUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetSymbolsFeedUrl" Condition=" '$(PublishMyGetSymbolsFeedUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetNpmRegistryUrl" Condition=" '$(PublishMyGetNpmRegistryUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetFeedKey" Condition=" '$(PublishMyGetFeedKey)' == '' "/>
<Error Text="No packages found to publish" Condition="@(PackageToPublish->Count()) == 0" />
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' != 'true' AND @(PackageToPublish->Count()) != 0"
Packages="@(PackageToPublish)"
TimeoutSeconds="300"
Feed="$(PublishMyGetFeedUrl)"
ApiKey="$(PublishMyGetFeedKey)" />
<PushNuGetPackages Condition="'%(PackageToPublish.IsSymbolsPackage)' == 'true' AND @(PackageToPublish->Count()) != 0"
Packages="@(PackageToPublish)"
TimeoutSeconds="300"
Feed="$(PublishMyGetSymbolsFeedUrl)"
ApiKey="$(PublishMyGetFeedKey)" />
<PropertyGroup>
<AuthTokenSetting>$(PublishMyGetNpmRegistryUrl.Replace("https:", "")):_authToken</AuthTokenSetting>
</PropertyGroup>
<Message Condition=" @(NpmPackageToPublish->Count()) != 0 "
Text="Skipping NPM publish because there are no npm packages to publish."
Importance="high" />
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
Command="npm config set &quot;$(AuthTokenSetting)&quot; $(PublishMyGetFeedKey)"
StandardOutputImportance="Normal" />
<!-- When you UseCommandProcessor FileName is ignored -->
<Run Condition=" @(NpmPackageToPublish->Count()) != 0 "
FileName="cmd"
Arguments="npm;publish;--registry;$(PublishMyGetNpmRegistryUrl);%(NpmPackageToPublish.Identity)"
MaxRetries="5"
UseCommandProcessor="true"
ContinueOnError="true">
<Output TaskParameter="ExitCode" ItemName="_NpmExitCodes" />
</Run>
<Exec Condition=" @(NpmPackageToPublish->Count()) != 0 "
Command="npm config delete $(AuthTokenSetting)"
StandardOutputImportance="Normal" />
<Error Text="Publishing npm modules failed" Condition=" @(NpmPackageToPublish->Count()) != 0 AND %(_NpmExitCodes.Identity) != 0" />
</Target>
<Target Name="PublishToAzureFeed"
DependsOnTargets="GetFilesToPublish"
Condition="'$(PublishToAzureFeed)' == 'true'">
<RepoTasks.PublishToAzureBlob
AccountName="$(AzureAccountName)"
SharedAccessToken="$(AzureSharedAccessToken)"
ContainerName="$(AzureContainerName)"
Files="@(FilesToPublish)" />
</Target>
<Target Name="GenerateBuildAssetManifest"
DependsOnTargets="GetFilesToPublish;ResolveRepositoryBranch;ResolveCommitHash">
<GenerateBuildManifest
Artifacts="@(PackageToPublish);@(FilesToPublish)"
OutputPath="$(ManifestsPath)aspnetcore-$(SharedFxRid)-$(PackageVersion).xml"
BuildId="$(PackageVersion)"
BuildData="Location=https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json"
RepoUri="$(RepositoryUrl)"
RepoBranch="$(RepositoryBranch)"
RepoCommit="$(RepositoryCommit)" />
</Target>
<UsingTask TaskName="PushMetadataToBuildAssetRegistry" AssemblyFile="$(PkgMicrosoft_DotNet_Maestro_Tasks)\tools\netcoreapp2.1\Microsoft.DotNet.Maestro.Tasks.dll"/>
<Target Name="PublishToBuildAssetRegistry"
DependsOnTargets="GenerateBuildAssetManifest"
Condition="'$(PublishToBuildAssetRegistry)' == 'true'">
<Error Text="Missing required property: MaestroApiEndpoint" Condition=" '$(MaestroApiEndpoint)' == '' "/>
<Error Text="Missing required property: BuildAssetRegistryToken" Condition=" '$(BuildAssetRegistryToken)' == '' "/>
<PushMetadataToBuildAssetRegistry
ManifestsPath="$(ManifestsPath)"
BuildAssetRegistryToken="$(BuildAssetRegistryToken)"
MaestroApiEndpoint="$(MaestroApiEndpoint)" />
</Target>
</Project>

View File

@ -1,6 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#if BUILD_AZ_TASKS
using System;
using System.Collections.Generic;
using System.IO;
@ -142,3 +143,4 @@ namespace RepoTasks
}
}
}
#endif

View File

@ -5,13 +5,14 @@
<TargetFramework Condition="'$(MSBuildRuntimeType)' == 'Core' ">netcoreapp2.2</TargetFramework>
<TargetFramework Condition="'$(MSBuildRuntimeType)' != 'Core' ">net461</TargetFramework>
<DefineConstants Condition="'$(BuildWindowsInstallers)' == 'true'">$(DefineConstants);BUILD_MSI_TASKS</DefineConstants>
<DefineConstants Condition="'$(PublishToAzureFeed)' == 'true'">$(DefineConstants);BUILD_AZ_TASKS</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Remove="Internal.AspNetCore.Sdk" />
<PackageReference Include="NuGet.Build.Tasks" Version="4.9.1" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
<PackageReference Include="WindowsAzure.Storage" Version="8.7.0" />
<PackageReference Include="WindowsAzure.Storage" Version="8.7.0" Condition="'$(PublishToAzureFeed)' == 'true'" />
</ItemGroup>
<ItemGroup Condition="'$(BuildWindowsInstallers)' == 'true'">

View File

@ -9,6 +9,6 @@
<UsingTask TaskName="RepoTasks.JoinRepoItems" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.OrderBy" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.GenerateSharedFrameworkMetadataFiles" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.PublishToAzureBlob" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.PublishToAzureBlob" AssemblyFile="$(_RepoTaskAssembly)" Condition="'$(PublishToAzureFeed)' == 'true'" />
<UsingTask TaskName="RepoTasks.RemoveSharedFrameworkDependencies" AssemblyFile="$(_RepoTaskAssembly)" />
</Project>