From 36dfe5b5a91fa676b320f97fb71f70116fd4d75f Mon Sep 17 00:00:00 2001 From: User Toweinfu Date: Fri, 16 Nov 2018 17:51:51 -0800 Subject: [PATCH 01/37] initial support for freebsd --- build/BuildDefaults.props | 2 ++ build/BuildInfo.targets | 2 +- .../CurrentPlatform.cs | 16 +++++++++++++++- .../Enumerations/BuildPlatform.cs | 3 ++- scripts/cli-test-env.sh | 2 ++ src/redist/redist.csproj | 1 + 6 files changed, 23 insertions(+), 3 deletions(-) diff --git a/build/BuildDefaults.props b/build/BuildDefaults.props index 602b1970d..e7785aefc 100644 --- a/build/BuildDefaults.props +++ b/build/BuildDefaults.props @@ -8,6 +8,7 @@ true true True + True $(HostOSName) $(HostOSPlatform) linux diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/CurrentPlatform.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/CurrentPlatform.cs index 91bd81d17..2981f5cc2 100644 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/CurrentPlatform.cs +++ b/build_projects/Microsoft.DotNet.Cli.Build.Framework/CurrentPlatform.cs @@ -34,6 +34,14 @@ namespace Microsoft.DotNet.Cli.Build.Framework } } + public static bool IsFreeBSD + { + get + { + return RuntimeInformation.IsOSPlatform(OSPlatform.Create("FREEBSD")); + } + } + public static bool IsUbuntu { get @@ -83,7 +91,7 @@ namespace Microsoft.DotNet.Cli.Build.Framework { get { - return IsLinux || IsOSX; + return IsLinux || IsOSX || IsFreeBSD; } } @@ -124,6 +132,8 @@ namespace Microsoft.DotNet.Cli.Build.Framework return IsUbuntu; case BuildPlatform.OSX: return IsOSX; + case BuildPlatform.FreeBSD: + return IsFreeBSD; case BuildPlatform.CentOS: return IsCentOS; case BuildPlatform.RHEL: @@ -182,6 +192,10 @@ namespace Microsoft.DotNet.Cli.Build.Framework { return BuildPlatform.OpenSuse; } + else if (IsFreeBSD) + { + return BuildPlatform.FreeBSD; + } else { return default(BuildPlatform); diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Enumerations/BuildPlatform.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/Enumerations/BuildPlatform.cs index 883402dbf..72e68a0dc 100644 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Enumerations/BuildPlatform.cs +++ b/build_projects/Microsoft.DotNet.Cli.Build.Framework/Enumerations/BuildPlatform.cs @@ -14,6 +14,7 @@ namespace Microsoft.DotNet.Cli.Build.Framework RHEL = 7, Debian = 8, Fedora = 9, - OpenSuse = 10 + OpenSuse = 10, + FreeBSD = 11 } } diff --git a/scripts/cli-test-env.sh b/scripts/cli-test-env.sh index 556e032f7..b13d434e5 100755 --- a/scripts/cli-test-env.sh +++ b/scripts/cli-test-env.sh @@ -17,6 +17,8 @@ uname=$(uname) if [ "$(uname)" = "Darwin" ] then RID=osx-x64 +elif [ "$(uname)" = "FreeBSD" ]; then + RID=freebsd-x64 else RID=linux-x64 fi diff --git a/src/redist/redist.csproj b/src/redist/redist.csproj index db633fb36..5aa2c6545 100644 --- a/src/redist/redist.csproj +++ b/src/redist/redist.csproj @@ -182,6 +182,7 @@ true false + false Date: Fri, 7 Dec 2018 13:10:47 -0800 Subject: [PATCH 02/37] Update coresetup to preview-27206-02 (#202) --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 235d74993..f5df28039 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27205-02 + 3.0.0-preview-27206-02 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index 671c82cf4..ba8f6f7c1 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27205-02 + 3.0.0-preview-27206-02 1.3.1 From 7aff0fddfbc0b46467126fd8e07063cae0aef251 Mon Sep 17 00:00:00 2001 From: wfurt Date: Mon, 10 Dec 2018 11:36:23 -0800 Subject: [PATCH 03/37] update stage0 sdk to 3.0 preview --- run-build.ps1 | 4 ++-- run-build.sh | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/run-build.ps1 b/run-build.ps1 index 1706ea263..638947ec0 100644 --- a/run-build.ps1 +++ b/run-build.ps1 @@ -94,8 +94,8 @@ if($Architecture.StartsWith("arm", [StringComparison]::OrdinalIgnoreCase)) $InstallArchitecture = "x64" } -Write-Output "$dotnetInstallPath -version ""3.0.100-preview1-009020"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$InstallArchitecture""" -Invoke-Expression "$dotnetInstallPath -version ""3.0.100-preview1-009020"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$InstallArchitecture""" +Write-Output "$dotnetInstallPath -version ""3.0.100-preview-009812"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$InstallArchitecture""" +Invoke-Expression "$dotnetInstallPath -version ""3.0.100-preview-009812"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$InstallArchitecture""" if ($LastExitCode -ne 0) { diff --git a/run-build.sh b/run-build.sh index b58ec14e9..53a57b9fa 100755 --- a/run-build.sh +++ b/run-build.sh @@ -167,7 +167,14 @@ if [[ $archlower == 'arm'* ]]; then fi if [ "$STAGE0_SOURCE_DIR" == "" ]; then - (set -x ; curl -sSL "https://dot.net/v1/dotnet-install.sh" | bash /dev/stdin --version "3.0.100-preview1-009020" --install-dir "$DOTNET_INSTALL_DIR" --architecture "$INSTALL_ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS) + (set -x ; curl -sSL "https://dot.net/v1/dotnet-install.sh" | bash /dev/stdin --version "3.0.100-preview-009812" --install-dir "$DOTNET_INSTALL_DIR" --architecture "$INSTALL_ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS) + if [ -f /etc/os-release ]; then + . /etc/os-release + if [ "$ID" == 'debian' ] || [ "$ID" == 'ubuntu' ]; then + # get 2.x runtime for deb-tool package. This may be temporary until we have package targeting 3.0 + (set -x ; curl -sSL "https://dot.net/v1/dotnet-install.sh" | bash /dev/stdin --runtime dotnet --version "2.2.0" --install-dir "$DOTNET_INSTALL_DIR" --architecture "$INSTALL_ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS) + fi + fi else echo "Copying bootstrap cli from $STAGE0_SOURCE_DIR" cp -r $STAGE0_SOURCE_DIR/* "$DOTNET_INSTALL_DIR" From 498df5b8d25ef409d499ef837475b743789c5366 Mon Sep 17 00:00:00 2001 From: User Toweinfu Date: Wed, 12 Dec 2018 14:42:27 -0800 Subject: [PATCH 04/37] add entry for freebsd to badge processing --- build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs index 4c1022261..7377e7042 100644 --- a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs +++ b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs @@ -53,6 +53,7 @@ namespace Microsoft.DotNet.Cli.Build { { "win_x86", false }, { "win_x64", false }, + { "freebsd_x64", false }, { "osx_x64", false }, { "linux_x64", false }, { "rhel.6_x64", false }, From 6fd3ea4b4015b318d14ddc3a1a1c453f5c518750 Mon Sep 17 00:00:00 2001 From: wfurt Date: Thu, 13 Dec 2018 22:00:16 -0800 Subject: [PATCH 05/37] change debug to Debug to match managed part --- run-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-build.sh b/run-build.sh index 53a57b9fa..19f979608 100755 --- a/run-build.sh +++ b/run-build.sh @@ -49,7 +49,7 @@ while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symli done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" REPOROOT="$DIR" -CONFIGURATION="debug" +CONFIGURATION="Debug" ARCHITECTURE="x64" STAGE0_SOURCE_DIR= From 3951fc71ca38e4778b2aabfeffafd340654aefc6 Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Wed, 12 Dec 2018 18:56:46 +0000 Subject: [PATCH 06/37] Update coresetup to preview-27214-02 --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index f5df28039..5bb059cb0 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27206-02 + 3.0.0-preview-27214-02 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index ba8f6f7c1..f871fdd4e 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27206-02 + 3.0.0-preview-27214-02 1.3.1 From 857a1f8ae7306daf6cb680f4d059e0f70ba0c250 Mon Sep 17 00:00:00 2001 From: Nick Guerrera Date: Fri, 7 Dec 2018 13:08:53 -0800 Subject: [PATCH 07/37] Update toolset --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 5bb059cb0..b9f372c1d 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -1,7 +1,7 @@ - 3.0.100-preview-009734 + 3.0.100-preview-009741 From ce002b642141d1bdd574fda265f699b87bc13b5f Mon Sep 17 00:00:00 2001 From: Nick Guerrera Date: Fri, 14 Dec 2018 12:01:56 -0800 Subject: [PATCH 08/37] Update WindowsDesktop --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index b9f372c1d..1d315a0fb 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -41,7 +41,7 @@ $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftAspNetCoreAppPackageVersion) - 3.0.0-alpha-27128-4 + 3.0.0-alpha-27214-5 $(MicrosoftWindowsDesktopPackageVersion) $(MicrosoftWindowsDesktopPackageVersion) From b8671d5fe6f36f2ed83244caeef56bbc4fb6a496 Mon Sep 17 00:00:00 2001 From: John Beisner Date: Fri, 14 Dec 2018 13:00:12 -0800 Subject: [PATCH 09/37] Update readme; core-sdk:master (#209) * Updates; add FreeBSD. * Update displayed branches... --- README.md | 380 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 194 insertions(+), 186 deletions(-) diff --git a/README.md b/README.md index 31aa0c7a7..0408fb331 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Join the chat at https://gitter.im/dotnet/cli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dotnet/cli?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -This repo contains the source code for the cross-platform [.NET Core](http://github.com/dotnet/core) SDK. It aggregates the .NET Toolchain, the .NET Core runtime, the templates, the offline packages cache, and the ASP.NET Runtime store. It produces zip, tarballs, and native packages for various supported platforms. +This repo contains the source code for the cross-platform [.NET Core](http://github.com/dotnet/core) SDK. It aggregates the .NET Toolchain, the .NET Core runtime, the templates, the offline packages cache, the ASP.NET Runtime store, and the .NET Core Windows Desktop runtime. It produces zip, tarballs, and native packages for various supported platforms. Looking for V2 of the .NET Core tooling? ---------------------------------------- @@ -21,39 +21,43 @@ This project has adopted the code of conduct defined by the [Contributor Covenan Build Status ------------ -|Windows x64|Windows x86|macOS|Linux x64 Archive|Linux arm Archive|Linux arm64 Archive|Linux Native Installers|RHEL 6 Archive|Linux-musl Archive|Windows Arm| -|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| -|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][linux-build-badge]][linux-build]|[![][linux-arm-build-badge]][linux-arm-build]|[![][linux-arm64-build-badge]][linux-arm64-build]|[![][linuxnative-build-badge]][linuxnative-build]|[![][rhel6-build-badge]][rhel6-build]|[![][linux-musl-build-badge]][linux-musl-build]|[![][win-arm-build-badge]][win-arm-build]| +|Windows x64|Windows x86|macOS|Linux x64 Archive|Linux arm Archive|Linux arm64 Archive|Linux Native Installers|RHEL 6 Archive|Linux-musl Archive|Windows Arm Archive|FreeBSD x64 Archive| +|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| +|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][linux-build-badge]][linux-build]|[![][linux-arm-build-badge]][linux-arm-build]|[![][linux-arm64-build-badge]][linux-arm64-build]|[![][linuxnative-build-badge]][linuxnative-build]|[![][rhel6-build-badge]][rhel6-build]|[![][linux-musl-build-badge]][linux-musl-build]|[![][win-arm-build-badge]][win-arm-build]|[![][freebsd-x64-build-badge]][freebsd-x64-build]| [win-x64-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9472/badge -[win-x64-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9472 +[win-x64-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9472 [win-x86-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9464/badge -[win-x86-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9464 +[win-x86-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9464 [osx-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9470/badge -[osx-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9470 +[osx-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9470 [linux-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9469/badge -[linux-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9469 +[linux-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9469 [linux-arm-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9467/badge -[linux-arm-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9467 +[linux-arm-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9467 [linux-arm64-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9468/badge -[linux-arm64-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9468 +[linux-arm64-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9468 [linuxnative-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9465/badge -[linuxnative-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9465 +[linuxnative-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9465 [rhel6-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9471/badge -[rhel6-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9471 +[rhel6-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9471 [linux-musl-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/9466/badge -[linux-musl-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=9466 +[linux-musl-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=9466 [win-arm-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/10417/badge -[win-arm-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=10417 +[win-arm-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=10417 + +[freebsd-x64-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/10516/badge +[freebsd-x64-build]: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=10516 + Installers and Binaries ----------------------- @@ -66,25 +70,26 @@ To download the .NET Core runtime **without** the SDK, visit https://github.com/ > want to install the latest released versions, check out the [preceding section](#looking-for-v1-of-the-net-core-tooling). > In order to be able to restore these pre-release packages, you may need to add a NuGet feed as noted in the table below. Other feeds may also be necessary depending on what kind of project you are working with. -| Platform | Master
(3.0.x Runtime) | Release/2.1.2XX
(2.0.x Runtime) | Release/2.1.401
(2.1.3 Runtime) | Release/2.1.4XX
(2.1.2 Runtime) | Release/2.2.1XX
(2.2.x Runtime) | +| Platform | Master
(3.0.x Runtime) | Release/2.2.2XX
(2.2.x Runtime) | Release/2.2.1XX
(2.2.x Runtime) | Release/2.1.6XX
(2.1.6 Runtime) | Release/2.1.5XX
(2.1.5 Runtime) | |---------|:----------:|:----------:|:----------:|:----------:|:----------:| -| **Windows (x64)** | [![][win-x64-badge-master]][win-x64-version-master]
[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]
[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-2.1.2XX]][win-x64-version-2.1.2XX]
[Installer][win-x64-installer-2.1.2XX] - [Checksum][win-x64-installer-checksum-2.1.2XX]
[zip][win-x64-zip-2.1.2XX] - [Checksum][win-x64-zip-checksum-2.1.2XX] | [![][win-x64-badge-2.1.401]][win-x64-version-2.1.401]
[Installer][win-x64-installer-2.1.401] - [Checksum][win-x64-installer-checksum-2.1.401]
[zip][win-x64-zip-2.1.401] - [Checksum][win-x64-zip-checksum-2.1.401] | [![][win-x64-badge-2.1.4XX]][win-x64-version-2.1.4XX]
[Installer][win-x64-installer-2.1.4XX] - [Checksum][win-x64-installer-checksum-2.1.4XX]
[zip][win-x64-zip-2.1.4XX] - [Checksum][win-x64-zip-checksum-2.1.4XX] | [![][win-x64-badge-2.2.1XX]][win-x64-version-2.2.1XX]
[Installer][win-x64-installer-2.2.1XX] - [Checksum][win-x64-installer-checksum-2.2.1XX]
[zip][win-x64-zip-2.2.1XX] - [Checksum][win-x64-zip-checksum-2.2.1XX] | -| **Windows x86** | [![][win-x86-badge-master]][win-x86-version-master]
[Installer][win-x86-installer-master] - [Checksum][win-x86-installer-checksum-master]
[zip][win-x86-zip-master] - [Checksum][win-x86-zip-checksum-master] | [![][win-x86-badge-2.1.2XX]][win-x86-version-2.1.2XX]
[Installer][win-x86-installer-2.1.2XX] - [Checksum][win-x86-installer-checksum-2.1.2XX]
[zip][win-x86-zip-2.1.2XX] - [Checksum][win-x86-zip-checksum-2.1.2XX] | [![][win-x86-badge-2.1.401]][win-x86-version-2.1.401]
[Installer][win-x86-installer-2.1.401] - [Checksum][win-x86-installer-checksum-2.1.401]
[zip][win-x86-zip-2.1.401] - [Checksum][win-x86-zip-checksum-2.1.401] | [![][win-x86-badge-2.1.4XX]][win-x86-version-2.1.4XX]
[Installer][win-x86-installer-2.1.4XX] - [Checksum][win-x86-installer-checksum-2.1.4XX]
[zip][win-x86-zip-2.1.4XX] - [Checksum][win-x86-zip-checksum-2.1.4XX] | [![][win-x86-badge-2.2.1XX]][win-x86-version-2.2.1XX]
[Installer][win-x86-installer-2.2.1XX] - [Checksum][win-x86-installer-checksum-2.2.1XX]
[zip][win-x86-zip-2.2.1XX] - [Checksum][win-x86-zip-checksum-2.2.1XX] | -| **macOS** | [![][osx-badge-master]][osx-version-master]
[Installer][osx-installer-master] - [Checksum][osx-installer-checksum-master]
[tar.gz][osx-targz-master] - [Checksum][osx-targz-checksum-master] | [![][osx-badge-2.1.2XX]][osx-version-2.1.2XX]
[Installer][osx-installer-2.1.2XX] - [Checksum][osx-installer-checksum-2.1.2XX]
[tar.gz][osx-targz-2.1.2XX] - [Checksum][osx-targz-checksum-2.1.2XX] | [![][osx-badge-2.1.401]][osx-version-2.1.401]
[Installer][osx-installer-2.1.401] - [Checksum][osx-installer-checksum-2.1.401]
[tar.gz][osx-targz-2.1.401] - [Checksum][osx-targz-checksum-2.1.401] | [![][osx-badge-2.1.4XX]][osx-version-2.1.4XX]
[Installer][osx-installer-2.1.4XX] - [Checksum][osx-installer-checksum-2.1.4XX]
[tar.gz][osx-targz-2.1.4XX] - [Checksum][osx-targz-checksum-2.1.4XX] | [![][osx-badge-2.2.1XX]][osx-version-2.2.1XX]
[Installer][osx-installer-2.2.1XX] - [Checksum][osx-installer-checksum-2.2.1XX]
[tar.gz][osx-targz-2.2.1XX] - [Checksum][osx-targz-checksum-2.2.1XX] | -| **Linux x64** | [![][linux-badge-master]][linux-version-master]
[DEB Installer][linux-DEB-installer-master] - [Checksum][linux-DEB-installer-checksum-master]
[RPM Installer][linux-RPM-installer-master] - [Checksum][linux-RPM-installer-checksum-master]
_see installer note below_1
[tar.gz][linux-targz-master] - [Checksum][linux-targz-checksum-master] | [![][linux-badge-2.1.2XX]][linux-version-2.1.2XX]
[tar.gz][linux-targz-2.1.2XX] - [Checksum][linux-targz-checksum-2.1.2XX] | [![][linux-badge-2.1.401]][linux-version-2.1.401]
[DEB Installer][linux-DEB-installer-2.1.401] - [Checksum][linux-DEB-installer-checksum-2.1.401]
[RPM Installer][linux-RPM-installer-2.1.401] - [Checksum][linux-RPM-installer-checksum-2.1.401]
_see installer note below_1
[tar.gz][linux-targz-2.1.401] - [Checksum][linux-targz-checksum-2.1.401] | [![][linux-badge-2.1.4XX]][linux-version-2.1.4XX]
[DEB Installer][linux-DEB-installer-2.1.4XX] - [Checksum][linux-DEB-installer-checksum-2.1.4XX]
[RPM Installer][linux-RPM-installer-2.1.4XX] - [Checksum][linux-RPM-installer-checksum-2.1.4XX]
_see installer note below_1
[tar.gz][linux-targz-2.1.4XX] - [Checksum][linux-targz-checksum-2.1.4XX] | [![][linux-badge-2.2.1xx]][linux-version-2.2.1xx]
[DEB Installer][linux-DEB-installer-2.2.1XX] - [Checksum][linux-DEB-installer-checksum-2.2.1XX]
[RPM Installer][linux-RPM-installer-2.2.1XX] - [Checksum][linux-RPM-installer-checksum-2.2.1XX]
_see installer note below_1
[tar.gz][linux-targz-2.2.1XX] - [Checksum][linux-targz-checksum-2.2.1XX] | -| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]
[tar.gz][linux-arm-targz-master] - [Checksum][linux-arm-targz-checksum-master] | N/A | [![][linux-arm-badge-2.1.401]][linux-arm-version-2.1.401]
[tar.gz][linux-arm-targz-2.1.401] - [Checksum][linux-arm-targz-checksum-2.1.401] | [![][linux-arm-badge-2.1.4XX]][linux-arm-version-2.1.4XX]
[tar.gz][linux-arm-targz-2.1.4XX] - [Checksum][linux-arm-targz-checksum-2.1.4XX] | [![][linux-arm-badge-2.2.1XX]][linux-arm-version-2.2.1XX]
[tar.gz][linux-arm-targz-2.2.1XX] - [Checksum][linux-arm-targz-checksum-2.2.1XX] | -| **Linux arm64** | [![][linux-arm64-badge-master]][linux-arm64-version-master]
[tar.gz][linux-arm64-targz-master] - [Checksum][linux-arm64-targz-checksum-master] | N/A | [![][linux-arm64-badge-2.1.401]][linux-arm64-version-2.1.401]
[tar.gz][linux-arm64-targz-2.1.401] - [Checksum][linux-arm64-targz-checksum-2.1.401] | [![][linux-arm64-badge-2.1.4XX]][linux-arm64-version-2.1.4XX]
[tar.gz][linux-arm64-targz-2.1.4XX] - [Checksum][linux-arm64-targz-checksum-2.1.4XX] | [![][linux-arm64-badge-2.2.1XX]][linux-arm64-version-2.2.1XX]
[tar.gz][linux-arm64-targz-2.2.1XX] - [Checksum][linux-arm64-targz-checksum-2.2.1XX] | -| **RHEL 6** | [![][rhel-6-badge-master]][rhel-6-version-master]
[tar.gz][rhel-6-targz-master] - [Checksum][rhel-6-targz-checksum-master] | N/A | [![][rhel-6-badge-2.1.401]][rhel-6-version-2.1.401]
[tar.gz][rhel-6-targz-2.1.401] - [Checksum][rhel-6-targz-checksum-2.1.401] | [![][rhel-6-badge-2.1.4XX]][rhel-6-version-2.1.4XX]
[tar.gz][rhel-6-targz-2.1.4XX] - [Checksum][rhel-6-targz-checksum-2.1.4XX] | [![][rhel-6-badge-2.2.1XX]][rhel-6-version-2.2.1XX]
[tar.gz][rhel-6-targz-2.2.1XX] - [Checksum][rhel-6-targz-checksum-2.2.1XX] | -| **Linux-musl** | [![][linux-musl-badge-master]][linux-musl-version-master]
[tar.gz][linux-musl-targz-master] - [Checksum][linux-musl-targz-checksum-master] | N/A | [![][linux-musl-badge-2.1.401]][linux-musl-version-2.1.401]
[tar.gz][linux-musl-targz-2.1.401] - [Checksum][linux-musl-targz-checksum-2.1.401] | [![][linux-musl-badge-2.1.4XX]][linux-musl-version-2.1.4XX]
[tar.gz][linux-musl-targz-2.1.4XX] - [Checksum][linux-musl-targz-checksum-2.1.4XX] | [![][linux-musl-badge-2.2.1XX]][linux-musl-version-2.2.1XX]
[tar.gz][linux-musl-targz-2.2.1XX] - [Checksum][linux-musl-targz-checksum-2.2.1XX] | -| **Windows arm** | [![][win-arm-badge-master]][win-arm-version-master]
[zip][win-arm-zip-master] - [Checksum][win-arm-zip-checksum-master] | N/A | N/A | N/A | [![][win-arm-badge-2.2.1XX]][win-arm-version-2.2.1XX]
[zip][win-arm-zip-2.2.1XX] - [Checksum][win-arm-zip-checksum-2.2.1XX] | -| **Package Feed** | [Feed Link][feed-location-master] | [Feed Link][feed-location-2.1.2XX] | [Feed Link][feed-location-2.1.401] | [Feed Link][feed-location-2.1.4XX] | [Feed Link][feed-location-2.2.1XX] | -| **Constituent Repo Shas** | **N/A** | **N/A** | [Git SHAs][sdk-shas-2.1.401] | **N/A** | [Git SHAs][sdk-shas-2.2.1XX] | +| **Windows x64** | [![][win-x64-badge-master]][win-x64-version-master]
[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]
[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-2.2.2XX]][win-x64-version-2.2.2XX]
[Installer][win-x64-installer-2.2.2XX] - [Checksum][win-x64-installer-checksum-2.2.2XX]
[zip][win-x64-zip-2.2.2XX] - [Checksum][win-x64-zip-checksum-2.2.2XX] |[![][win-x64-badge-2.2.1XX]][win-x64-version-2.2.1XX]
[Installer][win-x64-installer-2.2.1XX] - [Checksum][win-x64-installer-checksum-2.2.1XX]
[zip][win-x64-zip-2.2.1XX] - [Checksum][win-x64-zip-checksum-2.2.1XX] |[![][win-x64-badge-2.1.6XX]][win-x64-version-2.1.6XX]
[Installer][win-x64-installer-2.1.6XX] - [Checksum][win-x64-installer-checksum-2.1.6XX]
[zip][win-x64-zip-2.1.6XX] - [Checksum][win-x64-zip-checksum-2.1.6XX] | [![][win-x64-badge-2.1.5XX]][win-x64-version-2.1.5XX]
[Installer][win-x64-installer-2.1.5XX] - [Checksum][win-x64-installer-checksum-2.1.5XX]
[zip][win-x64-zip-2.1.5XX] - [Checksum][win-x64-zip-checksum-2.1.5XX] | +| **Windows x86** | [![][win-x86-badge-master]][win-x86-version-master]
[Installer][win-x86-installer-master] - [Checksum][win-x86-installer-checksum-master]
[zip][win-x86-zip-master] - [Checksum][win-x86-zip-checksum-master] | [![][win-x86-badge-2.2.2XX]][win-x86-version-2.2.2XX]
[Installer][win-x86-installer-2.2.2XX] - [Checksum][win-x86-installer-checksum-2.2.2XX]
[zip][win-x86-zip-2.2.2XX] - [Checksum][win-x86-zip-checksum-2.2.2XX] |[![][win-x86-badge-2.2.1XX]][win-x86-version-2.2.1XX]
[Installer][win-x86-installer-2.2.1XX] - [Checksum][win-x86-installer-checksum-2.2.1XX]
[zip][win-x86-zip-2.2.1XX] - [Checksum][win-x86-zip-checksum-2.2.1XX] |[![][win-x86-badge-2.1.6XX]][win-x86-version-2.1.6XX]
[Installer][win-x86-installer-2.1.6XX] - [Checksum][win-x86-installer-checksum-2.1.6XX]
[zip][win-x86-zip-2.1.6XX] - [Checksum][win-x86-zip-checksum-2.1.6XX] | [![][win-x86-badge-2.1.5XX]][win-x86-version-2.1.5XX]
[Installer][win-x86-installer-2.1.5XX] - [Checksum][win-x86-installer-checksum-2.1.5XX]
[zip][win-x86-zip-2.1.5XX] - [Checksum][win-x86-zip-checksum-2.1.5XX] | +| **macOS** | [![][osx-badge-master]][osx-version-master]
[Installer][osx-installer-master] - [Checksum][osx-installer-checksum-master]
[tar.gz][osx-targz-master] - [Checksum][osx-targz-checksum-master] | [![][osx-badge-2.2.2XX]][osx-version-2.2.2XX]
[Installer][osx-installer-2.2.2XX] - [Checksum][osx-installer-checksum-2.2.2XX]
[tar.gz][osx-targz-2.2.2XX] - [Checksum][osx-targz-checksum-2.2.2XX] |[![][osx-badge-2.2.1XX]][osx-version-2.2.1XX]
[Installer][osx-installer-2.2.1XX] - [Checksum][osx-installer-checksum-2.2.1XX]
[tar.gz][osx-targz-2.2.1XX] - [Checksum][osx-targz-checksum-2.2.1XX] |[![][osx-badge-2.1.6XX]][osx-version-2.1.6XX]
[Installer][osx-installer-2.1.6XX] - [Checksum][osx-installer-checksum-2.1.6XX]
[tar.gz][osx-targz-2.1.6XX] - [Checksum][osx-targz-checksum-2.1.6XX] | [![][osx-badge-2.1.5XX]][osx-version-2.1.5XX]
[Installer][osx-installer-2.1.5XX] - [Checksum][osx-installer-checksum-2.1.5XX]
[tar.gz][osx-targz-2.1.5XX] - [Checksum][osx-targz-checksum-2.1.5XX] | +| **Linux x64** | [![][linux-badge-master]][linux-version-master]
[DEB Installer][linux-DEB-installer-master] - [Checksum][linux-DEB-installer-checksum-master]
[RPM Installer][linux-RPM-installer-master] - [Checksum][linux-RPM-installer-checksum-master]
_see installer note below_1
[tar.gz][linux-targz-master] - [Checksum][linux-targz-checksum-master] | [![][linux-badge-2.2.2xx]][linux-version-2.2.2xx]
[DEB Installer][linux-DEB-installer-2.2.2XX] - [Checksum][linux-DEB-installer-checksum-2.2.2XX]
[RPM Installer][linux-RPM-installer-2.2.2XX] - [Checksum][linux-RPM-installer-checksum-2.2.2XX]
_see installer note below_1
[tar.gz][linux-targz-2.2.2XX] - [Checksum][linux-targz-checksum-2.2.2XX] |[![][linux-badge-2.2.1xx]][linux-version-2.2.1xx]
[DEB Installer][linux-DEB-installer-2.2.1XX] - [Checksum][linux-DEB-installer-checksum-2.2.1XX]
[RPM Installer][linux-RPM-installer-2.2.1XX] - [Checksum][linux-RPM-installer-checksum-2.2.1XX]
_see installer note below_1
[tar.gz][linux-targz-2.2.1XX] - [Checksum][linux-targz-checksum-2.2.1XX] |[![][linux-badge-2.1.6XX]][linux-version-2.1.6XX]
[DEB Installer][linux-DEB-installer-2.1.6XX] - [Checksum][linux-DEB-installer-checksum-2.1.6XX]
[RPM Installer][linux-RPM-installer-2.1.6XX] - [Checksum][linux-RPM-installer-checksum-2.1.6XX]
_see installer note below_1
[tar.gz][linux-targz-2.1.6XX] - [Checksum][linux-targz-checksum-2.1.6XX] | [![][linux-badge-2.1.5XX]][linux-version-2.1.5XX]
[DEB Installer][linux-DEB-installer-2.1.5XX] - [Checksum][linux-DEB-installer-checksum-2.1.5XX]
[RPM Installer][linux-RPM-installer-2.1.5XX] - [Checksum][linux-RPM-installer-checksum-2.1.5XX]
_see installer note below_1
[tar.gz][linux-targz-2.1.5XX] - [Checksum][linux-targz-checksum-2.1.5XX] | +| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]
[tar.gz][linux-arm-targz-master] - [Checksum][linux-arm-targz-checksum-master] | [![][linux-arm-badge-2.2.2XX]][linux-arm-version-2.2.2XX]
[tar.gz][linux-arm-targz-2.2.2XX] - [Checksum][linux-arm-targz-checksum-2.2.2XX] |[![][linux-arm-badge-2.2.1XX]][linux-arm-version-2.2.1XX]
[tar.gz][linux-arm-targz-2.2.1XX] - [Checksum][linux-arm-targz-checksum-2.2.1XX] |[![][linux-arm-badge-2.1.6XX]][linux-arm-version-2.1.6XX]
[tar.gz][linux-arm-targz-2.1.6XX] - [Checksum][linux-arm-targz-checksum-2.1.6XX] | [![][linux-arm-badge-2.1.5XX]][linux-arm-version-2.1.5XX]
[tar.gz][linux-arm-targz-2.1.5XX] - [Checksum][linux-arm-targz-checksum-2.1.5XX] | +| **Linux arm64** | [![][linux-arm64-badge-master]][linux-arm64-version-master]
[tar.gz][linux-arm64-targz-master] - [Checksum][linux-arm64-targz-checksum-master] | [![][linux-arm64-badge-2.2.2XX]][linux-arm64-version-2.2.2XX]
[tar.gz][linux-arm64-targz-2.2.2XX] - [Checksum][linux-arm64-targz-checksum-2.2.2XX] |[![][linux-arm64-badge-2.2.1XX]][linux-arm64-version-2.2.1XX]
[tar.gz][linux-arm64-targz-2.2.1XX] - [Checksum][linux-arm64-targz-checksum-2.2.1XX] |[![][linux-arm64-badge-2.1.6XX]][linux-arm64-version-2.1.6XX]
[tar.gz][linux-arm64-targz-2.1.6XX] - [Checksum][linux-arm64-targz-checksum-2.1.6XX] | [![][linux-arm64-badge-2.1.5XX]][linux-arm64-version-2.1.5XX]
[tar.gz][linux-arm64-targz-2.1.5XX] - [Checksum][linux-arm64-targz-checksum-2.1.5XX] | +| **RHEL 6** | [![][rhel-6-badge-master]][rhel-6-version-master]
[tar.gz][rhel-6-targz-master] - [Checksum][rhel-6-targz-checksum-master] | [![][rhel-6-badge-2.2.2XX]][rhel-6-version-2.2.2XX]
[tar.gz][rhel-6-targz-2.2.2XX] - [Checksum][rhel-6-targz-checksum-2.2.2XX] | [![][rhel-6-badge-2.2.1XX]][rhel-6-version-2.2.1XX]
[tar.gz][rhel-6-targz-2.2.1XX] - [Checksum][rhel-6-targz-checksum-2.2.1XX] | [![][rhel-6-badge-2.1.6XX]][rhel-6-version-2.1.6XX]
[tar.gz][rhel-6-targz-2.1.6XX] - [Checksum][rhel-6-targz-checksum-2.1.6XX] | [![][rhel-6-badge-2.1.5XX]][rhel-6-version-2.1.5XX]
[tar.gz][rhel-6-targz-2.1.5XX] - [Checksum][rhel-6-targz-checksum-2.1.5XX] | +| **Linux-musl** | [![][linux-musl-badge-master]][linux-musl-version-master]
[tar.gz][linux-musl-targz-master] - [Checksum][linux-musl-targz-checksum-master] | [![][linux-musl-badge-2.2.2XX]][linux-musl-version-2.2.2XX]
[tar.gz][linux-musl-targz-2.2.2XX] - [Checksum][linux-musl-targz-checksum-2.2.2XX] |[![][linux-musl-badge-2.2.1XX]][linux-musl-version-2.2.1XX]
[tar.gz][linux-musl-targz-2.2.1XX] - [Checksum][linux-musl-targz-checksum-2.2.1XX] |[![][linux-musl-badge-2.1.6XX]][linux-musl-version-2.1.6XX]
[tar.gz][linux-musl-targz-2.1.6XX] - [Checksum][linux-musl-targz-checksum-2.1.6XX] | [![][linux-musl-badge-2.1.5XX]][linux-musl-version-2.1.5XX]
[tar.gz][linux-musl-targz-2.1.5XX] - [Checksum][linux-musl-targz-checksum-2.1.5XX] | +| **Windows arm** | [![][win-arm-badge-master]][win-arm-version-master]
[zip][win-arm-zip-master] - [Checksum][win-arm-zip-checksum-master] | [![][win-arm-badge-2.2.2XX]][win-arm-version-2.2.2XX]
[zip][win-arm-zip-2.2.2XX] - [Checksum][win-arm-zip-checksum-2.2.2XX] | [![][win-arm-badge-2.2.1XX]][win-arm-version-2.2.1XX]
[zip][win-arm-zip-2.2.1XX] - [Checksum][win-arm-zip-checksum-2.2.1XX] | **N/A** | **N/A** | +| **FreeBSD x64** | [![][freebsd-x64-badge-master]][freebsd-x64-version-master]
[tar.gz][freebsd-x64-zip-master] - [Checksum][freebsd-x64-zip-checksum-master] | **N/A** | **N/A** | **N/A** | **N/A** | +| **Package Feed** | [Feed Link][feed-location-master] | [Feed Link][feed-location-2.2.2XX] | [Feed Link][feed-location-2.2.1XX] | [Feed Link][feed-location-2.1.6XX] | [Feed Link][feed-location-2.1.5XX] | +| **Constituent Repo Shas** | **N/A** | [Git SHAs][sdk-shas-2.2.1XX] | **N/A** | **N/A** | **N/A** | Latest Coherent Build2 -| Master | Release/2.1.2XX | Release/2.1.401 | Release/2.1.4XX | Release/2.2.1XX | +| Master | Release/2.2.2XX | Release/2.2.1XX | Release/2.1.6XX | Release/2.1.5XX | |:----------:|:----------:|:----------:|:----------:|:----------:| -| [![][coherent-version-badge-master]][coherent-version-master] | [![][coherent-version-badge-2.1.2XX]][coherent-version-2.1.2XX] | [![][coherent-version-badge-2.1.401]][coherent-version-2.1.401] | [![][coherent-version-badge-2.1.4XX]][coherent-version-2.1.4XX] | [![][coherent-version-badge-2.2.1XX]][coherent-version-2.2.1XX] | +| [![][coherent-version-badge-master]][coherent-version-master] | [![][coherent-version-badge-2.2.2XX]][coherent-version-2.2.2XX] | [![][coherent-version-badge-2.2.1XX]][coherent-version-2.2.1XX] | [![][coherent-version-badge-2.1.6XX]][coherent-version-2.1.6XX] | **N/A** | Reference notes: > **1**: Our Debian packages are put together slightly differently than the other OS specific installers. Instead of combining everything, we have separate component packages that depend on each other. If you're installing the SDK from the .deb file (via dpkg or similar), then you'll need to install the corresponding dependencies first: @@ -100,26 +105,12 @@ Reference notes: [win-x64-zip-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x64.zip [win-x64-zip-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x64.zip.sha -[win-x64-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/win_x64_Release_version_badge.svg -[win-x64-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[win-x64-installer-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x64.exe -[win-x64-installer-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x64.exe.sha -[win-x64-zip-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x64.zip -[win-x64-zip-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x64.zip.sha - -[win-x64-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/win_x64_Release_version_badge.svg -[win-x64-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[win-x64-installer-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x64.exe -[win-x64-installer-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x64.exe.sha -[win-x64-zip-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x64.zip -[win-x64-zip-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x64.zip.sha - -[win-x64-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/win_x64_Release_version_badge.svg -[win-x64-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[win-x64-installer-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x64.exe -[win-x64-installer-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x64.exe.sha -[win-x64-zip-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x64.zip -[win-x64-zip-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x64.zip.sha +[win-x64-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/win_x64_Release_version_badge.svg +[win-x64-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[win-x64-installer-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x64.exe +[win-x64-installer-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x64.exe.sha +[win-x64-zip-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x64.zip +[win-x64-zip-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x64.zip.sha [win-x64-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/win_x64_Release_version_badge.svg [win-x64-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version @@ -128,6 +119,20 @@ Reference notes: [win-x64-zip-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-x64.zip [win-x64-zip-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-x64.zip.sha +[win-x64-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/win_x64_Release_version_badge.svg +[win-x64-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[win-x64-installer-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x64.exe +[win-x64-installer-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x64.exe.sha +[win-x64-zip-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x64.zip +[win-x64-zip-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x64.zip.sha + +[win-x64-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/win_x64_Release_version_badge.svg +[win-x64-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[win-x64-installer-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x64.exe +[win-x64-installer-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x64.exe.sha +[win-x64-zip-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x64.zip +[win-x64-zip-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x64.zip.sha + [win-x86-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/win_x86_Release_version_badge.svg [win-x86-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [win-x86-installer-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x86.exe @@ -135,26 +140,12 @@ Reference notes: [win-x86-zip-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x86.zip [win-x86-zip-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x86.zip.sha -[win-x86-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/win_x86_Release_version_badge.svg -[win-x86-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[win-x86-installer-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x86.exe -[win-x86-installer-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x86.exe.sha -[win-x86-zip-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x86.zip -[win-x86-zip-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-win-x86.zip.sha - -[win-x86-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/win_x86_Release_version_badge.svg -[win-x86-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[win-x86-installer-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x86.exe -[win-x86-installer-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x86.exe.sha -[win-x86-zip-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x86.zip -[win-x86-zip-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-win-x86.zip.sha - -[win-x86-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/win_x86_Release_version_badge.svg -[win-x86-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[win-x86-installer-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x86.exe -[win-x86-installer-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x86.exe.sha -[win-x86-zip-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x86.zip -[win-x86-zip-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-win-x86.zip.sha +[win-x86-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/win_x86_Release_version_badge.svg +[win-x86-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[win-x86-installer-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x86.exe +[win-x86-installer-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x86.exe.sha +[win-x86-zip-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x86.zip +[win-x86-zip-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-x86.zip.sha [win-x86-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/win_x86_Release_version_badge.svg [win-x86-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version @@ -163,6 +154,20 @@ Reference notes: [win-x86-zip-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-x86.zip [win-x86-zip-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-x86.zip.sha +[win-x86-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/win_x86_Release_version_badge.svg +[win-x86-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[win-x86-installer-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x86.exe +[win-x86-installer-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x86.exe.sha +[win-x86-zip-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x86.zip +[win-x86-zip-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-win-x86.zip.sha + +[win-x86-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/win_x86_Release_version_badge.svg +[win-x86-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[win-x86-installer-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x86.exe +[win-x86-installer-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x86.exe.sha +[win-x86-zip-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x86.zip +[win-x86-zip-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-win-x86.zip.sha + [osx-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/osx_x64_Release_version_badge.svg [osx-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [osx-installer-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-osx-x64.pkg @@ -170,26 +175,12 @@ Reference notes: [osx-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-osx-x64.tar.gz [osx-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-osx-x64.tar.gz.sha -[osx-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/osx_x64_Release_version_badge.svg -[osx-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[osx-installer-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-osx-x64.pkg -[osx-installer-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-osx-x64.pkg.sha -[osx-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-osx-x64.tar.gz -[osx-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-osx-x64.tar.gz.sha - -[osx-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/osx_x64_Release_version_badge.svg -[osx-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[osx-installer-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-osx-x64.pkg -[osx-installer-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-osx-x64.pkg.sha -[osx-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-osx-x64.tar.gz -[osx-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-osx-x64.tar.gz.sha - -[osx-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/osx_x64_Release_version_badge.svg -[osx-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[osx-installer-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-osx-x64.pkg -[osx-installer-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-osx-x64.pkg.sha -[osx-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-osx-x64.tar.gz -[osx-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-osx-x64.tar.gz.sha +[osx-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/osx_x64_Release_version_badge.svg +[osx-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[osx-installer-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-osx-x64.pkg +[osx-installer-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-osx-x64.pkg.sha +[osx-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-osx-x64.tar.gz +[osx-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-osx-x64.tar.gz.sha [osx-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/osx_x64_Release_version_badge.svg [osx-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version @@ -198,6 +189,20 @@ Reference notes: [osx-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-osx-x64.tar.gz [osx-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-osx-x64.tar.gz.sha +[osx-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/osx_x64_Release_version_badge.svg +[osx-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[osx-installer-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-osx-x64.pkg +[osx-installer-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-osx-x64.pkg.sha +[osx-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-osx-x64.tar.gz +[osx-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-osx-x64.tar.gz.sha + +[osx-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/osx_x64_Release_version_badge.svg +[osx-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[osx-installer-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-osx-x64.pkg +[osx-installer-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-osx-x64.pkg.sha +[osx-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-osx-x64.tar.gz +[osx-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-osx-x64.tar.gz.sha + [linux-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/linux_x64_Release_version_badge.svg [linux-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [linux-DEB-installer-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-x64.deb @@ -207,28 +212,14 @@ Reference notes: [linux-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-x64.tar.gz [linux-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-x64.tar.gz.sha -[linux-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/linux_x64_Release_version_badge.svg -[linux-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[linux-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-x64.tar.gz -[linux-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-x64.tar.gz.sha - -[linux-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/linux_x64_Release_version_badge.svg -[linux-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[linux-DEB-installer-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-x64.deb -[linux-DEB-installer-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-x64.deb.sha -[linux-RPM-installer-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-x64.rpm -[linux-RPM-installer-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-x64.rpm.sha -[linux-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-x64.tar.gz -[linux-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-x64.tar.gz.sha - -[linux-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/linux_x64_Release_version_badge.svg -[linux-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[linux-DEB-installer-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-x64.deb -[linux-DEB-installer-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-x64.deb.sha -[linux-RPM-installer-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-x64.rpm -[linux-RPM-installer-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-x64.rpm.sha -[linux-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-x64.tar.gz -[linux-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-x64.tar.gz.sha +[linux-badge-2.2.2xx]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/linux_x64_Release_version_badge.svg +[linux-version-2.2.2xx]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[linux-DEB-installer-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-x64.deb +[linux-DEB-installer-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-x64.deb.sha +[linux-RPM-installer-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-x64.rpm +[linux-RPM-installer-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-x64.rpm.sha +[linux-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-x64.tar.gz +[linux-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-x64.tar.gz.sha [linux-badge-2.2.1xx]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/linux_x64_Release_version_badge.svg [linux-version-2.2.1xx]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version @@ -239,144 +230,161 @@ Reference notes: [linux-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-x64.tar.gz [linux-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-x64.tar.gz.sha +[linux-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/linux_x64_Release_version_badge.svg +[linux-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[linux-DEB-installer-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-x64.deb +[linux-DEB-installer-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-x64.deb.sha +[linux-RPM-installer-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-x64.rpm +[linux-RPM-installer-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-x64.rpm.sha +[linux-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-x64.tar.gz +[linux-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-x64.tar.gz.sha + +[linux-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/linux_x64_Release_version_badge.svg +[linux-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[linux-DEB-installer-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-x64.deb +[linux-DEB-installer-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-x64.deb.sha +[linux-RPM-installer-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-x64.rpm +[linux-RPM-installer-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-x64.rpm.sha +[linux-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-x64.tar.gz +[linux-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-x64.tar.gz.sha + [linux-arm-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/linux_arm_Release_version_badge.svg [linux-arm-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [linux-arm-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-arm.tar.gz [linux-arm-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-arm.tar.gz.sha -[linux-arm-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/linux_arm_Release_version_badge.svg -[linux-arm-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[linux-arm-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-arm.tar.gz -[linux-arm-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-arm.tar.gz.sha - -[linux-arm-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/linux_arm_Release_version_badge.svg -[linux-arm-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[linux-arm-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-arm.tar.gz -[linux-arm-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-arm.tar.gz.sha - -[linux-arm-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/linux_arm_Release_version_badge.svg -[linux-arm-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[linux-arm-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-arm.tar.gz -[linux-arm-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-arm.tar.gz.sha +[linux-arm-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/linux_arm_Release_version_badge.svg +[linux-arm-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[linux-arm-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-arm.tar.gz +[linux-arm-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-arm.tar.gz.sha [linux-arm-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/linux_arm_Release_version_badge.svg [linux-arm-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version [linux-arm-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-arm.tar.gz [linux-arm-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-arm.tar.gz.sha +[linux-arm-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/linux_arm_Release_version_badge.svg +[linux-arm-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[linux-arm-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-arm.tar.gz +[linux-arm-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-arm.tar.gz.sha + +[linux-arm-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/linux_arm_Release_version_badge.svg +[linux-arm-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[linux-arm-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-arm.tar.gz +[linux-arm-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-arm.tar.gz.sha + [linux-arm64-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/linux_arm64_Release_version_badge.svg [linux-arm64-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [linux-arm64-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-arm64.tar.gz [linux-arm64-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-arm64.tar.gz.sha -[linux-arm64-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/linux_arm64_Release_version_badge.svg -[linux-arm64-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[linux-arm64-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-arm64.tar.gz -[linux-arm64-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha - -[linux-arm64-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/linux_arm64_Release_version_badge.svg -[linux-arm64-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[linux-arm64-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-arm64.tar.gz -[linux-arm64-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-arm64.tar.gz.sha - -[linux-arm64-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/linux_arm64_Release_version_badge.svg -[linux-arm64-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[linux-arm64-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-arm64.tar.gz -[linux-arm64-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha +[linux-arm64-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/linux_arm64_Release_version_badge.svg +[linux-arm64-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[linux-arm64-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-arm64.tar.gz +[linux-arm64-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha [linux-arm64-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/linux_arm64_Release_version_badge.svg [linux-arm64-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version [linux-arm64-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-arm64.tar.gz [linux-arm64-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha +[linux-arm64-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/linux_arm64_Release_version_badge.svg +[linux-arm64-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[linux-arm64-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-arm64.tar.gz +[linux-arm64-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha + +[linux-arm64-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/linux_arm64_Release_version_badge.svg +[linux-arm64-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[linux-arm64-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-arm64.tar.gz +[linux-arm64-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha + [rhel-6-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/rhel.6_x64_Release_version_badge.svg [rhel-6-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [rhel-6-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-rhel.6-x64.tar.gz [rhel-6-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha -[rhel-6-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/rhel.6_x64_Release_version_badge.svg -[rhel-6-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[rhel-6-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-rhel.6-x64.tar.gz -[rhel-6-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha - -[rhel-6-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/rhel.6_x64_Release_version_badge.svg -[rhel-6-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[rhel-6-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-rhel.6-x64.tar.gz -[rhel-6-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha - -[rhel-6-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/rhel.6_x64_Release_version_badge.svg -[rhel-6-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[rhel-6-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-rhel.6-x64.tar.gz -[rhel-6-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha +[rhel-6-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/rhel.6_x64_Release_version_badge.svg +[rhel-6-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[rhel-6-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-rhel.6-x64.tar.gz +[rhel-6-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha [rhel-6-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/rhel.6_x64_Release_version_badge.svg [rhel-6-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version [rhel-6-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-rhel.6-x64.tar.gz [rhel-6-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha +[rhel-6-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/rhel.6_x64_Release_version_badge.svg +[rhel-6-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[rhel-6-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-rhel.6-x64.tar.gz +[rhel-6-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha + +[rhel-6-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/rhel.6_x64_Release_version_badge.svg +[rhel-6-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[rhel-6-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-rhel.6-x64.tar.gz +[rhel-6-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha + [linux-musl-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/linux_musl_x64_Release_version_badge.svg [linux-musl-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [linux-musl-targz-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-musl-x64.tar.gz [linux-musl-targz-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha -[linux-musl-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/linux_musl_Release_x64_version_badge.svg -[linux-musl-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.version -[linux-musl-targz-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-musl-x64.tar.gz -[linux-musl-targz-checksum-2.1.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha - -[linux-musl-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/linux_musl_x64_Release_version_badge.svg -[linux-musl-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.version -[linux-musl-targz-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-musl-x64.tar.gz -[linux-musl-targz-checksum-2.1.401]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha - -[linux-musl-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/linux_musl_x64_Release_version_badge.svg -[linux-musl-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.version -[linux-musl-targz-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-musl-x64.tar.gz -[linux-musl-targz-checksum-2.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha +[linux-musl-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/linux_musl_x64_Release_version_badge.svg +[linux-musl-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[linux-musl-targz-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-musl-x64.tar.gz +[linux-musl-targz-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha [linux-musl-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/linux_musl_x64_Release_version_badge.svg [linux-musl-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version [linux-musl-targz-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-musl-x64.tar.gz [linux-musl-targz-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha -[win-arm-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/win_arm_x64_Release_version_badge.svg +[linux-musl-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/linux_musl_x64_Release_version_badge.svg +[linux-musl-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.version +[linux-musl-targz-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-musl-x64.tar.gz +[linux-musl-targz-checksum-2.1.6XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha + +[linux-musl-badge-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/linux_musl_x64_Release_version_badge.svg +[linux-musl-version-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/latest.version +[linux-musl-targz-2.1.5XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-musl-x64.tar.gz +[linux-musl-targz-checksum-2.1.5XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.1.5xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha + +[win-arm-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/win_arm_Release_version_badge.svg [win-arm-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version [win-arm-zip-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-arm.zip [win-arm-zip-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-arm.zip.sha -[win-arm-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/win_arm_x64_Release_version_badge.svg +[win-arm-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/win_arm_Release_version_badge.svg +[win-arm-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.version +[win-arm-zip-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-arm.zip +[win-arm-zip-checksum-2.2.2XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/dotnet-sdk-latest-win-arm.zip.sha + +[win-arm-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/win_arm_Release_version_badge.svg [win-arm-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.version [win-arm-zip-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-arm.zip [win-arm-zip-checksum-2.2.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/dotnet-sdk-latest-win-arm.zip.sha -[sdk-shas-2.1.401]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.1#built-repositories +[freebsd-x64-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/freebsd_x64_Release_version_badge.svg +[freebsd-x64-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.version +[freebsd-x64-zip-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-freebsd-x64.tar.gz +[freebsd-x64-zip-checksum-master]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-freebsd-x64.tar.gz.sha [sdk-shas-2.2.1XX]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.2#built-repositories [feed-location-master]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json - -[feed-location-2.1.2XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json - -[feed-location-2.1.401]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json - -[feed-location-2.1.4XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json - +[feed-location-2.2.2XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json [feed-location-2.2.1XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json - -[sdk-shas-2.2.1XX]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.2#built-repositories - -[sdk-shas-2.2.1XX]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.2#built-repositories +[feed-location-2.1.6XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json +[feed-location-2.1.5XX]: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json [coherent-version-badge-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/win_x64_Release_coherent_badge.svg [coherent-version-master]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/latest.coherent.version -[coherent-version-badge-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/win_x64_Release_coherent_badge.svg -[coherent-version-2.1.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.2xx/latest.coherent.version -[coherent-version-badge-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/win_x64_Release_coherent_badge.svg -[coherent-version-2.1.401]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/latest.coherent.version -[coherent-version-badge-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/win_x64_Release_coherent_badge.svg -[coherent-version-2.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.4xx/latest.coherent.version +[coherent-version-badge-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/win_x64_Release_coherent_badge.svg +[coherent-version-2.2.2XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.2xx/latest.coherent.version [coherent-version-badge-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/win_x64_Release_coherent_badge.svg [coherent-version-2.2.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.2.1xx/latest.coherent.version +[coherent-version-badge-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/win_x64_Release_coherent_badge.svg +[coherent-version-2.1.6XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.6xx/latest.coherent.version + Questions & Comments -------------------- From 59d4a7eb59512a4cbd9be182eb6a82529cf76e96 Mon Sep 17 00:00:00 2001 From: John Beisner Date: Fri, 14 Dec 2018 13:35:20 -0800 Subject: [PATCH 10/37] Include the WindowsDesktop sharedframework in install 'Finish' page. (#208) --- build/package/Installer.MSI.targets | 1 + packaging/windows/clisdk/bundle.wxl | 1 + packaging/windows/clisdk/bundle.wxs | 1 + packaging/windows/clisdk/generatebundle.ps1 | 2 ++ 4 files changed, 5 insertions(+) diff --git a/build/package/Installer.MSI.targets b/build/package/Installer.MSI.targets index 2ea419296..92c559489 100644 --- a/build/package/Installer.MSI.targets +++ b/build/package/Installer.MSI.targets @@ -161,6 +161,7 @@ '$(MsiVersion)' ^ '$(SimpleVersion)' ^ '$(NugetVersion)' ^ + '$(MicrosoftWindowsDesktopPackageVersion)' ^ '$(CombinedFrameworkSDKHostInstallerUpgradeCode)' ^ '$(Architecture)' ^ '$(MicrosoftNETCoreAppPackageVersion)' ^ diff --git a/packaging/windows/clisdk/bundle.wxl b/packaging/windows/clisdk/bundle.wxl index 5919fc5c7..f05221996 100644 --- a/packaging/windows/clisdk/bundle.wxl +++ b/packaging/windows/clisdk/bundle.wxl @@ -53,6 +53,7 @@ The following were installed at: '[DOTNETHOME]' • .NET Core SDK [DOTNETSDKVERSION] • .NET Core Runtime [DOTNETRUNTIMEVERSION] • ASP.NET Core Runtime [ASPNETCOREVERSION] + • .NET Core Windows Desktop Runtime [WINFORMSANDWPFVERSION] This product collects usage data • More information and opt-out https://aka.ms/dotnet-cli-telemetry diff --git a/packaging/windows/clisdk/bundle.wxs b/packaging/windows/clisdk/bundle.wxs index b1bd6fdde..8ce12580b 100644 --- a/packaging/windows/clisdk/bundle.wxs +++ b/packaging/windows/clisdk/bundle.wxs @@ -94,6 +94,7 @@ + diff --git a/packaging/windows/clisdk/generatebundle.ps1 b/packaging/windows/clisdk/generatebundle.ps1 index 27b1b062a..6e574d13a 100644 --- a/packaging/windows/clisdk/generatebundle.ps1 +++ b/packaging/windows/clisdk/generatebundle.ps1 @@ -14,6 +14,7 @@ param( [Parameter(Mandatory=$true)][string]$DotnetMSIVersion, [Parameter(Mandatory=$true)][string]$DotnetCLIDisplayVersion, [Parameter(Mandatory=$true)][string]$DotnetCLINugetVersion, + [Parameter(Mandatory=$true)][string]$WindowsDesktopVersion, [Parameter(Mandatory=$true)][string]$UpgradeCode, [Parameter(Mandatory=$true)][string]$Architecture, [Parameter(Mandatory=$true)][string]$DotNetRuntimeVersion, @@ -44,6 +45,7 @@ function RunCandleForBundle -dHostFXRMsiSourcePath="$HostFxrMSIFile" ` -dSharedHostMsiSourcePath="$SharedHostMSIFile" ` -dWinFormsAndWpfMsiSourcePath="$WinFormsAndWpfMSIFile" ` + -dWinFormsAndWpfVersion="$WindowsDesktopVersion" ` -dAdditionalSharedFXMsiSourcePath="$AdditionalSharedFxMSIFile" ` -dAdditionalHostFXRMsiSourcePath="$AdditionalHostFxrMSIFile" ` -dAdditionalSharedHostMsiSourcePath="$AdditionalSharedHostMSIFile" ` From 5d8e678ef14ae5b6d1e2eb3455587bcf832e3b72 Mon Sep 17 00:00:00 2001 From: Adam Yoblick Date: Fri, 14 Dec 2018 16:23:02 -0600 Subject: [PATCH 11/37] Update DependencyVersions.props --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 1d315a0fb..d093d5b10 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -41,7 +41,7 @@ $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftAspNetCoreAppPackageVersion) - 3.0.0-alpha-27214-5 + 3.0.0-alpha-27214-12 $(MicrosoftWindowsDesktopPackageVersion) $(MicrosoftWindowsDesktopPackageVersion) From e1e6c25c1b68f5ff4e39e5501560f2fd4024ff89 Mon Sep 17 00:00:00 2001 From: Tomas Weinfurt Date: Fri, 14 Dec 2018 20:08:38 -0800 Subject: [PATCH 12/37] make GivenDotnetUsesDotnetTools test optional based on AspNetCore availability (#207) --- test/EndToEnd/GivenDotnetUsesDotnetTools.cs | 2 +- .../RepoDirectoriesProvider.cs | 8 ++++++++ .../RequiresAspNetCore.cs | 20 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs diff --git a/test/EndToEnd/GivenDotnetUsesDotnetTools.cs b/test/EndToEnd/GivenDotnetUsesDotnetTools.cs index c9b46d6a9..3e32c4a45 100644 --- a/test/EndToEnd/GivenDotnetUsesDotnetTools.cs +++ b/test/EndToEnd/GivenDotnetUsesDotnetTools.cs @@ -6,7 +6,7 @@ namespace EndToEnd { public class GivenDotnetUsesDotnetTools : TestBase { - [Fact] + [RequiresAspNetCore] public void ThenOneDotnetToolsCanBeCalled() { new DotnetCommand() diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/RepoDirectoriesProvider.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/RepoDirectoriesProvider.cs index de2af4896..96fba749a 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/RepoDirectoriesProvider.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/RepoDirectoriesProvider.cs @@ -19,6 +19,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities private string _builtDotnet; private string _nugetPackages; private string _stage2Sdk; + private string _stage2AspNetCore; private string _stage2WithBackwardsCompatibleRuntimesDirectory; private string _testPackages; private string _testWorkingFolder; @@ -90,6 +91,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities public string DotnetRoot => _dotnetRoot; public string NugetPackages => _nugetPackages; public string Stage2Sdk => _stage2Sdk; + public string Stage2AspNetCore => _stage2AspNetCore; public string Stage2WithBackwardsCompatibleRuntimesDirectory => _stage2WithBackwardsCompatibleRuntimesDirectory; public string TestPackages => _testPackages; public string TestWorkingFolder => _testWorkingFolder; @@ -116,6 +118,12 @@ namespace Microsoft.DotNet.Tools.Test.Utilities .EnumerateDirectories(Path.Combine(_artifacts, "dotnet", "sdk")) .First(d => !d.Contains("NuGetFallbackFolder")); + string AspNetCoreDir = Path.Combine(_dotnetRoot, "shared", "Microsoft.AspNetCore.App"); + if (Directory.Exists(AspNetCoreDir)) + { + _stage2AspNetCore = Directory.EnumerateDirectories(AspNetCoreDir).First(); + } + _stage2WithBackwardsCompatibleRuntimesDirectory = Path.Combine(_artifacts, "dotnetWithBackwardsCompatibleRuntimes"); diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs new file mode 100644 index 000000000..e55474843 --- /dev/null +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs @@ -0,0 +1,20 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Xunit; + +namespace Microsoft.DotNet.Tools.Test.Utilities +{ + public class RequiresAspNetCore : FactAttribute + { + public RequiresAspNetCore() + { + var repoDirectoriesProvider = new RepoDirectoriesProvider(); + + if (repoDirectoriesProvider.Stage2AspNetCore == null) + { + this.Skip = $"This test requires a AspNetCore but it isn't present."; + } + } + } +} From ee9fe44627b8980021fa5e9a34b340247bd86d05 Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Sun, 16 Dec 2018 14:10:02 -0800 Subject: [PATCH 13/37] Update coresetup to preview-27216-02 (#211) --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index d093d5b10..6e98f56be 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27214-02 + 3.0.0-preview-27216-02 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index f871fdd4e..c9ffb7f6e 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27214-02 + 3.0.0-preview-27216-02 1.3.1
From 6b21aa23147d0d6df09263128b921e7abe434511 Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Mon, 17 Dec 2018 07:22:14 +0000 Subject: [PATCH 14/37] Update coresetup to preview-27217-01 --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 6e98f56be..c4bd6b766 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27216-02 + 3.0.0-preview-27217-01 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index c9ffb7f6e..9451b5a38 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27216-02 + 3.0.0-preview-27217-01 1.3.1 From 29e8d98a6b081cdc0d3f457f020e20abdc792162 Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Mon, 17 Dec 2018 19:25:37 -0800 Subject: [PATCH 15/37] Update coresetup to preview-27217-02 (#214) --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index c4bd6b766..0d062fc40 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27217-01 + 3.0.0-preview-27217-02 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index 9451b5a38..3089b14f9 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27217-01 + 3.0.0-preview-27217-02 1.3.1 From fb3c29390a1d269783e4899ac651a5ab79a52ca6 Mon Sep 17 00:00:00 2001 From: Zachary Danz Date: Mon, 17 Dec 2018 21:30:53 -0800 Subject: [PATCH 16/37] Update WindowsDesktop Framework (#215) --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 0d062fc40..13dba748a 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -41,7 +41,7 @@ $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftNETCoreAppPackageVersion) $(MicrosoftAspNetCoreAppPackageVersion) - 3.0.0-alpha-27214-12 + 3.0.0-alpha-27218-3 $(MicrosoftWindowsDesktopPackageVersion) $(MicrosoftWindowsDesktopPackageVersion) From fa073dacc44aa36d7a57619a3627efc59f6910fb Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Tue, 18 Dec 2018 07:38:24 -0800 Subject: [PATCH 17/37] Update coresetup to preview-27218-01 (#216) --- build/DependencyVersions.props | 2 +- build/TestDependencyVersions.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 13dba748a..554573e49 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -20,7 +20,7 @@ - 3.0.0-preview-27217-02 + 3.0.0-preview-27218-01 $(MicrosoftNETCoreAppPackageVersion) diff --git a/build/TestDependencyVersions.props b/build/TestDependencyVersions.props index 3089b14f9..e69853514 100644 --- a/build/TestDependencyVersions.props +++ b/build/TestDependencyVersions.props @@ -4,7 +4,7 @@ 3.0.100-preview.18580.6 0.1.1 15.8.0 - 3.0.0-preview-27217-02 + 3.0.0-preview-27218-01 1.3.1 From 584467965aca2dc257b03c32396d16c42d18c98d Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Wed, 19 Dec 2018 12:53:08 -0800 Subject: [PATCH 18/37] Initial changes to use the publishing infra from arcade to publish our assets. --- .vsts-ci.yml | 315 +++++++++++++++++++++++++++++----------------- eng/Publish.props | 26 ++++ eng/build.yml | 40 +++++- 3 files changed, 264 insertions(+), 117 deletions(-) create mode 100644 eng/Publish.props diff --git a/.vsts-ci.yml b/.vsts-ci.yml index f1a509081..5a0ed7ab7 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -3,35 +3,56 @@ trigger: variables: teamName: Roslyn-Project-System + ${{ if eq(variables['System.TeamProject'], 'public') }}: + PB_PublishBlobFeedKey: + PB_PublishBlobFeedUrl: + _DotNetPublishToBlobFeed: false + _PublishType: none + _SignType: test + ${{ if ne(variables['System.TeamProject'], 'public') }}: + PB_PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + _DotNetPublishToBlobFeed: true + _PublishType: blob + _SignType: real phases: - template: /eng/build.yml parameters: agentOs: Windows_NT queue: - name: Hosted VS2017 + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: dotnet-external-temp + ${{ if ne(variables['System.TeamProject'], 'public') }}: + name: dotnet-internal-temp parallel: 99 matrix: - Build_Debug_x86: - _BuildConfig: Debug - _BuildArchitecture: x86 - _DOTNET_CLI_UI_LANGUAGE: '' - _DropSuffix: '' + ${{ if eq(variables['System.TeamProject'], 'public') }}: + Build_Debug_x86: + _BuildConfig: Debug + _BuildArchitecture: x86 + _DOTNET_CLI_UI_LANGUAGE: '' + _DropSuffix: '' + Build_ES_Debug_x64: + _BuildConfig: Debug + _BuildArchitecture: x64 + _DOTNET_CLI_UI_LANGUAGE: es + _DropSuffix: '' + Build_DropSuffix_Release_x64: + _BuildConfig: Release + _BuildArchitecture: x64 + _DOTNET_CLI_UI_LANGUAGE: '' + _DropSuffix: true + ${{ if ne(variables['System.TeamProject'], 'public') }}: + Build_Release_x86: + _BuildConfig: Release + _BuildArchitecture: x86 + _DOTNET_CLI_UI_LANGUAGE: '' + _DropSuffix: '' Build_Release_x64: _BuildConfig: Release _BuildArchitecture: x64 _DOTNET_CLI_UI_LANGUAGE: '' _DropSuffix: '' - Build_ES_Debug_x64: - _BuildConfig: Debug - _BuildArchitecture: x64 - _DOTNET_CLI_UI_LANGUAGE: es - _DropSuffix: '' - Build_DropSuffix_Release_x64: - _BuildConfig: Release - _BuildArchitecture: x64 - _DOTNET_CLI_UI_LANGUAGE: '' - _DropSuffix: true Build_Release_arm: _BuildConfig: Release _BuildArchitecture: arm @@ -45,92 +66,151 @@ phases: name: Hosted Ubuntu 1604 parallel: 99 matrix: - Build_Ubuntu_14_04_Release_x64: - _BuildConfig: Release - _DockerParameter: '--docker ubuntu.14.04' - _LinuxPortable: '' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Ubuntu_16_04_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker ubuntu.16.04' - _LinuxPortable: '' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Ubuntu_18_04_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker ubuntu.18.04' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - _AdditionalBuildParameters: '-p:DisableSourceLink=true' - Build_Fedora_27_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker fedora.27' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_OpenSUSE_42_3_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker opensuse.42.3' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_CentOS_7_1_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker centos' - _LinuxPortable: '' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Debian_8_2_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker debian' - _LinuxPortable: '' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Rhel_7_2_Release_x64: - _BuildConfig: Release - _DockerParameter: '--docker rhel' - _LinuxPortable: '' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Rhel_6_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker rhel.6' - _LinuxPortable: '' - _RuntimeIdentifier: '--runtime-id rhel.6-x64' - _BuildArchitecture: 'x64' - _DropSuffix: '' - _AdditionalBuildParameters: '-p:DisableSourceLink=true' - Build_Arm_Debug: - _BuildConfig: Debug - _DockerParameter: '' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'arm' - _DropSuffix: '' - Build_Arm64_Debug: - _BuildConfig: Debug - _DockerParameter: '' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'arm64' - _DropSuffix: '' - Build_Linux_musl_Debug_x64: - _BuildConfig: Debug - _DockerParameter: '--docker alpine.3.6' - _LinuxPortable: '' - _RuntimeIdentifier: '--runtime-id linux-musl-x64' - _BuildArchitecture: 'x64' - _DropSuffix: '' + ${{ if eq(variables['System.TeamProject'], 'public') }}: + Build_Ubuntu_14_04_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker ubuntu.14.04' + _LinuxPortable: '' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Ubuntu_16_04_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker ubuntu.16.04' + _LinuxPortable: '' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Ubuntu_18_04_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker ubuntu.18.04' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + _AdditionalBuildParameters: '-p:DisableSourceLink=true' + Build_Fedora_27_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker fedora.27' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_OpenSUSE_42_3_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker opensuse.42.3' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_CentOS_7_1_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker centos' + _LinuxPortable: '' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Debian_8_2_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker debian' + _LinuxPortable: '' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Rhel_7_2_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker rhel' + _LinuxPortable: '' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Rhel_6_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker rhel.6' + _LinuxPortable: '' + _RuntimeIdentifier: '--runtime-id rhel.6-x64' + _BuildArchitecture: 'x64' + _DropSuffix: '' + _AdditionalBuildParameters: '-p:DisableSourceLink=true' + Build_Arm_Debug: + _BuildConfig: Debug + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'arm' + _DropSuffix: '' + Build_Arm64_Debug: + _BuildConfig: Debug + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'arm64' + _DropSuffix: '' + Build_Linux_musl_Debug_x64: + _BuildConfig: Debug + _DockerParameter: '--docker alpine.3.6' + _LinuxPortable: '' + _RuntimeIdentifier: '--runtime-id linux-musl-x64' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_LinuxPortable_NoSuffix_Release_x64: + _BuildConfig: Release + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: true + Build_Arm_NoSuffix_Release: + _BuildConfig: Release + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'arm' + _DropSuffix: true + ${{ if ne(variables['System.TeamProject'], 'public') }}: + Build_Rhel_6_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker rhel.6' + _LinuxPortable: '' + _RuntimeIdentifier: '--runtime-id rhel.6-x64' + _BuildArchitecture: 'x64' + _DropSuffix: '' + _AdditionalBuildParameters: '-p:DisableSourceLink=true' + Build_Arm_Release: + _BuildConfig: Release + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'arm' + _DropSuffix: '' + Build_Arm64_Release: + _BuildConfig: Release + _DockerParameter: '' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'arm64' + _DropSuffix: '' + Build_Linux_musl_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker alpine.3.6' + _LinuxPortable: '' + _RuntimeIdentifier: '--runtime-id linux-musl-x64' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Linux_Portable_Deb_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker ubuntu.16.04' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + Build_Linux_Portable_Rpm_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker rhel' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' Build_LinuxPortable_Release_x64: _BuildConfig: Release _DockerParameter: '' @@ -138,20 +218,6 @@ phases: _RuntimeIdentifier: '' _BuildArchitecture: 'x64' _DropSuffix: '' - Build_LinuxPortable_NoSuffix_Release_x64: - _BuildConfig: Release - _DockerParameter: '' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: true - Build_Arm_NoSuffix_Release: - _BuildConfig: Release - _DockerParameter: '' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'arm' - _DropSuffix: true - template: /eng/build.yml parameters: @@ -161,3 +227,20 @@ phases: matrix: Build_Release: _BuildConfig: Release + +# - template: /eng/build.yml +# parameters: +# agentOs: FreeBSD +# queue: +# name: Some FreeBSD queue +# matrix: +# Build_Release: +# _BuildConfig: Release + +- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/templates/phases/publish-build-assets.yml + parameters: + dependsOn: + - Windows_NT + queue: + name: Hosted VS2017 \ No newline at end of file diff --git a/eng/Publish.props b/eng/Publish.props new file mode 100644 index 000000000..35509edf6 --- /dev/null +++ b/eng/Publish.props @@ -0,0 +1,26 @@ + + + + + + Sdk + $(Product) + assets/$(Product) + + + + + + + + + + + + + $(BlobStoragePartialRelativePath)/$(Version)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) + ShipInstaller=dotnetcli + + + + diff --git a/eng/build.yml b/eng/build.yml index d30b653cf..ae89e3393 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -18,11 +18,25 @@ phases: _HelixBuildConfig: $(_BuildConfig) BuildConfig: $(_BuildConfig) BuildArchitecture: $(_BuildArchitecture) - _HelixSource: pr/dotnet/core-sdk/$(Build.SourceBranch) DockerParameter: $(_DockerParameter) LinuxPortable: $(_LinuxPortable) RuntimeId: $(_RuntimeIdentifier) AdditionalBuildParameters: $(_AdditionalBuildParameters) + ${{ if eq(variables['System.TeamProject'], 'public') }}: + _HelixSource: pr/dotnet/core-sdk/$(Build.SourceBranch) + _OfficialBuildIdArgs: '' + _PublishArgs: '' + _SignArgs: '' + ${{ if ne(variables['System.TeamProject'], 'public') }}: + _HelixSource: official/dotnet/core-sdk/$(Build.SourceBranch) + _OfficialBuildIdArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + _PublishArgs: /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) + /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PB_PublishType=$(_PublishType) + _SignArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) steps: - script: 'eng\setbuildinfo.bat $(BuildArchitecture) $(BuildConfig)' @@ -37,12 +51,30 @@ phases: displayName: Show RunTests - script: 'echo AdditionalBuildParameters: $(AdditionalBuildParameters)' displayName: Show AdditionalBuildParameters + + - ${{ if ne(variables['System.TeamProject'], 'public') }}: + - task: AzureKeyVault@1 + inputs: + azureSubscription: 'DotNet-Engineering-Services_KeyVault' + KeyVaultName: EngKeyVault + SecretsFilter: 'dotnetfeed-storage-access-key-1,microsoft-symbol-server-pat,symweb-symbol-server-pat' + condition: succeeded() + - task: AzureKeyVault@1 + inputs: + azureSubscription: 'HelixProd_KeyVault' + KeyVaultName: HelixProdKV + SecretsFilter: 'HelixApiAccessToken' + condition: always() + - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - script: build.cmd $(TestParameter) -pack -publish -Configuration $(BuildConfig) -Architecture $(BuildArchitecture) + $(_PublishArgs) + $(_SignArgs) + $(_OfficialBuildIdArgs) $(AdditionalBuildParameters) displayName: Build env: @@ -59,6 +91,9 @@ phases: --architecture $(BuildArchitecture) $(LinuxPortable) $(RuntimeId) + $(_PublishArgs) + $(_SignArgs) + $(_OfficialBuildIdArgs) $(AdditionalBuildParameters) displayName: Build env: @@ -70,6 +105,9 @@ phases: --pack --publish --noprettyprint --configuration $(BuildConfig) + $(_PublishArgs) + $(_SignArgs) + $(_OfficialBuildIdArgs) displayName: Build - task: PublishTestResults@1 From c5f1e52ac44ce35166b9d1cc89de72ef10b88241 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Wed, 19 Dec 2018 12:55:42 -0800 Subject: [PATCH 19/37] Updating arcade version. --- eng/common/CIBuild.cmd | 3 +- eng/common/PublishBuildAssets.cmd | 2 +- eng/common/PublishToPackageFeed.proj | 37 ++ eng/common/README.md | 28 ++ eng/common/build.ps1 | 85 +++-- eng/common/build.sh | 238 ++++++------ eng/common/cibuild.sh | 0 eng/common/darc-init.ps1 | 5 +- eng/common/darc-init.sh | 13 +- eng/common/msbuild.ps1 | 14 +- eng/common/msbuild.sh | 21 +- eng/common/templates/job/job.yml | 15 + .../templates/job/publish-build-assets.yml | 24 +- eng/common/templates/jobs/jobs.yml | 6 +- eng/common/templates/steps/helix-publish.yml | 2 +- eng/common/templates/steps/send-to-helix.yml | 80 ++++ eng/common/tools.ps1 | 349 ++++++++++++------ eng/common/tools.sh | 199 ++++++---- global.json | 2 +- 19 files changed, 774 insertions(+), 349 deletions(-) create mode 100644 eng/common/PublishToPackageFeed.proj create mode 100644 eng/common/README.md mode change 100644 => 100755 eng/common/build.sh mode change 100644 => 100755 eng/common/cibuild.sh mode change 100644 => 100755 eng/common/darc-init.sh mode change 100644 => 100755 eng/common/msbuild.sh create mode 100644 eng/common/templates/steps/send-to-helix.yml diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 6544b0cd5..56c2f25ac 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,3 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" -exit /b %ErrorLevel% +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file diff --git a/eng/common/PublishBuildAssets.cmd b/eng/common/PublishBuildAssets.cmd index 399ca0bd3..ac629f00e 100644 --- a/eng/common/PublishBuildAssets.cmd +++ b/eng/common/PublishBuildAssets.cmd @@ -1,3 +1,3 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -msbuildEngine dotnet -restore -execute /p:PublishBuildAssets=true /p:SdkTaskProjects=PublishBuildAssets.proj %*" +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -msbuildEngine dotnet -restore -execute -binaryLog /p:PublishBuildAssets=true /p:SdkTaskProjects=PublishBuildAssets.proj %*" exit /b %ErrorLevel% diff --git a/eng/common/PublishToPackageFeed.proj b/eng/common/PublishToPackageFeed.proj new file mode 100644 index 000000000..7dc478d98 --- /dev/null +++ b/eng/common/PublishToPackageFeed.proj @@ -0,0 +1,37 @@ + + + + netcoreapp2.1 + + + + + + + + + + + + + + + + + + diff --git a/eng/common/README.md b/eng/common/README.md new file mode 100644 index 000000000..ff49c3715 --- /dev/null +++ b/eng/common/README.md @@ -0,0 +1,28 @@ +# Don't touch this folder + + uuuuuuuuuuuuuuuuuuuu + u" uuuuuuuuuuuuuuuuuu "u + u" u$$$$$$$$$$$$$$$$$$$$u "u + u" u$$$$$$$$$$$$$$$$$$$$$$$$u "u + u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + u" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$u "u + $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + $ $$$" ... "$... ...$" ... "$$$ ... "$$$ $ + $ $$$u `"$$$$$$$ $$$ $$$$$ $$ $$$ $$$ $ + $ $$$$$$uu "$$$$ $$$ $$$$$ $$ """ u$$$ $ + $ $$$""$$$ $$$$ $$$u "$$$" u$$ $$$$$$$$ $ + $ $$$$....,$$$$$..$$$$$....,$$$$..$$$$$$$$ $ + $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ + "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + "u "$$$$$$$$$$$$$$$$$$$$$$$$$$$$" u" + "u "$$$$$$$$$$$$$$$$$$$$$$$$" u" + "u "$$$$$$$$$$$$$$$$$$$$" u" + "u """""""""""""""""" u" + """""""""""""""""""" + +!!! Changes made in this directory are subject to being overwritten by automation !!! + +The files in this directory are shared by all Arcade repos and managed by automation. If you need to make changes to these files, open an issue or submit a pull request to https://github.com/dotnet/arcade first. diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 76f108fd5..2f5e6052a 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -1,15 +1,15 @@ [CmdletBinding(PositionalBinding=$false)] Param( - [string] $configuration = "Debug", - [string] $projects = "", - [string] $verbosity = "minimal", + [string][Alias('c')]$configuration = "Debug", + [string] $projects, + [string][Alias('v')]$verbosity = "minimal", [string] $msbuildEngine = $null, - [bool] $warnaserror = $true, - [bool] $nodereuse = $true, + [bool] $warnAsError = $true, + [bool] $nodeReuse = $true, [switch] $execute, - [switch] $restore, + [switch][Alias('r')]$restore, [switch] $deployDeps, - [switch] $build, + [switch][Alias('b')]$build, [switch] $rebuild, [switch] $deploy, [switch] $test, @@ -19,6 +19,7 @@ Param( [switch] $pack, [switch] $publish, [switch] $publishBuildAssets, + [switch][Alias('bl')]$binaryLog, [switch] $ci, [switch] $prepareMachine, [switch] $help, @@ -29,14 +30,15 @@ Param( function Print-Usage() { Write-Host "Common settings:" - Write-Host " -configuration Build configuration Debug, Release" - Write-Host " -verbosity Msbuild verbosity (q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic])" + Write-Host " -configuration Build configuration: 'Debug' or 'Release' (short: -c)" + Write-Host " -verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)" + Write-Host " -binaryLog Output binary log (short: -bl)" Write-Host " -help Print help and exit" Write-Host "" Write-Host "Actions:" - Write-Host " -restore Restore dependencies" - Write-Host " -build Build solution" + Write-Host " -restore Restore dependencies (short: -r)" + Write-Host " -build Build solution (short: -b)" Write-Host " -rebuild Rebuild solution" Write-Host " -deploy Deploy built VSIXes" Write-Host " -deployDeps Deploy dependencies (e.g. VSIXes for integration tests)" @@ -46,7 +48,7 @@ function Print-Usage() { Write-Host " -performanceTest Run all performance tests in the solution" Write-Host " -sign Sign build outputs" Write-Host " -publish Publish artifacts (e.g. symbols)" - Write-Host " -publishBuildAssets Push assets to BAR" + Write-Host " -publishBuildAssets Push assets to BAR" Write-Host "" Write-Host "Advanced settings:" @@ -59,24 +61,35 @@ function Print-Usage() { Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)." } -if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { - Print-Usage - exit 0 -} -try { - if ($projects -eq "") { - $projects = Join-Path $RepoRoot "*.sln" +function InitializeCustomToolset { + if (-not $restore) { + return } - InitializeTools + $script = Join-Path $EngRoot "restore-toolset.ps1" - $BuildLog = Join-Path $LogDir "Build.binlog" + if (Test-Path $script) { + . $script + } +} - MSBuild $ToolsetBuildProj ` - /bl:$BuildLog ` +function Build { + $toolsetBuildProj = InitializeToolset + InitializeCustomToolset + $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } + + if ($projects) { + # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. + # Explicitly set the type as string[] because otherwise PowerShell would make this char[] if $properties is empty. + [string[]] $msbuildArgs = $properties + $msbuildArgs += "/p:Projects=$projects" + $properties = $msbuildArgs + } + + MSBuild $toolsetBuildProj ` + $bl ` /p:Configuration=$configuration ` - /p:Projects=$projects ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` /p:DeployDeps=$deployDeps ` @@ -92,13 +105,27 @@ try { /p:Execute=$execute ` /p:ContinuousIntegrationBuild=$ci ` @properties +} - if ($lastExitCode -ne 0) { - Write-Host "Build Failed (exit code '$lastExitCode'). See log: $BuildLog" -ForegroundColor Red - ExitWithExitCode $lastExitCode +try { + if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { + Print-Usage + exit 0 } - ExitWithExitCode $lastExitCode + if ($ci) { + $binaryLog = $true + $nodeReuse = $false + } + + # Import custom tools configuration, if present in the repo. + # Note: Import in global scope so that the script set top-level variables without qualification. + $configureToolsetScript = Join-Path $EngRoot "configure-toolset.ps1" + if (Test-Path $configureToolsetScript) { + . $configureToolsetScript + } + + Build } catch { Write-Host $_ @@ -106,3 +133,5 @@ catch { Write-Host $_.ScriptStackTrace ExitWithExitCode 1 } + +ExitWithExitCode 0 diff --git a/eng/common/build.sh b/eng/common/build.sh old mode 100644 new mode 100755 index 941db3bd5..47af926d4 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -1,5 +1,35 @@ #!/usr/bin/env bash +# Stop script if unbound variable found (use ${var:-} if intentional) +set -u + +usage() +{ + echo "Common settings:" + echo " --configuration Build configuration: 'Debug' or 'Release' (short: --c)" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)" + echo " --binaryLog Create MSBuild binary log (short: -bl)" + echo "" + echo "Actions:" + echo " --restore Restore dependencies (short: -r)" + echo " --build Build all projects (short: -b)" + echo " --rebuild Rebuild all projects" + echo " --test Run all unit tests (short: -t)" + echo " --sign Sign build outputs" + echo " --publish Publish artifacts (e.g. symbols)" + echo " --pack Package build outputs into NuGet packages and Willow components" + echo " --help Print help and exit (short: -h)" + echo "" + echo "Advanced settings:" + echo " --projects Project or solution file(s) to build" + echo " --ci Set when running on CI server" + echo " --prepareMachine Prepare machine for CI run, clean up processes after build" + echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo "" + echo "Command line arguments starting with '/p:' are passed through to MSBuild." +} + source="${BASH_SOURCE[0]}" # resolve $source until the file is no longer a symlink @@ -12,7 +42,6 @@ while [[ -h "$source" ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -help=false restore=false build=false rebuild=false @@ -25,8 +54,9 @@ sign=false public=false ci=false -warnaserror=true -nodereuse=true +warn_as_error=true +node_reuse=true +binary_log=false projects='' configuration='Debug' @@ -34,138 +64,140 @@ prepare_machine=false verbosity='minimal' properties='' -while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" - case $lowerI in - --build) - build=true - shift 1 - ;; - --ci) - ci=true - shift 1 - ;; - --configuration) - configuration=$2 - shift 2 - ;; - --help) - echo "Common settings:" - echo " --configuration Build configuration Debug, Release" - echo " --verbosity Msbuild verbosity (q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic])" - echo " --help Print help and exit" - echo "" - echo "Actions:" - echo " --restore Restore dependencies" - echo " --build Build solution" - echo " --rebuild Rebuild solution" - echo " --test Run all unit tests in the solution" - echo " --sign Sign build outputs" - echo " --publish Publish artifacts (e.g. symbols)" - echo " --pack Package build outputs into NuGet packages and Willow components" - echo "" - echo "Advanced settings:" - echo " --solution Path to solution to build" - echo " --ci Set when running on CI server" - echo " --prepareMachine Prepare machine for CI run" - echo "" - echo "Command line arguments not listed above are passed through to MSBuild." +while [[ $# > 0 ]]; do + opt="$(echo "$1" | awk '{print tolower($0)}')" + case "$opt" in + --help|-h) + usage exit 0 ;; - --pack) - pack=true - shift 1 + --configuration|-c) + configuration=$2 + shift ;; - --preparemachine) - prepare_machine=true - shift 1 + --verbosity|-v) + verbosity=$2 + shift + ;; + --binarylog|-bl) + binary_log=true + ;; + --restore|-r) + restore=true + ;; + --build|-b) + build=true ;; --rebuild) rebuild=true - shift 1 ;; - --restore) - restore=true - shift 1 + --pack) + pack=true ;; - --sign) - sign=true - shift 1 - ;; - --solution) - solution=$2 - shift 2 - ;; - --projects) - projects=$2 - shift 2 - ;; - --test) + --test|-t) test=true - shift 1 ;; --integrationtest) integration_test=true - shift 1 ;; --performancetest) performance_test=true - shift 1 + ;; + --sign) + sign=true ;; --publish) publish=true - shift 1 ;; - --verbosity) - verbosity=$2 - shift 2 + --preparemachine) + prepare_machine=true + ;; + --projects) + projects=$2 + shift + ;; + --ci) + ci=true ;; --warnaserror) - warnaserror=$2 - shift 2 + warn_as_error=$2 + shift ;; --nodereuse) - nodereuse=$2 - shift 2 + node_reuse=$2 + shift ;; - *) + /p:*) properties="$properties $1" - shift 1 + ;; + *) + echo "Invalid argument: $1" + usage + exit 1 ;; esac + + shift done +if [[ "$ci" == true ]]; then + binary_log=true + node_reuse=false +fi + . "$scriptroot/tools.sh" -if [[ -z $projects ]]; then - projects="$repo_root/*.sln" +function InitializeCustomToolset { + local script="$eng_root/restore-toolset.sh" + + if [[ -a "$script" ]]; then + . "$script" + fi +} + +function Build { + InitializeToolset + InitializeCustomToolset + + if [[ ! -z "$projects" ]]; then + properties="$properties /p:Projects=$projects" + fi + + local bl="" + if [[ "$binary_log" == true ]]; then + bl="/bl:\"$log_dir/Build.binlog\"" + fi + + MSBuild $_InitializeToolset \ + $bl \ + /p:Configuration=$configuration \ + /p:RepoRoot="$repo_root" \ + /p:Restore=$restore \ + /p:Build=$build \ + /p:Rebuild=$rebuild \ + /p:Test=$test \ + /p:Pack=$pack \ + /p:IntegrationTest=$integration_test \ + /p:PerformanceTest=$performance_test \ + /p:Sign=$sign \ + /p:Publish=$publish \ + /p:ContinuousIntegrationBuild=$ci \ + $properties + + ExitWithExitCode 0 +} + +# Import custom tools configuration, if present in the repo. +configure_toolset_script="$eng_root/configure-toolset.sh" +if [[ -a "$configure_toolset_script" ]]; then + . "$configure_toolset_script" fi -InitializeTools - -build_log="$log_dir/Build.binlog" - -MSBuild "$toolset_build_proj" \ - /bl:"$build_log" \ - /p:Configuration=$configuration \ - /p:Projects="$projects" \ - /p:RepoRoot="$repo_root" \ - /p:Restore=$restore \ - /p:Build=$build \ - /p:Rebuild=$rebuild \ - /p:Test=$test \ - /p:Pack=$pack \ - /p:IntegrationTest=$integration_test \ - /p:PerformanceTest=$performance_test \ - /p:Sign=$sign \ - /p:Publish=$publish \ - /p:ContinuousIntegrationBuild=$ci \ - $properties - -lastexitcode=$? - -if [[ $lastexitcode != 0 ]]; then - echo "Build failed (exit code '$lastexitcode'). See log: $build_log" +# TODO: https://github.com/dotnet/arcade/issues/1468 +# Temporary workaround to avoid breaking change. +# Remove once repos are updated. +if [[ -n "${useInstalledDotNetCli:-}" ]]; then + use_installed_dotnet_cli="$useInstalledDotNetCli" fi -ExitWithExitCode $lastexitcode +Build diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh old mode 100644 new mode 100755 diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index af182d8f8..9ca150be8 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -3,7 +3,9 @@ $verbosity = "m" function InstallDarcCli { $darcCliPackageName = "microsoft.dotnet.darc" - $dotnet = "$env:DOTNET_INSTALL_DIR\dotnet.exe" + + $dotnetRoot = InitializeDotNetCli -install:$true + $dotnet = "$dotnetRoot\dotnet.exe" $toolList = Invoke-Expression "& `"$dotnet`" tool list -g" if ($toolList -like "*$darcCliPackageName*") { @@ -17,5 +19,4 @@ function InstallDarcCli { Invoke-Expression "& `"$dotnet`" tool install $darcCliPackageName --version $toolsetVersion -v $verbosity -g" } -InitializeTools InstallDarcCli diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh old mode 100644 new mode 100755 index a0c733a15..bad07c3ae --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -17,10 +17,14 @@ verbosity=m function InstallDarcCli { local darc_cli_package_name="microsoft.dotnet.darc" - local uninstall_command=`$DOTNET_INSTALL_DIR/dotnet tool uninstall $darc_cli_package_name -g` - local tool_list=$($DOTNET_INSTALL_DIR/dotnet tool list -g) + + InitializeDotNetCli + local dotnet_root=$_InitializeDotNetCli + + local uninstall_command=`$dotnet_root/dotnet tool uninstall $darc_cli_package_name -g` + local tool_list=$($dotnet_root/dotnet tool list -g) if [[ $tool_list = *$darc_cli_package_name* ]]; then - echo $($DOTNET_INSTALL_DIR/dotnet tool uninstall $darc_cli_package_name -g) + echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g) fi ReadGlobalVersion "Microsoft.DotNet.Arcade.Sdk" @@ -28,8 +32,7 @@ function InstallDarcCli { echo "Installing Darc CLI version $toolset_version..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." - echo $($DOTNET_INSTALL_DIR/dotnet tool install $darc_cli_package_name --version $toolset_version -v $verbosity -g) + echo $($dotnet_root/dotnet tool install $darc_cli_package_name --version $toolset_version -v $verbosity -g) } -InitializeTools InstallDarcCli diff --git a/eng/common/msbuild.ps1 b/eng/common/msbuild.ps1 index 43b837f4d..b37fd3d5e 100644 --- a/eng/common/msbuild.ps1 +++ b/eng/common/msbuild.ps1 @@ -1,8 +1,8 @@ [CmdletBinding(PositionalBinding=$false)] Param( [string] $verbosity = "minimal", - [bool] $warnaserror = $true, - [bool] $nodereuse = $true, + [bool] $warnAsError = $true, + [bool] $nodeReuse = $true, [switch] $ci, [switch] $prepareMachine, [Parameter(ValueFromRemainingArguments=$true)][String[]]$extraArgs @@ -11,13 +11,17 @@ Param( . $PSScriptRoot\tools.ps1 try { - InitializeTools + if ($ci) { + $nodeReuse = $false + } + MSBuild @extraArgs - ExitWithExitCode $lastExitCode -} +} catch { Write-Host $_ Write-Host $_.Exception Write-Host $_.ScriptStackTrace ExitWithExitCode 1 } + +ExitWithExitCode 0 \ No newline at end of file diff --git a/eng/common/msbuild.sh b/eng/common/msbuild.sh old mode 100644 new mode 100755 index b1024487f..8160cd5a5 --- a/eng/common/msbuild.sh +++ b/eng/common/msbuild.sh @@ -13,10 +13,10 @@ done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" verbosity='minimal' -warnaserror=true -nodereuse=true +warn_as_error=true +node_reuse=true prepare_machine=false -extraargs='' +extra_args='' while (($# > 0)); do lowerI="$(echo $1 | awk '{print tolower($0)}')" @@ -26,11 +26,11 @@ while (($# > 0)); do shift 2 ;; --warnaserror) - warnaserror=$2 + warn_as_error=$2 shift 2 ;; --nodereuse) - nodereuse=$2 + node_reuse=$2 shift 2 ;; --ci) @@ -42,7 +42,7 @@ while (($# > 0)); do shift 1 ;; *) - extraargs="$extraargs $1" + extra_args="$extra_args $1" shift 1 ;; esac @@ -50,6 +50,9 @@ done . "$scriptroot/tools.sh" -InitializeTools -MSBuild $extraargs -ExitWithExitCode $? +if [[ "$ci" == true ]]; then + node_reuse=false +fi + +MSBuild $extra_args +ExitWithExitCode 0 diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 9fb858e48..5e293db35 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -95,11 +95,26 @@ jobs: variables: - ${{ each variable in parameters.variables }}: + # handle name-value variable syntax + # example: + # - name: [key] + # value: [value] - ${{ if ne(variable.name, '') }}: - name: ${{ variable.name }} value: ${{ variable.value }} + + # handle variable groups - ${{ if ne(variable.group, '') }}: - group: ${{ variable.group }} + + # handle key-value variable syntax. + # example: + # - [key]: [value] + - ${{ if and(eq(variable.name, ''), eq(variable.group, '')) }}: + - ${{ each pair in variable }}: + - name: ${{ pair.key }} + value: ${{ pair.value }} + # Add additional variables - ${{ if and(ne(parameters.helixRepo, ''), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}: - name: _HelixSource diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml index b40016f6f..c094658fe 100644 --- a/eng/common/templates/job/publish-build-assets.yml +++ b/eng/common/templates/job/publish-build-assets.yml @@ -1,10 +1,4 @@ parameters: - # Optional: dependencies of the job - dependsOn: '' - - # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool - pool: {} - configuration: 'Debug' # Optional: condition for the job to run @@ -13,6 +7,15 @@ parameters: # Optional: 'true' if future jobs should run even if this job fails continueOnError: false + # Optional: dependencies of the job + dependsOn: '' + + # Optional: Include PublishBuildArtifacts task + enablePublishBuildArtifacts: false + + # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool + pool: {} + # Optional: should run as a public build even in the internal project # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false @@ -49,3 +52,12 @@ jobs: displayName: Publish Build Assets condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: + - task: PublishBuildArtifacts@1 + displayName: Publish Logs to VSTS + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)' + PublishLocation: Container + ArtifactName: $(Agent.Os)_PublishBuildAssets + continueOnError: true + condition: always() diff --git a/eng/common/templates/jobs/jobs.yml b/eng/common/templates/jobs/jobs.yml index 6aa55e3af..c7226b12e 100644 --- a/eng/common/templates/jobs/jobs.yml +++ b/eng/common/templates/jobs/jobs.yml @@ -20,8 +20,8 @@ parameters: # Optional: enable sending telemetry # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix # _HelixBuildConfig - differentiate between Debug, Release, other - # _HelixSource - Example: build/product/ - # _HelixType - Example: official/dotnet/arcade/$(Build.SourceBranch) + # _HelixType - Example: build/product/ + # _HelixSource - Example: official/dotnet/arcade/$(Build.SourceBranch) enableTelemetry: false # Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job @@ -73,3 +73,5 @@ jobs: pool: vmImage: vs2017-win2016 runAsPublic: ${{ parameters.runAsPublic }} + enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} + diff --git a/eng/common/templates/steps/helix-publish.yml b/eng/common/templates/steps/helix-publish.yml index 6dada380c..470ab65da 100644 --- a/eng/common/templates/steps/helix-publish.yml +++ b/eng/common/templates/steps/helix-publish.yml @@ -40,7 +40,7 @@ steps: WorkItemCommand: ${{ parameters.WorkItemCommand }} CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} XUnitProjects: ${{ parameters.XUnitProjects }} - XUnitTargetFramework: ${{ parameters.XUnitTargetFramework }} + XUnitRuntimeTargetFramework: ${{ parameters.XUnitTargetFramework }} XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml new file mode 100644 index 000000000..03f0e3866 --- /dev/null +++ b/eng/common/templates/steps/send-to-helix.yml @@ -0,0 +1,80 @@ +parameters: + HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ + HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' + HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number + HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/api/2018-03-14/info/queues for a list of queues + HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group + HelixPreCommands: '' # optional -- commands to run before Helix work item execution + HelixPostCommands: '' # optional -- commands to run after Helix work item execution + WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects + WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects + CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload + XUnitProjects: '' # optional -- semicolon delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true + XUnitPublishTargetFramework: '' # optional -- framework to use to publish your xUnit projects + XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner + XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects + IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion + DotNetCliPackageType: '' # optional -- either 'sdk' or 'runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control + WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." + IsExternal: false # optional -- true requires Creator and will make the Mission Control results visible to folks outside the Microsoft Org + Creator: '' # optional -- if the build is external, use this to specify who is sending the job + condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() + continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false + +steps: + - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"' + displayName: Send job to Helix (Windows) + env: + BuildConfig: $(_BuildConfig) + HelixSource: ${{ parameters.HelixSource }} + HelixType: ${{ parameters.HelixType }} + HelixBuild: ${{ parameters.HelixBuild }} + HelixTargetQueues: ${{ parameters.HelixTargetQueues }} + HelixAccessToken: ${{ parameters.HelixAccessToken }} + HelixPreCommands: ${{ parameters.HelixPreCommands }} + HelixPostCommands: ${{ parameters.HelixPostCommands }} + WorkItemDirectory: ${{ parameters.WorkItemDirectory }} + WorkItemCommand: ${{ parameters.WorkItemCommand }} + CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} + XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} + XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} + XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} + IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} + DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} + DotNetCliVersion: ${{ parameters.DotNetCliVersion }} + EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} + WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} + IsExternal: ${{ parameters.IsExternal }} + Creator: ${{ parameters.Creator }} + condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} + - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog + displayName: Send job to Helix (Unix) + env: + BuildConfig: $(_BuildConfig) + HelixSource: ${{ parameters.HelixSource }} + HelixType: ${{ parameters.HelixType }} + HelixBuild: ${{ parameters.HelixBuild }} + HelixTargetQueues: ${{ parameters.HelixTargetQueues }} + HelixAccessToken: ${{ parameters.HelixAccessToken }} + HelixPreCommands: ${{ parameters.HelixPreCommands }} + HelixPostCommands: ${{ parameters.HelixPostCommands }} + WorkItemDirectory: ${{ parameters.WorkItemDirectory }} + WorkItemCommand: ${{ parameters.WorkItemCommand }} + CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} + XUnitProjects: ${{ parameters.XUnitProjects }} + XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }} + XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }} + XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }} + IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} + DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} + DotNetCliVersion: ${{ parameters.DotNetCliVersion }} + EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} + WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} + IsExternal: ${{ parameters.IsExternal }} + Creator: ${{ parameters.Creator }} + condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index d877df6b8..a607ec608 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -1,14 +1,43 @@ -# Initialize variables if they aren't already defined +# Initialize variables if they aren't already defined. +# These may be defined as parameters of the importing script, or set after importing this script. -$ci = if (Test-Path variable:ci) { $ci } else { $false } -$configuration = if (Test-Path variable:configuration) { $configuration } else { "Debug" } -$nodereuse = if (Test-Path variable:nodereuse) { $nodereuse } else { !$ci } -$prepareMachine = if (Test-Path variable:prepareMachine) { $prepareMachine } else { $false } -$restore = if (Test-Path variable:restore) { $restore } else { $true } -$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { "minimal" } -$warnaserror = if (Test-Path variable:warnaserror) { $warnaserror } else { $true } -$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null } -$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true } +# CI mode - set to true on CI server for PR validation build or official build. +[bool]$ci = if (Test-Path variable:ci) { $ci } else { $false } + +# Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. +[string]$configuration = if (Test-Path variable:configuration) { $configuration } else { "Debug" } + +# Set to true to output binary log from msbuild. Note that emitting binary log slows down the build. +# Binary log must be enabled on CI. +[bool]$binaryLog = if (Test-Path variable:binaryLog) { $binaryLog } else { $ci } + +# Turns on machine preparation/clean up code that changes the machine state (e.g. kills build processes). +[bool]$prepareMachine = if (Test-Path variable:prepareMachine) { $prepareMachine } else { $false } + +# True to restore toolsets and dependencies. +[bool]$restore = if (Test-Path variable:restore) { $restore } else { $true } + +# Adjusts msbuild verbosity level. +[string]$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { "minimal" } + +# Set to true to reuse msbuild nodes. Recommended to not reuse on CI. +[bool]$nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { !$ci } + +# Configures warning treatment in msbuild. +[bool]$warnAsError = if (Test-Path variable:warnAsError) { $warnAsError } else { $true } + +# Specifies which msbuild engine to use for build: 'vs', 'dotnet' or unspecified (determined based on presence of tools.vs in global.json). +[string]$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null } + +# True to attempt using .NET Core already that meets requirements specified in global.json +# installed on the machine instead of downloading one. +[bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true } + +# True to use global NuGet cache instead of restoring packages to repository-local directory. +[bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } + +# An array of names of processes to stop on script exit if prepareMachine is true. +$processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @("msbuild", "dotnet", "vbcscompiler") } set-strictmode -version 2.0 $ErrorActionPreference = "Stop" @@ -25,13 +54,54 @@ function Unzip([string]$zipfile, [string]$outpath) { [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath) } +# This will exec a process using the console and return it's exit code. +# This will not throw when the process fails. +# Returns process exit code. +function Exec-Process([string]$command, [string]$commandArgs) { + $startInfo = New-Object System.Diagnostics.ProcessStartInfo + $startInfo.FileName = $command + $startInfo.Arguments = $commandArgs + $startInfo.UseShellExecute = $false + $startInfo.WorkingDirectory = Get-Location + + $process = New-Object System.Diagnostics.Process + $process.StartInfo = $startInfo + $process.Start() | Out-Null + + $finished = $false + try { + while (-not $process.WaitForExit(100)) { + # Non-blocking loop done to allow ctr-c interrupts + } + + $finished = $true + return $global:LASTEXITCODE = $process.ExitCode + } + finally { + # If we didn't finish then an error occured or the user hit ctrl-c. Either + # way kill the process + if (-not $finished) { + $process.Kill() + } + } +} + function InitializeDotNetCli([bool]$install) { + if (Test-Path variable:global:_DotNetInstallDir) { + return $global:_DotNetInstallDir + } + # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism $env:DOTNET_MULTILEVEL_LOOKUP=0 # Disable first run since we do not need all ASP.NET packages restored. $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + # Disable telemetry on CI. + if ($ci) { + $env:DOTNET_CLI_TELEMETRY_OPTOUT=1 + } + # Source Build uses DotNetCoreSdkDir variable if ($env:DotNetCoreSdkDir -ne $null) { $env:DOTNET_INSTALL_DIR = $env:DotNetCoreSdkDir @@ -39,7 +109,10 @@ function InitializeDotNetCli([bool]$install) { # Find the first path on %PATH% that contains the dotnet.exe if ($useInstalledDotNetCli -and ($env:DOTNET_INSTALL_DIR -eq $null)) { - $env:DOTNET_INSTALL_DIR = ${env:PATH}.Split(';') | where { ($_ -ne "") -and (Test-Path (Join-Path $_ "dotnet.exe")) } + $dotnetCmd = Get-Command "dotnet.exe" -ErrorAction SilentlyContinue + if ($dotnetCmd -ne $null) { + $env:DOTNET_INSTALL_DIR = Split-Path $dotnetCmd.Path -Parent + } } $dotnetSdkVersion = $GlobalJson.tools.dotnet @@ -50,13 +123,8 @@ function InitializeDotNetCli([bool]$install) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { $dotnetRoot = Join-Path $RepoRoot ".dotnet" - if ($env:ARCADE_DOTNET_DIR -ne $null) - { - $dotnetRoot = $env:ARCADE_DOTNET_DIR - } - $env:DOTNET_INSTALL_DIR = $dotnetRoot - if (-not (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { + if (-not (Test-Path(Join-Path $dotnetRoot "sdk\$dotnetSdkVersion"))) { if ($install) { InstallDotNetSdk $dotnetRoot $dotnetSdkVersion } else { @@ -64,9 +132,16 @@ function InitializeDotNetCli([bool]$install) { ExitWithExitCode 1 } } + + $env:DOTNET_INSTALL_DIR = $dotnetRoot } - return $dotnetRoot + # Add dotnet to PATH. This prevents any bare invocation of dotnet in custom + # build steps from using anything other than what we've downloaded. + # It also ensures that VS msbuild will use the downloaded sdk targets. + $env:PATH = "$dotnetRoot;$env:PATH" + + return $global:_DotNetInstallDir = $dotnetRoot } function GetDotNetInstallScript([string] $dotnetRoot) { @@ -99,8 +174,13 @@ function InstallDotNetSdk([string] $dotnetRoot, [string] $version) { # Returns full path to msbuild.exe. # Throws on failure. # -function InitializeVisualStudioMSBuild { - $vsMinVersionStr = if (!$GlobalJson.tools.vs.version) { $GlobalJson.tools.vs.version } else { "15.9" } +function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = $null) { + if (Test-Path variable:global:_MSBuildExe) { + return $global:_MSBuildExe + } + + if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } + $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { "15.9" } $vsMinVersion = [Version]::new($vsMinVersionStr) # Try msbuild command available in the environment. @@ -108,7 +188,7 @@ function InitializeVisualStudioMSBuild { $msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue if ($msbuildCmd -ne $null) { if ($msbuildCmd.Version -ge $vsMinVersion) { - return $msbuildCmd.Path + return $global:_MSBuildExe = $msbuildCmd.Path } # Report error - the developer environment is initialized with incompatible VS version. @@ -117,13 +197,13 @@ function InitializeVisualStudioMSBuild { } # Locate Visual Studio installation or download x-copy msbuild. - $vsInfo = LocateVisualStudio + $vsInfo = LocateVisualStudio $vsRequirements if ($vsInfo -ne $null) { $vsInstallDir = $vsInfo.installationPath $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] InitializeVisualStudioEnvironmentVariables $vsInstallDir $vsMajorVersion - } else { + } elseif ($install) { if (Get-Member -InputObject $GlobalJson.tools -Name "xcopy-msbuild") { $xcopyMSBuildVersion = $GlobalJson.tools.'xcopy-msbuild' @@ -134,10 +214,12 @@ function InitializeVisualStudioMSBuild { } $vsInstallDir = InstallXCopyMSBuild $xcopyMSBuildVersion + } else { + throw "Unable to find Visual Studio that has required version and components installed" } $msbuildVersionDir = if ([int]$vsMajorVersion -lt 16) { "$vsMajorVersion.0" } else { "Current" } - return Join-Path $vsInstallDir "MSBuild\$msbuildVersionDir\Bin\msbuild.exe" + return $global:_MSBuildExe = Join-Path $vsInstallDir "MSBuild\$msbuildVersionDir\Bin\msbuild.exe" } function InitializeVisualStudioEnvironmentVariables([string] $vsInstallDir, [string] $vsMajorVersion) { @@ -179,9 +261,10 @@ function InstallXCopyMSBuild([string] $packageVersion) { # Returns JSON describing the located VS instance (same format as returned by vswhere), # or $null if no instance meeting the requirements is found on the machine. # -function LocateVisualStudio { - $vswhereVersion = Get-Member -InputObject $GlobalJson.tools -Name "vswhere" - if ($vsWhereVersion -eq $null) { +function LocateVisualStudio([object]$vsRequirements = $null){ + if (Get-Member -InputObject $GlobalJson.tools -Name "vswhere") { + $vswhereVersion = $GlobalJson.tools.vswhere + } else { $vswhereVersion = "2.5.2" } @@ -194,16 +277,16 @@ function LocateVisualStudio { Invoke-WebRequest "https://github.com/Microsoft/vswhere/releases/download/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe } - $vs = $GlobalJson.tools.vs + if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } $args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild") - if (Get-Member -InputObject $vs -Name "version") { + if (Get-Member -InputObject $vsRequirements -Name "version") { $args += "-version" - $args += $vs.version + $args += $vsRequirements.version } - if (Get-Member -InputObject $vs -Name "components") { - foreach ($component in $vs.components) { + if (Get-Member -InputObject $vsRequirements -Name "components") { + foreach ($component in $vsRequirements.components) { $args += "-requires" $args += $component } @@ -219,36 +302,19 @@ function LocateVisualStudio { return $vsInfo[0] } -function ConfigureTools { - # Include custom tools configuration - $script = Join-Path $EngRoot "configure-toolset.ps1" - - if (Test-Path $script) { - . $script - } -} - -function InitializeTools() { - ConfigureTools - - $tools = $GlobalJson.tools - - # Initialize dotnet cli if listed in 'tools' - $dotnetRoot = $null - if (Get-Member -InputObject $tools -Name "dotnet") { - $dotnetRoot = InitializeDotNetCli -install:$restore +function InitializeBuildTool() { + if (Test-Path variable:global:_BuildTool) { + return $global:_BuildTool } if (-not $msbuildEngine) { - # Presence of tools.vs indicates the repo needs to build using VS msbuild on Windows. - if (Get-Member -InputObject $tools -Name "vs") { - $msbuildEngine = "vs" - } elseif ($dotnetRoot -ne $null) { - $msbuildEngine = "dotnet" - } else { - Write-Host "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." -ForegroundColor Red - ExitWithExitCode 1 - } + $msbuildEngine = GetDefaultMSBuildEngine + } + + # Initialize dotnet cli if listed in 'tools' + $dotnetRoot = $null + if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { + $dotnetRoot = InitializeDotNetCli -install:$restore } if ($msbuildEngine -eq "dotnet") { @@ -257,34 +323,66 @@ function InitializeTools() { ExitWithExitCode 1 } - $script:buildDriver = Join-Path $dotnetRoot "dotnet.exe" - $script:buildArgs = "msbuild" + $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild" } } elseif ($msbuildEngine -eq "vs") { try { - $script:buildDriver = InitializeVisualStudioMSBuild - $script:buildArgs = "" - } catch { + $msbuildPath = InitializeVisualStudioMSBuild -install:$restore + } catch { Write-Host $_ -ForegroundColor Red ExitWithExitCode 1 } + + $buildTool = @{ Path = $msbuildPath; Command = "" } } else { Write-Host "Unexpected value of -msbuildEngine: '$msbuildEngine'." -ForegroundColor Red ExitWithExitCode 1 } - InitializeToolSet $script:buildDriver $script:buildArgs - InitializeCustomToolset + return $global:_BuildTool = $buildTool } -function InitializeToolset([string] $buildDriver, [string]$buildArgs) { +function GetDefaultMSBuildEngine() { + # Presence of tools.vs indicates the repo needs to build using VS msbuild on Windows. + if (Get-Member -InputObject $GlobalJson.tools -Name "vs") { + return "vs" + } + + if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { + return "dotnet" + } + + Write-Host "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." -ForegroundColor Red + ExitWithExitCode 1 +} + +function GetNuGetPackageCachePath() { + if ($env:NUGET_PACKAGES -eq $null) { + # Use local cache on CI to ensure deterministic build, + # use global cache in dev builds to avoid cost of downloading packages. + if ($useGlobalNuGetCache) { + $env:NUGET_PACKAGES = Join-Path $env:UserProfile ".nuget\packages" + } else { + $env:NUGET_PACKAGES = Join-Path $RepoRoot ".packages" + } + } + + return $env:NUGET_PACKAGES +} + +function InitializeToolset() { + if (Test-Path variable:global:_ToolsetBuildProj) { + return $global:_ToolsetBuildProj + } + + $nugetCache = GetNuGetPackageCachePath + $toolsetVersion = $GlobalJson.'msbuild-sdks'.'Microsoft.DotNet.Arcade.Sdk' $toolsetLocationFile = Join-Path $ToolsetDir "$toolsetVersion.txt" if (Test-Path $toolsetLocationFile) { $path = Get-Content $toolsetLocationFile -TotalCount 1 if (Test-Path $path) { - $script:ToolsetBuildProj = $path - return + return $global:_ToolsetBuildProj = $path } } @@ -293,35 +391,20 @@ function InitializeToolset([string] $buildDriver, [string]$buildArgs) { ExitWithExitCode 1 } - $ToolsetRestoreLog = Join-Path $LogDir "ToolsetRestore.binlog" + $buildTool = InitializeBuildTool + $proj = Join-Path $ToolsetDir "restore.proj" - + $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" } + '' | Set-Content $proj - MSBuild $proj /t:__WriteToolsetLocation /clp:None /bl:$ToolsetRestoreLog /p:__ToolsetLocationOutputFile=$toolsetLocationFile - - if ($lastExitCode -ne 0) { - Write-Host "Failed to restore toolset (exit code '$lastExitCode'). See log: $ToolsetRestoreLog" -ForegroundColor Red - ExitWithExitCode $lastExitCode - } - + MSBuild $proj $bl /t:__WriteToolsetLocation /noconsolelogger /p:__ToolsetLocationOutputFile=$toolsetLocationFile + $path = Get-Content $toolsetLocationFile -TotalCount 1 if (!(Test-Path $path)) { throw "Invalid toolset path: $path" } - - $script:ToolsetBuildProj = $path -} - -function InitializeCustomToolset { - if (-not $restore) { - return - } - - $script = Join-Path $EngRoot "restore-toolset.ps1" - - if (Test-Path $script) { - . $script - } + + return $global:_ToolsetBuildProj = $path } function ExitWithExitCode([int] $exitCode) { @@ -333,42 +416,86 @@ function ExitWithExitCode([int] $exitCode) { function Stop-Processes() { Write-Host "Killing running build processes..." - Get-Process -Name "msbuild" -ErrorAction SilentlyContinue | Stop-Process - Get-Process -Name "dotnet" -ErrorAction SilentlyContinue | Stop-Process - Get-Process -Name "vbcscompiler" -ErrorAction SilentlyContinue | Stop-Process + foreach ($processName in $processesToStopOnExit) { + Get-Process -Name $processName -ErrorAction SilentlyContinue | Stop-Process + } } -function MsBuild() { - $warnaserrorSwitch = if ($warnaserror) { "/warnaserror" } else { "" } - & $buildDriver $buildArgs $warnaserrorSwitch /m /nologo /clp:Summary /v:$verbosity /nr:$nodereuse $args +# +# Executes msbuild (or 'dotnet msbuild') with arguments passed to the function. +# The arguments are automatically quoted. +# Terminates the script if the build fails. +# +function MSBuild() { + if ($ci) { + if (!$binaryLog) { + throw "Binary log must be enabled in CI build." + } + + if ($nodeReuse) { + throw "Node reuse must be disabled in CI build." + } + } + + $buildTool = InitializeBuildTool + + $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse" + + if ($warnAsError) { + $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" + } + + foreach ($arg in $args) { + if ($arg -ne $null -and $arg.Trim() -ne "") { + $cmdArgs += " `"$arg`"" + } + } + + $exitCode = Exec-Process $buildTool.Path $cmdArgs + + if ($exitCode -ne 0) { + Write-Host "Build failed." -ForegroundColor Red + + $buildLog = GetMSBuildBinaryLogCommandLineArgument $args + if ($buildLog -ne $null) { + Write-Host "See log: $buildLog" -ForegroundColor DarkGray + } + + ExitWithExitCode $exitCode + } +} + +function GetMSBuildBinaryLogCommandLineArgument($arguments) { + foreach ($argument in $arguments) { + if ($argument -ne $null) { + $arg = $argument.Trim() + if ($arg.StartsWith("/bl:", "OrdinalIgnoreCase")) { + return $arg.Substring("/bl:".Length) + } + + if ($arg.StartsWith("/binaryLogger:", "OrdinalIgnoreCase")) { + return $arg.Substring("/binaryLogger:".Length) + } + } + } + + return $null } $RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..") $EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..") $ArtifactsDir = Join-Path $RepoRoot "artifacts" -if ($env:ARCADE_ARTIFACTS_DIR -ne $null) -{ - $ArtifactsDir = [System.IO.Path]::GetFullPath($env:ARCADE_ARTIFACTS_DIR) + "\" - $env:ArtifactsDir = $ArtifactsDir -} $ToolsetDir = Join-Path $ArtifactsDir "toolset" $ToolsDir = Join-Path $RepoRoot ".tools" $LogDir = Join-Path (Join-Path $ArtifactsDir "log") $configuration $TempDir = Join-Path (Join-Path $ArtifactsDir "tmp") $configuration $GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot "global.json") | ConvertFrom-Json -if ($env:NUGET_PACKAGES -eq $null) { - # Use local cache on CI to ensure deterministic build, - # use global cache in dev builds to avoid cost of downloading packages. - $env:NUGET_PACKAGES = if ($ci) { Join-Path $RepoRoot ".packages" } - else { Join-Path $env:UserProfile ".nuget\packages" } -} - Create-Directory $ToolsetDir +Create-Directory $TempDir Create-Directory $LogDir if ($ci) { - Create-Directory $TempDir $env:TEMP = $TempDir $env:TMP = $TempDir } diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 68d41c0d6..65f689775 100644 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -3,35 +3,52 @@ # Stop script if unbound variable found (use ${var:-} if intentional) set -u -ci=${ci:-false} -configuration=${configuration:-'Debug'} -nodereuse=${nodereuse:-true} -prepare_machine=${prepare_machine:-false} -restore=${restore:-true} -verbosity=${verbosity:-'minimal'} -warnaserror=${warnaserror:-true} -useInstalledDotNetCli=${useInstalledDotNetCli:-true} +# Initialize variables if they aren't already defined. -repo_root="$scriptroot/../.." -eng_root="$scriptroot/.." -artifacts_dir="$repo_root/artifacts" -if [[ -n "${ARCADE_ARTIFACTS_DIR:-}" ]]; then - artifacts_dir="$ARCADE_ARTIFACTS_DIR" - export ArtifactsDir="$artifacts_dir" +# CI mode - set to true on CI server for PR validation build or official build. +ci=${ci:-false} + +# Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. +configuration=${configuration:-'Debug'} + +# Set to true to output binary log from msbuild. Note that emitting binary log slows down the build. +# Binary log must be enabled on CI. +binary_log=${binary_log:-$ci} + +# Turns on machine preparation/clean up code that changes the machine state (e.g. kills build processes). +prepare_machine=${prepare_machine:-false} + +# True to restore toolsets and dependencies. +restore=${restore:-true} + +# Adjusts msbuild verbosity level. +verbosity=${verbosity:-'minimal'} + +# Set to true to reuse msbuild nodes. Recommended to not reuse on CI. +if [[ "$ci" == true ]]; then + node_reuse=${node_reuse:-false} +else + node_reuse=${node_reuse:-true} fi -toolset_dir="$artifacts_dir/toolset" -log_dir="$artifacts_dir/log/$configuration" -temp_dir="$artifacts_dir/tmp/$configuration" +# Configures warning treatment in msbuild. +warn_as_error=${warn_as_error:-true} -global_json_file="$repo_root/global.json" -build_driver="" -toolset_build_proj="" +# True to attempt using .NET Core already that meets requirements specified in global.json +# installed on the machine instead of downloading one. +use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} +# True to use global NuGet cache instead of restoring packages to repository-local directory. +if [[ "$ci" == true ]]; then + use_global_nuget_cache=${use_global_nuget_cache:-false} +else + use_global_nuget_cache=${use_global_nuget_cache:-true} +fi + +# Resolve any symlinks in the given path. function ResolvePath { local path=$1 - # resolve $path until the file is no longer a symlink while [[ -h $path ]]; do local dir="$( cd -P "$( dirname "$path" )" && pwd )" path="$(readlink "$path")" @@ -62,6 +79,10 @@ function ReadGlobalVersion { } function InitializeDotNetCli { + if [[ -n "${_InitializeDotNetCli:-}" ]]; then + return + fi + local install=$1 # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism @@ -70,13 +91,22 @@ function InitializeDotNetCli { # Disable first run since we want to control all package sources export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + # Disable telemetry on CI + if [[ $ci == true ]]; then + export DOTNET_CLI_TELEMETRY_OPTOUT=1 + fi + + # LTTNG is the logging infrastructure used by Core CLR. Need this variable set + # so it doesn't output warnings to the console. + export LTTNG_HOME="$HOME" + # Source Build uses DotNetCoreSdkDir variable if [[ -n "${DotNetCoreSdkDir:-}" ]]; then export DOTNET_INSTALL_DIR="$DotNetCoreSdkDir" fi # Find the first path on $PATH that contains the dotnet.exe - if [[ "$useInstalledDotNetCli" == true && -z "${DOTNET_INSTALL_DIR:-}" ]]; then + if [[ "$use_installed_dotnet_cli" == true && -z "${DOTNET_INSTALL_DIR:-}" ]]; then local dotnet_path=`command -v dotnet` if [[ -n "$dotnet_path" ]]; then ResolvePath "$dotnet_path" @@ -94,10 +124,6 @@ function InitializeDotNetCli { dotnet_root="$DOTNET_INSTALL_DIR" else dotnet_root="$repo_root/.dotnet" - if [[ -n "${ARCADE_DOTNET_DIR:-}" ]]; then - dotnet_root="$ARCADE_DOTNET_DIR" - fi - export DOTNET_INSTALL_DIR="$dotnet_root" if [[ ! -d "$DOTNET_INSTALL_DIR/sdk/$dotnet_sdk_version" ]]; then @@ -110,6 +136,10 @@ function InitializeDotNetCli { fi fi + # Add dotnet to PATH. This prevents any bare invocation of dotnet in custom + # build steps from using anything other than what we've downloaded. + export PATH="$dotnet_root:$PATH" + # return value _InitializeDotNetCli="$dotnet_root" } @@ -152,7 +182,37 @@ function GetDotNetInstallScript { _GetDotNetInstallScript="$install_script" } +function InitializeBuildTool { + if [[ -n "${_InitializeBuildTool:-}" ]]; then + return + fi + + InitializeDotNetCli $restore + + # return value + _InitializeBuildTool="$_InitializeDotNetCli/dotnet" +} + +function GetNuGetPackageCachePath { + if [[ -z ${NUGET_PACKAGES:-} ]]; then + if [[ "$use_global_nuget_cache" == true ]]; then + export NUGET_PACKAGES="$HOME/.nuget/packages" + else + export NUGET_PACKAGES="$repo_root/.packages" + fi + fi + + # return value + _GetNuGetPackageCachePath=$NUGET_PACKAGES +} + function InitializeToolset { + if [[ -n "${_InitializeToolset:-}" ]]; then + return + fi + + GetNuGetPackageCachePath + ReadGlobalVersion "Microsoft.DotNet.Arcade.Sdk" local toolset_version=$_ReadGlobalVersion @@ -161,7 +221,8 @@ function InitializeToolset { if [[ -a "$toolset_location_file" ]]; then local path=`cat "$toolset_location_file"` if [[ -a "$path" ]]; then - toolset_build_proj="$path" + # return value + _InitializeToolset="$path" return fi fi @@ -175,47 +236,17 @@ function InitializeToolset { local proj="$toolset_dir/restore.proj" echo '' > "$proj" + MSBuild "$proj" /t:__WriteToolsetLocation /noconsolelogger /bl:"$toolset_restore_log" /p:__ToolsetLocationOutputFile="$toolset_location_file" - MSBuild "$proj" /t:__WriteToolsetLocation /clp:None /bl:"$toolset_restore_log" /p:__ToolsetLocationOutputFile="$toolset_location_file" - local lastexitcode=$? - - if [[ $lastexitcode != 0 ]]; then - echo "Failed to restore toolset (exit code '$lastexitcode'). See log: $toolset_restore_log" >&2 - ExitWithExitCode $lastexitcode - fi - - toolset_build_proj=`cat "$toolset_location_file"` + local toolset_build_proj=`cat "$toolset_location_file"` if [[ ! -a "$toolset_build_proj" ]]; then echo "Invalid toolset path: $toolset_build_proj" >&2 ExitWithExitCode 3 fi -} -function InitializeCustomToolset { - local script="$eng_root/restore-toolset.sh" - - if [[ -a "$script" ]]; then - . "$script" - fi -} - -function ConfigureTools { - local script="$eng_root/configure-toolset.sh" - - if [[ -a "$script" ]]; then - . "$script" - fi -} - -function InitializeTools { - ConfigureTools - - InitializeDotNetCli $restore - build_driver="$_InitializeDotNetCli/dotnet" - - InitializeToolset - InitializeCustomToolset + # return value + _InitializeToolset="$toolset_build_proj" } function ExitWithExitCode { @@ -233,35 +264,57 @@ function StopProcesses { } function MSBuild { + if [[ "$ci" == true ]]; then + if [[ "$binary_log" != true ]]; then + echo "Binary log must be enabled in CI build." >&2 + ExitWithExitCode 1 + fi + + if [[ "$node_reuse" == true ]]; then + echo "Node reuse must be disabled in CI build." >&2 + ExitWithExitCode 1 + fi + fi + + InitializeBuildTool + local warnaserror_switch="" - if [[ $warnaserror == true ]]; then + if [[ $warn_as_error == true ]]; then warnaserror_switch="/warnaserror" fi - "$build_driver" msbuild /m /nologo /clp:Summary /v:$verbosity /nr:$nodereuse $warnaserror_switch "$@" + "$_InitializeBuildTool" msbuild /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error "$@" + lastexitcode=$? - return $? + if [[ $lastexitcode != 0 ]]; then + echo "Build failed (exit code '$lastexitcode')." >&2 + ExitWithExitCode $lastexitcode + fi } +ResolvePath "${BASH_SOURCE[0]}" +_script_dir=`dirname "$_ResolvePath"` + +eng_root=`cd -P "$_script_dir/.." && pwd` +repo_root=`cd -P "$_script_dir/../.." && pwd` +artifacts_dir="$repo_root/artifacts" +toolset_dir="$artifacts_dir/toolset" +log_dir="$artifacts_dir/log/$configuration" +temp_dir="$artifacts_dir/tmp/$configuration" + +global_json_file="$repo_root/global.json" + # HOME may not be defined in some scenarios, but it is required by NuGet if [[ -z $HOME ]]; then export HOME="$repo_root/artifacts/.home/" mkdir -p "$HOME" fi -if [[ -z ${NUGET_PACKAGES:-} ]]; then - if [[ $ci == true ]]; then - export NUGET_PACKAGES="$repo_root/.packages" - else - export NUGET_PACKAGES="$HOME/.nuget/packages" - fi -fi - mkdir -p "$toolset_dir" +mkdir -p "$temp_dir" mkdir -p "$log_dir" if [[ $ci == true ]]; then - mkdir -p "$temp_dir" export TEMP="$temp_dir" export TMP="$temp_dir" fi diff --git a/global.json b/global.json index ba936cbca..9868ffd21 100644 --- a/global.json +++ b/global.json @@ -3,6 +3,6 @@ "dotnet": "3.0.100-alpha1-009697" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18577.9" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18617.7" } } \ No newline at end of file From 24f2e8c34ec0cb1d24fa80439849979a806642c5 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Wed, 19 Dec 2018 16:08:49 -0800 Subject: [PATCH 20/37] Publishes the binaries and native installers. --- .vsts-ci.yml | 2 ++ eng/Publish.props | 19 ++++++++++++++----- eng/restore-toolset.sh | 1 + .../images/version_badge.svg | 0 4 files changed, 17 insertions(+), 5 deletions(-) rename {old/resources => resources}/images/version_badge.svg (100%) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 5a0ed7ab7..7ace18f75 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -242,5 +242,7 @@ phases: parameters: dependsOn: - Windows_NT + - Linux + - Darwin queue: name: Hosted VS2017 \ No newline at end of file diff --git a/eng/Publish.props b/eng/Publish.props index 35509edf6..0177bb8e7 100644 --- a/eng/Publish.props +++ b/eng/Publish.props @@ -2,10 +2,14 @@ + + Sdk $(Product) assets/$(Product) + true + $(RepoRoot)/resources/images/version_badge.svg @@ -16,11 +20,16 @@ - - - $(BlobStoragePartialRelativePath)/$(Version)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) - ShipInstaller=dotnetcli - + + + + + $(BlobStoragePartialRelativePath)/$(SdkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) + ShipInstaller=dotnetcli + + + + diff --git a/eng/restore-toolset.sh b/eng/restore-toolset.sh index a7291dc90..549156253 100644 --- a/eng/restore-toolset.sh +++ b/eng/restore-toolset.sh @@ -12,6 +12,7 @@ function InitializeCustomSDKToolset { #InstallDotNetSharedFramework "1.0.5" #InstallDotNetSharedFramework "1.1.2" + InitializeDotNetCli true # Install 2.1 framework for dotnet-deb-tool InstallDotNetSharedFramework "2.1.0" } diff --git a/old/resources/images/version_badge.svg b/resources/images/version_badge.svg similarity index 100% rename from old/resources/images/version_badge.svg rename to resources/images/version_badge.svg From db5b588e453ba2139474eac708b7f17ee0971c50 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Thu, 20 Dec 2018 10:03:12 -0800 Subject: [PATCH 21/37] Copy latest to blob when all legs succeed. --- .vsts-ci.yml | 24 +- eng/CopyToLatest.cmd | 7 + eng/{Publish.props => Publishing.props} | 1 - src/CopyToLatest/CopyToLatest.csproj | 15 ++ src/CopyToLatest/targets/BranchInfo.props | 5 + src/CopyToLatest/targets/FinishBuild.targets | 12 + src/core-sdk-tasks/AzurePublisher.cs | 220 +++++++++++++++++++ src/core-sdk-tasks/CopyBlobsToLatest.cs | 132 +++++++++++ src/core-sdk-tasks/core-sdk-tasks.csproj | 2 + src/redist/redist.csproj | 2 +- src/redist/targets/Badge.targets | 31 +++ src/redist/targets/BuildCoreSdkTasks.targets | 1 + 12 files changed, 449 insertions(+), 3 deletions(-) create mode 100644 eng/CopyToLatest.cmd rename eng/{Publish.props => Publishing.props} (95%) create mode 100644 src/CopyToLatest/CopyToLatest.csproj create mode 100644 src/CopyToLatest/targets/BranchInfo.props create mode 100644 src/CopyToLatest/targets/FinishBuild.targets create mode 100644 src/core-sdk-tasks/AzurePublisher.cs create mode 100644 src/core-sdk-tasks/CopyBlobsToLatest.cs create mode 100644 src/redist/targets/Badge.targets diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 7ace18f75..603f1b7b7 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -15,7 +15,7 @@ variables: _PublishType: blob _SignType: real -phases: +jobs: - template: /eng/build.yml parameters: agentOs: Windows_NT @@ -237,6 +237,27 @@ phases: # Build_Release: # _BuildConfig: Release +- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - job: Copy_SDK_To_Latest + dependsOn: + - Windows_NT + - Linux + - Darwin + pool: + name: Hosted VS2017 + condition: succeeded() + steps: + - task: AzureKeyVault@1 + inputs: + azureSubscription: 'DotNet-Engineering-Services_KeyVault' + KeyVaultName: EngKeyVault + SecretsFilter: 'dotnetfeed-storage-access-key-1' + condition: succeeded() + + - script: eng/CopyToLatest.cmd + /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) + /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/common/templates/phases/publish-build-assets.yml parameters: @@ -244,5 +265,6 @@ phases: - Windows_NT - Linux - Darwin + - Copy_SDK_To_Latest queue: name: Hosted VS2017 \ No newline at end of file diff --git a/eng/CopyToLatest.cmd b/eng/CopyToLatest.cmd new file mode 100644 index 000000000..67b0a5860 --- /dev/null +++ b/eng/CopyToLatest.cmd @@ -0,0 +1,7 @@ +@echo off + +REM Copyright (c) .NET Foundation and contributors. All rights reserved. +REM Licensed under the MIT license. See LICENSE file in the project root for full license information. + +powershell -ExecutionPolicy Bypass -NoProfile -NoLogo -Command "& \"%~dp0common\build.ps1\" -restore -build /p:Projects=\"%~dp0..\src\CopyToLatest\CopyToLatest.csproj\" %*; exit $LastExitCode;" +if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/eng/Publish.props b/eng/Publishing.props similarity index 95% rename from eng/Publish.props rename to eng/Publishing.props index 0177bb8e7..7f46d61ce 100644 --- a/eng/Publish.props +++ b/eng/Publishing.props @@ -9,7 +9,6 @@ $(Product) assets/$(Product) true - $(RepoRoot)/resources/images/version_badge.svg diff --git a/src/CopyToLatest/CopyToLatest.csproj b/src/CopyToLatest/CopyToLatest.csproj new file mode 100644 index 000000000..9e7c7d5af --- /dev/null +++ b/src/CopyToLatest/CopyToLatest.csproj @@ -0,0 +1,15 @@ + + + $(CoreSdkTargetFramework) + true + false + + + + + + + + + + diff --git a/src/CopyToLatest/targets/BranchInfo.props b/src/CopyToLatest/targets/BranchInfo.props new file mode 100644 index 000000000..a4b92cde1 --- /dev/null +++ b/src/CopyToLatest/targets/BranchInfo.props @@ -0,0 +1,5 @@ + + + dev/arcade + + diff --git a/src/CopyToLatest/targets/FinishBuild.targets b/src/CopyToLatest/targets/FinishBuild.targets new file mode 100644 index 000000000..c9d76ae21 --- /dev/null +++ b/src/CopyToLatest/targets/FinishBuild.targets @@ -0,0 +1,12 @@ + + + + + + diff --git a/src/core-sdk-tasks/AzurePublisher.cs b/src/core-sdk-tasks/AzurePublisher.cs new file mode 100644 index 000000000..c537331be --- /dev/null +++ b/src/core-sdk-tasks/AzurePublisher.cs @@ -0,0 +1,220 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +#if !SOURCE_BUILD +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Auth; +using Microsoft.WindowsAzure.Storage.Blob; + +namespace Microsoft.DotNet.Cli.Build +{ + public class AzurePublisher + { + public enum Product + { + SharedFramework, + Host, + HostFxr, + Sdk, + } + + private const string s_dotnetBlobContainerName = "dotnet"; + + private string _connectionString { get; set; } + private string _containerName { get; set; } + private CloudBlobContainer _blobContainer { get; set; } + + public AzurePublisher(string accountName, string accountKey, string containerName = s_dotnetBlobContainerName) + { + _containerName = containerName; + _blobContainer = GetDotnetBlobContainer(accountName, accountKey, containerName); + } + + private CloudBlobContainer GetDotnetBlobContainer(string accountName, string accountKey, string containerName) + { + var storageCredentials = new StorageCredentials(accountName, accountKey); + var storageAccount = new CloudStorageAccount(storageCredentials, true); + return GetDotnetBlobContainer(storageAccount, containerName); + } + + private CloudBlobContainer GetDotnetBlobContainer(CloudStorageAccount storageAccount, string containerName) + { + CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); + + return blobClient.GetContainerReference(containerName); + } + + public string UploadFile(string file, Product product, string version) + { + string url = CalculateRelativePathForFile(file, product, version); + CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(url); + blob.UploadFromFileAsync(file).Wait(); + SetBlobPropertiesBasedOnFileType(blob); + return url; + } + + public void PublishStringToBlob(string blob, string content) + { + CloudBlockBlob blockBlob = _blobContainer.GetBlockBlobReference(blob); + blockBlob.UploadTextAsync(content).Wait(); + + SetBlobPropertiesBasedOnFileType(blockBlob); + } + + public void CopyBlob(string sourceBlob, string targetBlob) + { + CloudBlockBlob source = _blobContainer.GetBlockBlobReference(sourceBlob); + CloudBlockBlob target = _blobContainer.GetBlockBlobReference(targetBlob); + + // Create the empty blob + using (MemoryStream ms = new MemoryStream()) + { + target.UploadFromStreamAsync(ms).Wait(); + } + + // Copy actual blob data + target.StartCopyAsync(source).Wait(); + } + + public void SetBlobPropertiesBasedOnFileType(string path) + { + CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(path); + SetBlobPropertiesBasedOnFileType(blob); + } + + private void SetBlobPropertiesBasedOnFileType(CloudBlockBlob blockBlob) + { + if (Path.GetExtension(blockBlob.Uri.AbsolutePath.ToLower()) == ".svg") + { + blockBlob.Properties.ContentType = "image/svg+xml"; + blockBlob.Properties.CacheControl = "no-cache"; + blockBlob.SetPropertiesAsync().Wait(); + } + else if (Path.GetExtension(blockBlob.Uri.AbsolutePath.ToLower()) == ".version") + { + blockBlob.Properties.ContentType = "text/plain"; + blockBlob.Properties.CacheControl = "no-cache"; + blockBlob.SetPropertiesAsync().Wait(); + } + } + + public IEnumerable ListBlobs(Product product, string version) + { + string virtualDirectory = $"{product}/{version}"; + return ListBlobs(virtualDirectory); + } + + public IEnumerable ListBlobs(string virtualDirectory) + { + CloudBlobDirectory blobDir = _blobContainer.GetDirectoryReference(virtualDirectory); + BlobContinuationToken continuationToken = new BlobContinuationToken(); + + var blobFiles = blobDir.ListBlobsSegmentedAsync(continuationToken).Result; + return blobFiles.Results.Select(bf => bf.Uri.PathAndQuery.Replace($"/{_containerName}/", string.Empty)); + } + + public string AcquireLeaseOnBlob( + string blob, + TimeSpan? maxWaitDefault = null, + TimeSpan? delayDefault = null) + { + TimeSpan maxWait = maxWaitDefault ?? TimeSpan.FromSeconds(120); + TimeSpan delay = delayDefault ?? TimeSpan.FromMilliseconds(500); + + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + + // This will throw an exception with HTTP code 409 when we cannot acquire the lease + // But we should block until we can get this lease, with a timeout (maxWaitSeconds) + while (stopWatch.ElapsedMilliseconds < maxWait.TotalMilliseconds) + { + try + { + CloudBlockBlob cloudBlob = _blobContainer.GetBlockBlobReference(blob); + Task task = cloudBlob.AcquireLeaseAsync(TimeSpan.FromMinutes(1), null); + task.Wait(); + return task.Result; + } + catch (Exception e) + { + Console.WriteLine($"Retrying lease acquisition on {blob}, {e.Message}"); + Thread.Sleep(delay); + } + } + + throw new Exception($"Unable to acquire lease on {blob}"); + } + + public void ReleaseLeaseOnBlob(string blob, string leaseId) + { + CloudBlockBlob cloudBlob = _blobContainer.GetBlockBlobReference(blob); + AccessCondition ac = new AccessCondition() { LeaseId = leaseId }; + cloudBlob.ReleaseLeaseAsync(ac).Wait(); + } + + public bool IsLatestSpecifiedVersion(string version) + { + Task task = _blobContainer.GetBlockBlobReference(version).ExistsAsync(); + task.Wait(); + return task.Result; + } + + public void DropLatestSpecifiedVersion(string version) + { + CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(version); + using (MemoryStream ms = new MemoryStream()) + { + blob.UploadFromStreamAsync(ms).Wait(); + } + } + + public void CreateBlobIfNotExists(string path) + { + Task task = _blobContainer.GetBlockBlobReference(path).ExistsAsync(); + task.Wait(); + if (!task.Result) + { + CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(path); + using (MemoryStream ms = new MemoryStream()) + { + blob.UploadFromStreamAsync(ms).Wait(); + } + } + } + + public bool TryDeleteBlob(string path) + { + try + { + DeleteBlob(path); + + return true; + } + catch (Exception e) + { + Console.WriteLine($"Deleting blob {path} failed with \r\n{e.Message}"); + + return false; + } + } + + private void DeleteBlob(string path) + { + _blobContainer.GetBlockBlobReference(path).DeleteAsync().Wait(); + } + + private static string CalculateRelativePathForFile(string file, Product product, string version) + { + return $"{product}/{version}/{Path.GetFileName(file)}"; + } + } +} +#endif \ No newline at end of file diff --git a/src/core-sdk-tasks/CopyBlobsToLatest.cs b/src/core-sdk-tasks/CopyBlobsToLatest.cs new file mode 100644 index 000000000..734898a73 --- /dev/null +++ b/src/core-sdk-tasks/CopyBlobsToLatest.cs @@ -0,0 +1,132 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +#if !SOURCE_BUILD +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace Microsoft.DotNet.Cli.Build +{ + public class CopyBlobsToLatest : Task + { + private const string feedRegex = @"(?https:\/\/(?[^\.-]+)(?[^\/]*)\/((?[a-zA-Z0-9+\/]*?\/\d{4}-\d{2}-\d{2})\/)?(?[^\/]+)\/(?.*\/)?)index\.json"; + + private AzurePublisher _azurePublisher; + + [Required] + public string FeedUrl { get; set; } + + [Required] + public string AccountKey { get; set; } + + [Required] + public string Channel { get; set; } + + [Required] + public string CommitHash { get; set; } + + [Required] + public string NugetVersion { get; set; } + + private string ContainerName { get; set; } + + private AzurePublisher AzurePublisherTool + { + get + { + if (_azurePublisher == null) + { + Match m = Regex.Match(FeedUrl, feedRegex); + if (m.Success) + { + string accountName = m.Groups["accountname"].Value; + string ContainerName = m.Groups["containername"].Value; + + _azurePublisher = new AzurePublisher( + accountName, + AccountKey, + ContainerName); + } + else + { + throw new Exception( + "Unable to parse expected feed. Please check ExpectedFeedUrl."); + } + } + + return _azurePublisher; + } + } + + public override bool Execute() + { + string targetFolder = $"{AzurePublisher.Product.Sdk}/{Channel}"; + + string targetVersionFile = $"{targetFolder}/{CommitHash}"; + string semaphoreBlob = $"{targetFolder}/publishSemaphore"; + AzurePublisherTool.CreateBlobIfNotExists(semaphoreBlob); + string leaseId = AzurePublisherTool.AcquireLeaseOnBlob(semaphoreBlob); + + // Prevent race conditions by dropping a version hint of what version this is. If we see this file + // and it is the same as our version then we know that a race happened where two+ builds finished + // at the same time and someone already took care of publishing and we have no work to do. + if (AzurePublisherTool.IsLatestSpecifiedVersion(targetVersionFile)) + { + AzurePublisherTool.ReleaseLeaseOnBlob(semaphoreBlob, leaseId); + return true; + } + else + { + Regex versionFileRegex = new Regex(@"(?[\w\d]{40})"); + + // Delete old version files + AzurePublisherTool.ListBlobs(targetFolder) + .Where(s => versionFileRegex.IsMatch(s)) + .ToList() + .ForEach(f => AzurePublisherTool.TryDeleteBlob(f)); + + // Drop the version file signaling such for any race-condition builds (see above comment). + AzurePublisherTool.DropLatestSpecifiedVersion(targetVersionFile); + } + + try + { + CopyBlobs(targetFolder); + + string cliVersion = GetVersionFileContent(CommitHash, NugetVersion); + AzurePublisherTool.PublishStringToBlob($"{targetFolder}/latest.version", cliVersion); + } + finally + { + AzurePublisherTool.ReleaseLeaseOnBlob(semaphoreBlob, leaseId); + } + + return true; + } + + private void CopyBlobs(string destinationFolder) + { + Log.LogMessage("Copying blobs to {0}/{1}", ContainerName, destinationFolder); + + foreach (string blob in AzurePublisherTool.ListBlobs(AzurePublisher.Product.Sdk, NugetVersion)) + { + string targetName = Path.GetFileName(blob) + .Replace(NugetVersion, "latest"); + + string target = $"{destinationFolder}/{targetName}"; + + AzurePublisherTool.CopyBlob(blob, target); + } + } + + private string GetVersionFileContent(string commitHash, string version) + { + return $@"{commitHash}{Environment.NewLine}{version}{Environment.NewLine}"; + } + } +} +#endif diff --git a/src/core-sdk-tasks/core-sdk-tasks.csproj b/src/core-sdk-tasks/core-sdk-tasks.csproj index c2ee30446..0230cd854 100644 --- a/src/core-sdk-tasks/core-sdk-tasks.csproj +++ b/src/core-sdk-tasks/core-sdk-tasks.csproj @@ -2,6 +2,7 @@ $(CoreSdkTargetFramework);net472 $(CoreSdkTargetFramework) + true @@ -11,6 +12,7 @@ + diff --git a/src/redist/redist.csproj b/src/redist/redist.csproj index cfe5d4d97..3491fbe1d 100644 --- a/src/redist/redist.csproj +++ b/src/redist/redist.csproj @@ -28,7 +28,7 @@ + - diff --git a/src/redist/targets/Badge.targets b/src/redist/targets/Badge.targets new file mode 100644 index 000000000..31321b8db --- /dev/null +++ b/src/redist/targets/Badge.targets @@ -0,0 +1,31 @@ + + + + $(RepoRoot)/resources/images/version_badge.svg + + + + + + + + + + + $(OSName)_$(Architecture) + rhel.6_x64 + linux_musl_x64 + linux_$(Architecture) + all_linux_distros_native_installer + + $(ArtifactsShippingPackagesDir)$(VersionBadgeMoniker)_$(Configuration)_version_badge.svg + $(ArtifactsShippingPackagesDir)$(VersionBadgeMoniker)_$(Configuration)_coherent_badge.svg + + + diff --git a/src/redist/targets/BuildCoreSdkTasks.targets b/src/redist/targets/BuildCoreSdkTasks.targets index dd25cf282..2002eedb6 100644 --- a/src/redist/targets/BuildCoreSdkTasks.targets +++ b/src/redist/targets/BuildCoreSdkTasks.targets @@ -34,5 +34,6 @@ + From b86ce49e8e13da84130bb5414b59868ea3eee201 Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 13:52:32 -0800 Subject: [PATCH 22/37] Updating the YAML file to run ci and signing. --- .gitignore | 2 ++ .vsts-ci.yml | 9 ++++--- eng/Versions.props | 7 +++++ eng/build.yml | 6 ++--- .../packaging/windows/clisdk/_common.ps1 | 26 +++++++++++++++++++ .../windows/clisdk/generatenupkg.ps1 | 2 +- 6 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 src/redist/targets/packaging/windows/clisdk/_common.ps1 diff --git a/.gitignore b/.gitignore index 260df47a9..23fe40877 100644 --- a/.gitignore +++ b/.gitignore @@ -307,3 +307,5 @@ launchSettings.json !TestAssets/TestProjects/TestAppWithLibrary/TestApp/TestApp.xproj.user !TestAssets/TestProjects/PJTestAppSimple/PJTestAppSimple.xproj.user +# Local nuget cache when the build is run as CI +.packages \ No newline at end of file diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 603f1b7b7..51e9a99aa 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -2,7 +2,7 @@ trigger: - master variables: - teamName: Roslyn-Project-System + _TeamName: Roslyn-Project-System ${{ if eq(variables['System.TeamProject'], 'public') }}: PB_PublishBlobFeedKey: PB_PublishBlobFeedUrl: @@ -58,6 +58,7 @@ jobs: _BuildArchitecture: arm _DOTNET_CLI_UI_LANGUAGE: '' _DropSuffix: '' + _AdditionalBuildParameters: '/p:DisableSourceLink=true' - template: /eng/build.yml parameters: @@ -88,7 +89,7 @@ jobs: _RuntimeIdentifier: '' _BuildArchitecture: 'x64' _DropSuffix: '' - _AdditionalBuildParameters: '-p:DisableSourceLink=true' + _AdditionalBuildParameters: '/p:DisableSourceLink=true' Build_Fedora_27_Debug_x64: _BuildConfig: Debug _DockerParameter: '--docker fedora.27' @@ -131,7 +132,7 @@ jobs: _RuntimeIdentifier: '--runtime-id rhel.6-x64' _BuildArchitecture: 'x64' _DropSuffix: '' - _AdditionalBuildParameters: '-p:DisableSourceLink=true' + _AdditionalBuildParameters: '/p:DisableSourceLink=true' Build_Arm_Debug: _BuildConfig: Debug _DockerParameter: '' @@ -175,7 +176,7 @@ jobs: _RuntimeIdentifier: '--runtime-id rhel.6-x64' _BuildArchitecture: 'x64' _DropSuffix: '' - _AdditionalBuildParameters: '-p:DisableSourceLink=true' + _AdditionalBuildParameters: '/p:DisableSourceLink=true' Build_Arm_Release: _BuildConfig: Release _DockerParameter: '' diff --git a/eng/Versions.props b/eng/Versions.props index 8ec26d651..24f08d6e0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,5 +1,12 @@ + + + 1.0.0 + preview + + 3.0.100-preview-009734 diff --git a/eng/build.yml b/eng/build.yml index ae89e3393..1b2904414 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -69,7 +69,7 @@ phases: - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - script: build.cmd $(TestParameter) - -pack -publish + -pack -publish -ci -Configuration $(BuildConfig) -Architecture $(BuildArchitecture) $(_PublishArgs) @@ -84,7 +84,7 @@ phases: - ${{ if eq(parameters.agentOs, 'Linux') }}: - script: ./build.sh $(TestParameter) - --pack --publish + --pack --publish --ci --noprettyprint --configuration $(BuildConfig) $(DockerParameter) @@ -102,7 +102,7 @@ phases: - ${{ if eq(parameters.agentOs, 'Darwin') }}: - script: ./build.sh $(TestParameter) - --pack --publish + --pack --publish --ci --noprettyprint --configuration $(BuildConfig) $(_PublishArgs) diff --git a/src/redist/targets/packaging/windows/clisdk/_common.ps1 b/src/redist/targets/packaging/windows/clisdk/_common.ps1 new file mode 100644 index 000000000..b2df24187 --- /dev/null +++ b/src/redist/targets/packaging/windows/clisdk/_common.ps1 @@ -0,0 +1,26 @@ +# +# Copyright (c) .NET Foundation and contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. +# + +. $PSScriptRoot\_utility.ps1 + +# Copy things from environment variables that were sent by the build scripts +$Rid = $env:Rid +$Tfm = $env:Tfm +$OutputDir = $env:OutputDir +$Stage1Dir = $env:Stage1Dir +$Stage1CompilationDir = $env:Stage1CompilationDir +$Stage2Dir = $env:Stage2Dir +$Stage2CompilationDir = $env:Stage2CompilationDir +$PackageDir = $env:PackageDir +$TestBinRoot = $env:TestBinRoot +$TestPackageDir = $env:TestPackageDir + +$env:Channel = "$env:RELEASE_SUFFIX" + +# Set reasonable defaults for unset variables +setEnvIfDefault "DOTNET_INSTALL_DIR" "$RepoRoot\.dotnet_stage0\win7-x64" +setEnvIfDefault "DOTNET_CLI_VERSION" "0.1.0.0" +setPathAndHomeIfDefault "$Stage2Dir" +setVarIfDefault "CONFIGURATION" "Debug" diff --git a/src/redist/targets/packaging/windows/clisdk/generatenupkg.ps1 b/src/redist/targets/packaging/windows/clisdk/generatenupkg.ps1 index f2df9810d..4ad5aab04 100644 --- a/src/redist/targets/packaging/windows/clisdk/generatenupkg.ps1 +++ b/src/redist/targets/packaging/windows/clisdk/generatenupkg.ps1 @@ -11,7 +11,7 @@ param( [Parameter(Mandatory=$true)][string]$NupkgFile ) -. "$PSScriptRoot\..\..\..\scripts\common\_common.ps1" +. "$PSScriptRoot\_common.ps1" $RepoRoot = Convert-Path "$PSScriptRoot\..\..\.." $NuGetDir = Join-Path $RepoRoot ".nuget" $NuGetExe = Join-Path $NuGetDir "nuget.exe" From 8d3608825ca7e2c6e2f050bc22dbf5c0274befe1 Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 15:49:44 -0800 Subject: [PATCH 23/37] Updating the signing plugin version to fix signing failures in our official builds. --- eng/common/templates/phases/base.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/common/templates/phases/base.yml b/eng/common/templates/phases/base.yml index e075e8b78..1b8c02349 100644 --- a/eng/common/templates/phases/base.yml +++ b/eng/common/templates/phases/base.yml @@ -85,7 +85,7 @@ phases: - task: MicroBuildSigningPlugin@2 displayName: Install MicroBuild plugin inputs: - version: 1.1.35 + version: 1.1.61 signType: $(_SignType) zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json From ca143b1f417fbb591899397540705d889c2919ae Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 16:00:50 -0800 Subject: [PATCH 24/37] Updating arcade to 1.0.0-beta.18620.4. --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 9868ffd21..4b96238c1 100644 --- a/global.json +++ b/global.json @@ -3,6 +3,6 @@ "dotnet": "3.0.100-alpha1-009697" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18617.7" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18620.4" } } \ No newline at end of file From 5e6ea18043a848109de58fc1071e7faaf9529d7d Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 17:32:48 -0800 Subject: [PATCH 25/37] Updating arcade one more time. Also, setting the core blob storage to publish assets for. --- .vsts-ci.yml | 2 +- eng/build.yml | 4 ++-- global.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 51e9a99aa..7b201e28f 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -10,7 +10,7 @@ variables: _PublishType: none _SignType: test ${{ if ne(variables['System.TeamProject'], 'public') }}: - PB_PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + PB_PublishBlobFeedUrl: https://dotnetcli.blob.core.windows.net/dotnet/index.json _DotNetPublishToBlobFeed: true _PublishType: blob _SignType: real diff --git a/eng/build.yml b/eng/build.yml index 1b2904414..e3fbff650 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -30,7 +30,7 @@ phases: ${{ if ne(variables['System.TeamProject'], 'public') }}: _HelixSource: official/dotnet/core-sdk/$(Build.SourceBranch) _OfficialBuildIdArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) - _PublishArgs: /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + _PublishArgs: /p:DotNetPublishBlobFeedKey=$(dotnetcli-storage-key) /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) @@ -57,7 +57,7 @@ phases: inputs: azureSubscription: 'DotNet-Engineering-Services_KeyVault' KeyVaultName: EngKeyVault - SecretsFilter: 'dotnetfeed-storage-access-key-1,microsoft-symbol-server-pat,symweb-symbol-server-pat' + SecretsFilter: 'dotnetcli-storage-key,microsoft-symbol-server-pat,symweb-symbol-server-pat' condition: succeeded() - task: AzureKeyVault@1 inputs: diff --git a/global.json b/global.json index 4b96238c1..ea7125c3f 100644 --- a/global.json +++ b/global.json @@ -3,6 +3,6 @@ "dotnet": "3.0.100-alpha1-009697" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18620.4" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.18620.6" } } \ No newline at end of file From 4f4468c5f13f017290e09f08463535b810ec5be0 Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 17:50:56 -0800 Subject: [PATCH 26/37] Turning off rpm and deb legs, since they are not generating the right artifacts yet and also attempt to work around the signing issue by removing the strong name siging cert that is causing issues. --- .vsts-ci.yml | 29 +++++++++++++++-------------- eng/Signing.props | 9 +++++++++ 2 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 eng/Signing.props diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 7b201e28f..06974a1fe 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -198,20 +198,21 @@ jobs: _RuntimeIdentifier: '--runtime-id linux-musl-x64' _BuildArchitecture: 'x64' _DropSuffix: '' - Build_Linux_Portable_Deb_Release_x64: - _BuildConfig: Release - _DockerParameter: '--docker ubuntu.16.04' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' - Build_Linux_Portable_Rpm_Release_x64: - _BuildConfig: Release - _DockerParameter: '--docker rhel' - _LinuxPortable: '--linux-portable' - _RuntimeIdentifier: '' - _BuildArchitecture: 'x64' - _DropSuffix: '' + # disabling these for now. I am missing something and it is not generating deb and rpm + # Build_Linux_Portable_Deb_Release_x64: + # _BuildConfig: Release + # _DockerParameter: '--docker ubuntu.16.04' + # _LinuxPortable: '--linux-portable' + # _RuntimeIdentifier: '' + # _BuildArchitecture: 'x64' + # _DropSuffix: '' + # Build_Linux_Portable_Rpm_Release_x64: + # _BuildConfig: Release + # _DockerParameter: '--docker rhel' + # _LinuxPortable: '--linux-portable' + # _RuntimeIdentifier: '' + # _BuildArchitecture: 'x64' + # _DropSuffix: '' Build_LinuxPortable_Release_x64: _BuildConfig: Release _DockerParameter: '' diff --git a/eng/Signing.props b/eng/Signing.props new file mode 100644 index 000000000..849eb3d07 --- /dev/null +++ b/eng/Signing.props @@ -0,0 +1,9 @@ + + + + + + + + + From 92217daaa8e69f5c5babf75bc84942f2dce8d4ea Mon Sep 17 00:00:00 2001 From: Livar Date: Thu, 20 Dec 2018 20:43:20 -0800 Subject: [PATCH 27/37] Removing strong name signing from our signing and fixing crossgen for arm. --- eng/Signing.props | 9 --------- src/redist/targets/Crossgen.targets | 4 +++- src/redist/targets/Signing.targets | 7 ------- 3 files changed, 3 insertions(+), 17 deletions(-) delete mode 100644 eng/Signing.props diff --git a/eng/Signing.props b/eng/Signing.props deleted file mode 100644 index 849eb3d07..000000000 --- a/eng/Signing.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/redist/targets/Crossgen.targets b/src/redist/targets/Crossgen.targets index a022b51c8..c6d07ff2f 100644 --- a/src/redist/targets/Crossgen.targets +++ b/src/redist/targets/Crossgen.targets @@ -15,6 +15,8 @@ x64_arm $(NuGetPackageRoot)/$(RuntimeNETCoreAppPackageName)/$(MicrosoftNETCoreAppPackageVersion)/runtimes/$(LibCLRJitRid)/native/$(DynamicLibPrefix)clrjit$(DynamicLibExtension) $(RedistLayoutPath)shared/$(SharedFrameworkName)/$(MicrosoftNETCoreAppPackageVersion) + * + x86 @@ -58,7 +60,7 @@ - + diff --git a/src/redist/targets/Signing.targets b/src/redist/targets/Signing.targets index 38686db5b..35bb9f6d6 100644 --- a/src/redist/targets/Signing.targets +++ b/src/redist/targets/Signing.targets @@ -28,13 +28,6 @@ - - - - - - - + + + + + + VersionNT64 AND DOTNETHOME_X64 From 23b7b332e65e7b87533512da7dcee1cdd789dd18 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Fri, 21 Dec 2018 14:58:11 -0800 Subject: [PATCH 29/37] Producing and publishing checksums. Also, publishing sdk assets ourselves, so that we can add metadata regarding where to push nupkgs. --- .vsts-ci.yml | 6 +- eng/Publishing.props | 53 ++++++++++++++-- eng/build.yml | 10 +-- src/CopyToLatest/targets/FinishBuild.targets | 6 ++ src/core-sdk-tasks/GenerateChecksums.cs | 66 ++++++++++++++++++++ src/redist/redist.csproj | 1 + src/redist/targets/BuildCoreSdkTasks.targets | 1 + src/redist/targets/Checksum.targets | 23 +++++++ 8 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 src/core-sdk-tasks/GenerateChecksums.cs create mode 100644 src/redist/targets/Checksum.targets diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 06974a1fe..22760b1e3 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -6,11 +6,13 @@ variables: ${{ if eq(variables['System.TeamProject'], 'public') }}: PB_PublishBlobFeedKey: PB_PublishBlobFeedUrl: + PB_PublishChecksumsBlobFeedUrl: _DotNetPublishToBlobFeed: false _PublishType: none _SignType: test ${{ if ne(variables['System.TeamProject'], 'public') }}: PB_PublishBlobFeedUrl: https://dotnetcli.blob.core.windows.net/dotnet/index.json + PB_PublishChecksumsBlobFeedUrl: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json _DotNetPublishToBlobFeed: true _PublishType: blob _SignType: real @@ -253,12 +255,14 @@ jobs: inputs: azureSubscription: 'DotNet-Engineering-Services_KeyVault' KeyVaultName: EngKeyVault - SecretsFilter: 'dotnetfeed-storage-access-key-1' + SecretsFilter: 'dotnetfeed-storage-access-key-1,dotnetclichecksums-storage-key' condition: succeeded() - script: eng/CopyToLatest.cmd /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotnetPublishChecksumsBlobFeedUrl=$(PB_PublishChecksumsBlobFeedUrl) + /p:DotNetPublishChecksumsBlobFeedKey=$(dotnetclichecksums-storage-key) - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/common/templates/phases/publish-build-assets.yml diff --git a/eng/Publishing.props b/eng/Publishing.props index 7f46d61ce..a75472e90 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -4,11 +4,20 @@ + + Sdk $(Product) assets/$(Product) true + $(DotnetPublishChecksumsBlobFeedUrl) + $(DotNetPublishChecksumsBlobFeedKey) + $(DotnetPublishSdkAssetsBlobFeedUrl) + $(DotNetPublishSdkAssetsBlobFeedKey) + + false + true @@ -19,16 +28,50 @@ + + + - + - + $(BlobStoragePartialRelativePath)/$(SdkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) ShipInstaller=dotnetcli - - - + + + $(BlobStoragePartialRelativePath)/$(SdkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) + ShipInstaller=dotnetclichecksums + + + + + + + diff --git a/eng/build.yml b/eng/build.yml index e3fbff650..95568565f 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -30,12 +30,14 @@ phases: ${{ if ne(variables['System.TeamProject'], 'public') }}: _HelixSource: official/dotnet/core-sdk/$(Build.SourceBranch) _OfficialBuildIdArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) - _PublishArgs: /p:DotNetPublishBlobFeedKey=$(dotnetcli-storage-key) - /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) - /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + _PublishArgs: /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + /p:DotnetPublishSdkAssetsBlobFeedUrl=$(PB_PublishBlobFeedUrl) + /p:DotNetPublishSdkAssetsBlobFeedKey=$(dotnetcli-storage-key) /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PB_PublishType=$(_PublishType) + /p:DotnetPublishChecksumsBlobFeedUrl=$(PB_PublishChecksumsBlobFeedUrl) + /p:DotNetPublishChecksumsBlobFeedKey=$(dotnetclichecksums-storage-key) _SignArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) steps: @@ -57,7 +59,7 @@ phases: inputs: azureSubscription: 'DotNet-Engineering-Services_KeyVault' KeyVaultName: EngKeyVault - SecretsFilter: 'dotnetcli-storage-key,microsoft-symbol-server-pat,symweb-symbol-server-pat' + SecretsFilter: 'dotnetcli-storage-key,dotnetclichecksums-storage-key,microsoft-symbol-server-pat,symweb-symbol-server-pat' condition: succeeded() - task: AzureKeyVault@1 inputs: diff --git a/src/CopyToLatest/targets/FinishBuild.targets b/src/CopyToLatest/targets/FinishBuild.targets index c9d76ae21..17c72b3f9 100644 --- a/src/CopyToLatest/targets/FinishBuild.targets +++ b/src/CopyToLatest/targets/FinishBuild.targets @@ -8,5 +8,11 @@ NugetVersion="$(FullNugetVersion)" Channel="$(Channel)" CommitHash="$(GitCommitHash)" /> + + diff --git a/src/core-sdk-tasks/GenerateChecksums.cs b/src/core-sdk-tasks/GenerateChecksums.cs new file mode 100644 index 000000000..4bd1ef7c0 --- /dev/null +++ b/src/core-sdk-tasks/GenerateChecksums.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using System; +using System.IO; +using System.Security.Cryptography; + +namespace Microsoft.DotNet.Build.Tasks +{ + public class GenerateChecksums : Task + { + /// + /// An item collection of files for which to generate checksums. Each item must have metadata + /// 'DestinationPath' that specifies the path of the checksum file to create. + /// + [Required] + public ITaskItem[] Items { get; set; } + + public override bool Execute() + { + foreach (ITaskItem item in Items) + { + try + { + string destinationPath = item.GetMetadata("DestinationPath"); + if (string.IsNullOrEmpty(destinationPath)) + { + throw new Exception($"Metadata 'DestinationPath' is missing for item '{item.ItemSpec}'."); + } + + if (!File.Exists(item.ItemSpec)) + { + throw new Exception($"The file '{item.ItemSpec}' does not exist."); + } + + Log.LogMessage( + MessageImportance.High, + "Generating checksum for '{0}' into '{1}'...", + item.ItemSpec, + destinationPath); + + using (FileStream stream = File.OpenRead(item.ItemSpec)) + { + HashAlgorithm hashAlgorithm = SHA512.Create(); + byte[] hash = hashAlgorithm.ComputeHash(stream); + string checksum = BitConverter.ToString(hash).Replace("-", string.Empty); + File.WriteAllText(destinationPath, checksum); + } + } + catch (Exception e) + { + // We have 2 log calls because we want a nice error message but we also want to capture the + // callstack in the log. + Log.LogError("An exception occurred while trying to generate a checksum for '{0}'.", item.ItemSpec); + Log.LogMessage(MessageImportance.Low, e.ToString()); + return false; + } + } + + return true; + } + } +} diff --git a/src/redist/redist.csproj b/src/redist/redist.csproj index 3491fbe1d..bb921b7a7 100644 --- a/src/redist/redist.csproj +++ b/src/redist/redist.csproj @@ -29,6 +29,7 @@ + diff --git a/src/redist/targets/BuildCoreSdkTasks.targets b/src/redist/targets/BuildCoreSdkTasks.targets index 2002eedb6..8eb0e1784 100644 --- a/src/redist/targets/BuildCoreSdkTasks.targets +++ b/src/redist/targets/BuildCoreSdkTasks.targets @@ -35,5 +35,6 @@ + diff --git a/src/redist/targets/Checksum.targets b/src/redist/targets/Checksum.targets new file mode 100644 index 000000000..9e35a4085 --- /dev/null +++ b/src/redist/targets/Checksum.targets @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + %(ArtifactsForGeneratingChecksums.Identity).sha + + + + From 4556ac7915395b0d36a92cea2a30050da1e3e3d1 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Fri, 21 Dec 2018 20:41:34 -0800 Subject: [PATCH 30/37] Don't produce a sha file for cab files. We don't upload those. --- src/redist/targets/Checksum.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/src/redist/targets/Checksum.targets b/src/redist/targets/Checksum.targets index 9e35a4085..f5196d7a6 100644 --- a/src/redist/targets/Checksum.targets +++ b/src/redist/targets/Checksum.targets @@ -13,6 +13,7 @@ + From be52214b629e7261829c17949963ec1fb1414e30 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Fri, 21 Dec 2018 21:27:03 -0800 Subject: [PATCH 31/37] Align the publishing properties between publish and copy latest and use the right key for the cli storage blob. --- .vsts-ci.yml | 7 ++++--- src/CopyToLatest/targets/FinishBuild.targets | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 22760b1e3..0b969bde2 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -255,14 +255,15 @@ jobs: inputs: azureSubscription: 'DotNet-Engineering-Services_KeyVault' KeyVaultName: EngKeyVault - SecretsFilter: 'dotnetfeed-storage-access-key-1,dotnetclichecksums-storage-key' + SecretsFilter: 'dotnetcli-storage-key,dotnetclichecksums-storage-key' condition: succeeded() - script: eng/CopyToLatest.cmd - /p:DotNetPublishBlobFeedUrl=$(PB_PublishBlobFeedUrl) - /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotnetPublishSdkAssetsBlobFeedUrl=$(PB_PublishBlobFeedUrl) + /p:DotNetPublishSdkAssetsBlobFeedKey=$(dotnetcli-storage-key) /p:DotnetPublishChecksumsBlobFeedUrl=$(PB_PublishChecksumsBlobFeedUrl) /p:DotNetPublishChecksumsBlobFeedKey=$(dotnetclichecksums-storage-key) + displayName: Copy to latest - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/common/templates/phases/publish-build-assets.yml diff --git a/src/CopyToLatest/targets/FinishBuild.targets b/src/CopyToLatest/targets/FinishBuild.targets index 17c72b3f9..f7675f24a 100644 --- a/src/CopyToLatest/targets/FinishBuild.targets +++ b/src/CopyToLatest/targets/FinishBuild.targets @@ -3,8 +3,8 @@ - From e0e642a543a02fd7b5b22812cf15b441f09bebf1 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Fri, 21 Dec 2018 21:43:17 -0800 Subject: [PATCH 32/37] Fixing the publishing of deb and rpm files. Also added a property to turn off publishing binaries, as we need to prevent the linux-x64 binaries from being published multiple times. --- .vsts-ci.yml | 22 ++++++++++++++-------- eng/Publishing.props | 6 ++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 0b969bde2..d8de2cfc6 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -200,7 +200,7 @@ jobs: _RuntimeIdentifier: '--runtime-id linux-musl-x64' _BuildArchitecture: 'x64' _DropSuffix: '' - # disabling these for now. I am missing something and it is not generating deb and rpm + # disabling this for now. I am missing something and it is not generating deb # Build_Linux_Portable_Deb_Release_x64: # _BuildConfig: Release # _DockerParameter: '--docker ubuntu.16.04' @@ -208,13 +208,19 @@ jobs: # _RuntimeIdentifier: '' # _BuildArchitecture: 'x64' # _DropSuffix: '' - # Build_Linux_Portable_Rpm_Release_x64: - # _BuildConfig: Release - # _DockerParameter: '--docker rhel' - # _LinuxPortable: '--linux-portable' - # _RuntimeIdentifier: '' - # _BuildArchitecture: 'x64' - # _DropSuffix: '' + # # Do not publish zips and tarballs. The linux-x64 binaries are + # # already published by Build_LinuxPortable_Release_x64 + # _AdditionalBuildParameters: '/p:PublishBinaries=false' + Build_Linux_Portable_Rpm_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker rhel' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + # Do not publish zips and tarballs. The linux-x64 binaries are + # already published by Build_LinuxPortable_Release_x64 + _AdditionalBuildParameters: '/p:PublishBinaries=false' Build_LinuxPortable_Release_x64: _BuildConfig: Release _DockerParameter: '' diff --git a/eng/Publishing.props b/eng/Publishing.props index a75472e90..bcf0a5cbb 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -18,11 +18,13 @@ false true + + true - - + + From d3e2ea24881720ea5b52c6776287f42f5864ebf8 Mon Sep 17 00:00:00 2001 From: Parallels Date: Mon, 24 Dec 2018 10:12:23 -0800 Subject: [PATCH 33/37] Fixing debs generation. The issue was that we were losing the exec permission on the apphost in the sdk folder. This caused it to not be picked up by dh_shlibsdeps. This happened because the order of the apphost acquisition was changed to be after crossgen, where we change permissions of all files under the SDK folder to 644. The fix here was to make the apphost acquisition to happen after crossgen. --- .vsts-ci.yml | 41 +++++++++---------- eng/Publishing.props | 4 +- eng/Versions.props | 2 +- src/redist/targets/GenerateInstallers.targets | 5 +-- src/redist/targets/GenerateLayout.targets | 2 +- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index d8de2cfc6..085d993dd 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -200,17 +200,16 @@ jobs: _RuntimeIdentifier: '--runtime-id linux-musl-x64' _BuildArchitecture: 'x64' _DropSuffix: '' - # disabling this for now. I am missing something and it is not generating deb - # Build_Linux_Portable_Deb_Release_x64: - # _BuildConfig: Release - # _DockerParameter: '--docker ubuntu.16.04' - # _LinuxPortable: '--linux-portable' - # _RuntimeIdentifier: '' - # _BuildArchitecture: 'x64' - # _DropSuffix: '' - # # Do not publish zips and tarballs. The linux-x64 binaries are - # # already published by Build_LinuxPortable_Release_x64 - # _AdditionalBuildParameters: '/p:PublishBinaries=false' + Build_Linux_Portable_Deb_Release_x64: + _BuildConfig: Release + _DockerParameter: '--docker ubuntu.16.04' + _LinuxPortable: '--linux-portable' + _RuntimeIdentifier: '' + _BuildArchitecture: 'x64' + _DropSuffix: '' + # Do not publish zips and tarballs. The linux-x64 binaries are + # already published by Build_LinuxPortable_Release_x64 + _AdditionalBuildParameters: '/p:PublishBinaries=false' Build_Linux_Portable_Rpm_Release_x64: _BuildConfig: Release _DockerParameter: '--docker rhel' @@ -271,13 +270,13 @@ jobs: /p:DotNetPublishChecksumsBlobFeedKey=$(dotnetclichecksums-storage-key) displayName: Copy to latest -- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - template: /eng/common/templates/phases/publish-build-assets.yml - parameters: - dependsOn: - - Windows_NT - - Linux - - Darwin - - Copy_SDK_To_Latest - queue: - name: Hosted VS2017 \ No newline at end of file +# - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: +# - template: /eng/common/templates/phases/publish-build-assets.yml +# parameters: +# dependsOn: +# - Windows_NT +# - Linux +# - Darwin +# - Copy_SDK_To_Latest +# queue: +# name: Hosted VS2017 \ No newline at end of file diff --git a/eng/Publishing.props b/eng/Publishing.props index bcf0a5cbb..04dcd407a 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -4,8 +4,6 @@ - - Sdk $(Product) @@ -22,6 +20,8 @@ true + + diff --git a/eng/Versions.props b/eng/Versions.props index 24f08d6e0..87e4a7ac8 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -27,7 +27,7 @@ - 3.0.0-preview-27205-02 + 3.0.0-preview-27218-01 $(MicrosoftNETCoreAppPackageVersion) diff --git a/src/redist/targets/GenerateInstallers.targets b/src/redist/targets/GenerateInstallers.targets index 9af4a2bab..32a7bf21b 100644 --- a/src/redist/targets/GenerateInstallers.targets +++ b/src/redist/targets/GenerateInstallers.targets @@ -1,12 +1,11 @@ - - diff --git a/src/redist/targets/GenerateLayout.targets b/src/redist/targets/GenerateLayout.targets index 404b6282c..3da5f6d88 100644 --- a/src/redist/targets/GenerateLayout.targets +++ b/src/redist/targets/GenerateLayout.targets @@ -291,8 +291,8 @@ LayoutTemplates; LayoutBundledTools; RetargetTools; - LayoutAppHostTemplate; CrossgenLayout; + LayoutAppHostTemplate; SignLayout" AfterTargets="Build"> From 3ccbd61dc06c8701af085b33e364ea87175f8f3c Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Wed, 26 Dec 2018 09:48:10 -0800 Subject: [PATCH 34/37] Fixing a build failure due to the merge from master. --- eng/Versions.props | 5 +++++ .../RequiresAspNetCore.cs | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 9b9bf31aa..a909da11c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,5 +1,10 @@ + + + true + + diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs index e55474843..e7df9bf8a 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/RequiresAspNetCore.cs @@ -9,9 +9,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities { public RequiresAspNetCore() { - var repoDirectoriesProvider = new RepoDirectoriesProvider(); - - if (repoDirectoriesProvider.Stage2AspNetCore == null) + if (RepoDirectoriesProvider.Stage2AspNetCore == null) { this.Skip = $"This test requires a AspNetCore but it isn't present."; } From f89ff734086338a30cd70ce1ef713ad00764dacb Mon Sep 17 00:00:00 2001 From: Livar Date: Wed, 26 Dec 2018 10:46:40 -0800 Subject: [PATCH 35/37] Fixing MSI generation. We were missing the Windows desktop version as a parameter to the bundle script. --- src/redist/targets/GenerateMSIs.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/src/redist/targets/GenerateMSIs.targets b/src/redist/targets/GenerateMSIs.targets index 896642601..5d3a075a6 100644 --- a/src/redist/targets/GenerateMSIs.targets +++ b/src/redist/targets/GenerateMSIs.targets @@ -137,6 +137,7 @@ '$(MsiVersion)' ^ '$(SimpleVersion)' ^ '$(NugetVersion)' ^ + '$(MicrosoftWindowsDesktopPackageVersion)' ^ '$(CombinedFrameworkSDKHostInstallerUpgradeCode)' ^ '$(Architecture)' ^ '$(MicrosoftNETCoreAppPackageVersion)' ^ From a0b8eeb8c95a1e3037c743aff705bdf06b3d76ab Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Wed, 26 Dec 2018 11:42:24 -0800 Subject: [PATCH 36/37] Prevent attempting to publish duplicate badge and checksum files. --- .vsts-ci.yml | 4 ++-- eng/Publishing.props | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 085d993dd..639af36b9 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -209,7 +209,7 @@ jobs: _DropSuffix: '' # Do not publish zips and tarballs. The linux-x64 binaries are # already published by Build_LinuxPortable_Release_x64 - _AdditionalBuildParameters: '/p:PublishBinaries=false' + _AdditionalBuildParameters: '/p:PublishBinariesAndBadge=false' Build_Linux_Portable_Rpm_Release_x64: _BuildConfig: Release _DockerParameter: '--docker rhel' @@ -219,7 +219,7 @@ jobs: _DropSuffix: '' # Do not publish zips and tarballs. The linux-x64 binaries are # already published by Build_LinuxPortable_Release_x64 - _AdditionalBuildParameters: '/p:PublishBinaries=false' + _AdditionalBuildParameters: '/p:PublishBinariesAndBadge=false' Build_LinuxPortable_Release_x64: _BuildConfig: Release _DockerParameter: '' diff --git a/eng/Publishing.props b/eng/Publishing.props index 04dcd407a..05fc2b358 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -17,14 +17,14 @@ false true - true + true - - + + @@ -34,6 +34,8 @@ + + Date: Wed, 26 Dec 2018 11:55:10 -0800 Subject: [PATCH 37/37] Actually only include the badge when publishing badge and binaries. --- eng/Publishing.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Publishing.props b/eng/Publishing.props index 05fc2b358..8e4a0402e 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -31,7 +31,7 @@ - +