Merge branch 'dev/arcade' into patch-1
This commit is contained in:
commit
671aa19d0d
62 changed files with 1972 additions and 680 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -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
|
351
.vsts-ci.yml
351
.vsts-ci.yml
|
@ -2,41 +2,65 @@ trigger:
|
|||
- master
|
||||
|
||||
variables:
|
||||
teamName: Roslyn-Project-System
|
||||
_TeamName: Roslyn-Project-System
|
||||
${{ 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
|
||||
|
||||
phases:
|
||||
jobs:
|
||||
- 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
|
||||
_DOTNET_CLI_UI_LANGUAGE: ''
|
||||
_DropSuffix: ''
|
||||
_AdditionalBuildParameters: '/p:DisableSourceLink=true'
|
||||
|
||||
- template: /eng/build.yml
|
||||
parameters:
|
||||
|
@ -45,90 +69,155 @@ 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: ''
|
||||
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: ''
|
||||
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: ''
|
||||
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: ''
|
||||
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: ''
|
||||
# Do not publish zips and tarballs. The linux-x64 binaries are
|
||||
# already published by Build_LinuxPortable_Release_x64
|
||||
_AdditionalBuildParameters: '/p:PublishBinariesAndBadge=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:PublishBinariesAndBadge=false'
|
||||
Build_LinuxPortable_Release_x64:
|
||||
_BuildConfig: Release
|
||||
_DockerParameter: ''
|
||||
|
@ -136,20 +225,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:
|
||||
|
@ -159,3 +234,47 @@ 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')) }}:
|
||||
- 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: 'dotnetcli-storage-key,dotnetclichecksums-storage-key'
|
||||
condition: succeeded()
|
||||
|
||||
- script: eng/CopyToLatest.cmd
|
||||
/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
|
||||
# parameters:
|
||||
# dependsOn:
|
||||
# - Windows_NT
|
||||
# - Linux
|
||||
# - Darwin
|
||||
# - Copy_SDK_To_Latest
|
||||
# queue:
|
||||
# name: Hosted VS2017
|
380
README.md
380
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<br>(3.0.x Runtime) | Release/2.1.2XX<br>(2.0.x Runtime) | Release/2.1.401<br>(2.1.3 Runtime) | Release/2.1.4XX<br>(2.1.2 Runtime) | Release/2.2.1XX<br>(2.2.x Runtime) |
|
||||
| Platform | Master<br>(3.0.x Runtime) | Release/2.2.2XX<br>(2.2.x Runtime) | Release/2.2.1XX<br>(2.2.x Runtime) | Release/2.1.6XX<br>(2.1.6 Runtime) | Release/2.1.5XX<br>(2.1.5 Runtime) |
|
||||
|---------|:----------:|:----------:|:----------:|:----------:|:----------:|
|
||||
| **Windows (x64)** | [![][win-x64-badge-master]][win-x64-version-master]<br>[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]<br>[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-2.1.2XX]][win-x64-version-2.1.2XX]<br>[Installer][win-x64-installer-2.1.2XX] - [Checksum][win-x64-installer-checksum-2.1.2XX]<br>[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]<br>[Installer][win-x64-installer-2.1.401] - [Checksum][win-x64-installer-checksum-2.1.401]<br>[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]<br>[Installer][win-x64-installer-2.1.4XX] - [Checksum][win-x64-installer-checksum-2.1.4XX]<br>[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]<br>[Installer][win-x64-installer-2.2.1XX] - [Checksum][win-x64-installer-checksum-2.2.1XX]<br>[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]<br>[Installer][win-x86-installer-master] - [Checksum][win-x86-installer-checksum-master]<br>[zip][win-x86-zip-master] - [Checksum][win-x86-zip-checksum-master] | [![][win-x86-badge-2.1.2XX]][win-x86-version-2.1.2XX]<br>[Installer][win-x86-installer-2.1.2XX] - [Checksum][win-x86-installer-checksum-2.1.2XX]<br>[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]<br>[Installer][win-x86-installer-2.1.401] - [Checksum][win-x86-installer-checksum-2.1.401]<br>[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]<br>[Installer][win-x86-installer-2.1.4XX] - [Checksum][win-x86-installer-checksum-2.1.4XX]<br>[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]<br>[Installer][win-x86-installer-2.2.1XX] - [Checksum][win-x86-installer-checksum-2.2.1XX]<br>[zip][win-x86-zip-2.2.1XX] - [Checksum][win-x86-zip-checksum-2.2.1XX] |
|
||||
| **macOS** | [![][osx-badge-master]][osx-version-master]<br>[Installer][osx-installer-master] - [Checksum][osx-installer-checksum-master]<br>[tar.gz][osx-targz-master] - [Checksum][osx-targz-checksum-master] | [![][osx-badge-2.1.2XX]][osx-version-2.1.2XX]<br>[Installer][osx-installer-2.1.2XX] - [Checksum][osx-installer-checksum-2.1.2XX]<br>[tar.gz][osx-targz-2.1.2XX] - [Checksum][osx-targz-checksum-2.1.2XX] | [![][osx-badge-2.1.401]][osx-version-2.1.401]<br>[Installer][osx-installer-2.1.401] - [Checksum][osx-installer-checksum-2.1.401]<br>[tar.gz][osx-targz-2.1.401] - [Checksum][osx-targz-checksum-2.1.401] | [![][osx-badge-2.1.4XX]][osx-version-2.1.4XX]<br>[Installer][osx-installer-2.1.4XX] - [Checksum][osx-installer-checksum-2.1.4XX]<br>[tar.gz][osx-targz-2.1.4XX] - [Checksum][osx-targz-checksum-2.1.4XX] | [![][osx-badge-2.2.1XX]][osx-version-2.2.1XX]<br>[Installer][osx-installer-2.2.1XX] - [Checksum][osx-installer-checksum-2.2.1XX]<br>[tar.gz][osx-targz-2.2.1XX] - [Checksum][osx-targz-checksum-2.2.1XX] |
|
||||
| **Linux x64** | [![][linux-badge-master]][linux-version-master]<br>[DEB Installer][linux-DEB-installer-master] - [Checksum][linux-DEB-installer-checksum-master]<br>[RPM Installer][linux-RPM-installer-master] - [Checksum][linux-RPM-installer-checksum-master]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-master] - [Checksum][linux-targz-checksum-master] | [![][linux-badge-2.1.2XX]][linux-version-2.1.2XX]<br>[tar.gz][linux-targz-2.1.2XX] - [Checksum][linux-targz-checksum-2.1.2XX] | [![][linux-badge-2.1.401]][linux-version-2.1.401]<br>[DEB Installer][linux-DEB-installer-2.1.401] - [Checksum][linux-DEB-installer-checksum-2.1.401]<br>[RPM Installer][linux-RPM-installer-2.1.401] - [Checksum][linux-RPM-installer-checksum-2.1.401]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.1.401] - [Checksum][linux-targz-checksum-2.1.401] | [![][linux-badge-2.1.4XX]][linux-version-2.1.4XX]<br>[DEB Installer][linux-DEB-installer-2.1.4XX] - [Checksum][linux-DEB-installer-checksum-2.1.4XX]<br>[RPM Installer][linux-RPM-installer-2.1.4XX] - [Checksum][linux-RPM-installer-checksum-2.1.4XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.1.4XX] - [Checksum][linux-targz-checksum-2.1.4XX] | [![][linux-badge-2.2.1xx]][linux-version-2.2.1xx]<br>[DEB Installer][linux-DEB-installer-2.2.1XX] - [Checksum][linux-DEB-installer-checksum-2.2.1XX]<br>[RPM Installer][linux-RPM-installer-2.2.1XX] - [Checksum][linux-RPM-installer-checksum-2.2.1XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.2.1XX] - [Checksum][linux-targz-checksum-2.2.1XX] |
|
||||
| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[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]<br>[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]<br>[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-2.2.2XX]][win-x64-version-2.2.2XX]<br>[Installer][win-x64-installer-2.2.2XX] - [Checksum][win-x64-installer-checksum-2.2.2XX]<br>[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]<br>[Installer][win-x64-installer-2.2.1XX] - [Checksum][win-x64-installer-checksum-2.2.1XX]<br>[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]<br>[Installer][win-x64-installer-2.1.6XX] - [Checksum][win-x64-installer-checksum-2.1.6XX]<br>[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]<br>[Installer][win-x64-installer-2.1.5XX] - [Checksum][win-x64-installer-checksum-2.1.5XX]<br>[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]<br>[Installer][win-x86-installer-master] - [Checksum][win-x86-installer-checksum-master]<br>[zip][win-x86-zip-master] - [Checksum][win-x86-zip-checksum-master] | [![][win-x86-badge-2.2.2XX]][win-x86-version-2.2.2XX]<br>[Installer][win-x86-installer-2.2.2XX] - [Checksum][win-x86-installer-checksum-2.2.2XX]<br>[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]<br>[Installer][win-x86-installer-2.2.1XX] - [Checksum][win-x86-installer-checksum-2.2.1XX]<br>[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]<br>[Installer][win-x86-installer-2.1.6XX] - [Checksum][win-x86-installer-checksum-2.1.6XX]<br>[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]<br>[Installer][win-x86-installer-2.1.5XX] - [Checksum][win-x86-installer-checksum-2.1.5XX]<br>[zip][win-x86-zip-2.1.5XX] - [Checksum][win-x86-zip-checksum-2.1.5XX] |
|
||||
| **macOS** | [![][osx-badge-master]][osx-version-master]<br>[Installer][osx-installer-master] - [Checksum][osx-installer-checksum-master]<br>[tar.gz][osx-targz-master] - [Checksum][osx-targz-checksum-master] | [![][osx-badge-2.2.2XX]][osx-version-2.2.2XX]<br>[Installer][osx-installer-2.2.2XX] - [Checksum][osx-installer-checksum-2.2.2XX]<br>[tar.gz][osx-targz-2.2.2XX] - [Checksum][osx-targz-checksum-2.2.2XX] |[![][osx-badge-2.2.1XX]][osx-version-2.2.1XX]<br>[Installer][osx-installer-2.2.1XX] - [Checksum][osx-installer-checksum-2.2.1XX]<br>[tar.gz][osx-targz-2.2.1XX] - [Checksum][osx-targz-checksum-2.2.1XX] |[![][osx-badge-2.1.6XX]][osx-version-2.1.6XX]<br>[Installer][osx-installer-2.1.6XX] - [Checksum][osx-installer-checksum-2.1.6XX]<br>[tar.gz][osx-targz-2.1.6XX] - [Checksum][osx-targz-checksum-2.1.6XX] | [![][osx-badge-2.1.5XX]][osx-version-2.1.5XX]<br>[Installer][osx-installer-2.1.5XX] - [Checksum][osx-installer-checksum-2.1.5XX]<br>[tar.gz][osx-targz-2.1.5XX] - [Checksum][osx-targz-checksum-2.1.5XX] |
|
||||
| **Linux x64** | [![][linux-badge-master]][linux-version-master]<br>[DEB Installer][linux-DEB-installer-master] - [Checksum][linux-DEB-installer-checksum-master]<br>[RPM Installer][linux-RPM-installer-master] - [Checksum][linux-RPM-installer-checksum-master]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-master] - [Checksum][linux-targz-checksum-master] | [![][linux-badge-2.2.2xx]][linux-version-2.2.2xx]<br>[DEB Installer][linux-DEB-installer-2.2.2XX] - [Checksum][linux-DEB-installer-checksum-2.2.2XX]<br>[RPM Installer][linux-RPM-installer-2.2.2XX] - [Checksum][linux-RPM-installer-checksum-2.2.2XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.2.2XX] - [Checksum][linux-targz-checksum-2.2.2XX] |[![][linux-badge-2.2.1xx]][linux-version-2.2.1xx]<br>[DEB Installer][linux-DEB-installer-2.2.1XX] - [Checksum][linux-DEB-installer-checksum-2.2.1XX]<br>[RPM Installer][linux-RPM-installer-2.2.1XX] - [Checksum][linux-RPM-installer-checksum-2.2.1XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.2.1XX] - [Checksum][linux-targz-checksum-2.2.1XX] |[![][linux-badge-2.1.6XX]][linux-version-2.1.6XX]<br>[DEB Installer][linux-DEB-installer-2.1.6XX] - [Checksum][linux-DEB-installer-checksum-2.1.6XX]<br>[RPM Installer][linux-RPM-installer-2.1.6XX] - [Checksum][linux-RPM-installer-checksum-2.1.6XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.1.6XX] - [Checksum][linux-targz-checksum-2.1.6XX] | [![][linux-badge-2.1.5XX]][linux-version-2.1.5XX]<br>[DEB Installer][linux-DEB-installer-2.1.5XX] - [Checksum][linux-DEB-installer-checksum-2.1.5XX]<br>[RPM Installer][linux-RPM-installer-2.1.5XX] - [Checksum][linux-RPM-installer-checksum-2.1.5XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-2.1.5XX] - [Checksum][linux-targz-checksum-2.1.5XX] |
|
||||
| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]<br>[tar.gz][linux-arm-targz-master] - [Checksum][linux-arm-targz-checksum-master] | [![][linux-arm-badge-2.2.2XX]][linux-arm-version-2.2.2XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-arm64-targz-master] - [Checksum][linux-arm64-targz-checksum-master] | [![][linux-arm64-badge-2.2.2XX]][linux-arm64-version-2.2.2XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][rhel-6-targz-master] - [Checksum][rhel-6-targz-checksum-master] | [![][rhel-6-badge-2.2.2XX]][rhel-6-version-2.2.2XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[tar.gz][linux-musl-targz-master] - [Checksum][linux-musl-targz-checksum-master] | [![][linux-musl-badge-2.2.2XX]][linux-musl-version-2.2.2XX]<br>[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]<br>[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]<br>[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]<br>[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]<br>[zip][win-arm-zip-master] - [Checksum][win-arm-zip-checksum-master] | [![][win-arm-badge-2.2.2XX]][win-arm-version-2.2.2XX]<br>[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]<br>[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]<br>[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 Build<sup>2</sup>
|
||||
|
||||
| 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
|
||||
--------------------
|
||||
|
|
7
eng/CopyToLatest.cmd
Normal file
7
eng/CopyToLatest.cmd
Normal file
|
@ -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%
|
81
eng/Publishing.props
Normal file
81
eng/Publishing.props
Normal file
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the MIT license. See License.txt in the project root for full license information. -->
|
||||
<Project>
|
||||
|
||||
<Import Project="$(RepoRoot)\src\redist\targets\Versions.targets" />
|
||||
|
||||
<PropertyGroup>
|
||||
<Product>Sdk</Product>
|
||||
<BlobStoragePartialRelativePath>$(Product)</BlobStoragePartialRelativePath>
|
||||
<BlobStoragePartialRelativePath Condition="'$(IsNotOrchestratedPublish)' == 'false'">assets/$(Product)</BlobStoragePartialRelativePath>
|
||||
<PublishToBlobFeedFlatContainer>true</PublishToBlobFeedFlatContainer>
|
||||
<ChecksumsFeedUrl>$(DotnetPublishChecksumsBlobFeedUrl)</ChecksumsFeedUrl>
|
||||
<ChecksumsAccountKey>$(DotNetPublishChecksumsBlobFeedKey)</ChecksumsAccountKey>
|
||||
<SdkAssetsFeedUrl>$(DotnetPublishSdkAssetsBlobFeedUrl)</SdkAssetsFeedUrl>
|
||||
<SdkAssetsAzureAccountKey>$(DotNetPublishSdkAssetsBlobFeedKey)</SdkAssetsAzureAccountKey>
|
||||
|
||||
<PublishSdkAssetsAndChecksumsToBlob>false</PublishSdkAssetsAndChecksumsToBlob>
|
||||
<PublishSdkAssetsAndChecksumsToBlob Condition=" '$(ChecksumsFeedUrl)' != '' and '$(SdkAssetsFeedUrl)' != '' ">true</PublishSdkAssetsAndChecksumsToBlob>
|
||||
|
||||
<PublishBinariesAndBadge Condition=" '$(PublishBinariesAndBadge)' == '' ">true</PublishBinariesAndBadge>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.dotnet.build.tasks.feed\$(MicrosoftDotNetBuildTasksFeedVersion)\build\Microsoft.DotNet.Build.Tasks.Feed.targets" Condition=" '$(PublishSdkAssetsAndChecksumsToBlob)' == 'true' " />
|
||||
|
||||
<ItemGroup>
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.zip" Condition=" '$(PublishBinariesAndBadge)' == 'true' " />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.tar.gz" Condition=" '$(PublishBinariesAndBadge)' == 'true' " />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.pkg" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.exe" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.deb" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.rpm" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.msi" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.nupkg" />
|
||||
<SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.svg" Condition=" '$(PublishBinariesAndBadge)' == 'true' " />
|
||||
|
||||
<CheckSumsToPublish Include="$(ArtifactsShippingPackagesDir)*.sha" />
|
||||
<CheckSumsToPublish Remove="$(ArtifactsShippingPackagesDir)*.zip.sha" Condition=" '$(PublishBinariesAndBadge)' == 'false' "/>
|
||||
<CheckSumsToPublish Remove="$(ArtifactsShippingPackagesDir)*.tar.gz.sha" Condition=" '$(PublishBinariesAndBadge)' == 'false' "/>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PublishSdkAssetsAndChecksums"
|
||||
BeforeTargets="Publish"
|
||||
DependsOnTargets="SetSdkVersionInfo"
|
||||
Condition=" '$(PublishSdkAssetsAndChecksumsToBlob)' == 'true' ">
|
||||
<ItemGroup>
|
||||
<SdkAssetsToPushToBlobFeed Include="@(SdkAssetsToPublish)" IsShipping="true" >
|
||||
<RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(SdkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
|
||||
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
|
||||
</SdkAssetsToPushToBlobFeed>
|
||||
|
||||
<ChecksumsToPushToBlobFeed Include="@(CheckSumsToPublish)" IsShipping="true" >
|
||||
<RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(SdkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
|
||||
<ManifestArtifactData>ShipInstaller=dotnetclichecksums</ManifestArtifactData>
|
||||
</ChecksumsToPushToBlobFeed>
|
||||
</ItemGroup>
|
||||
|
||||
<PushToBlobFeed
|
||||
ExpectedFeedUrl="$(SdkAssetsFeedUrl)"
|
||||
AccountKey="$(SdkAssetsAzureAccountKey)"
|
||||
ItemsToPush="@(SdkAssetsToPushToBlobFeed)"
|
||||
ManifestBuildData="Location=$(SdkAssetsFeedUrl)"
|
||||
ManifestRepoUri="$(BUILD_REPOSITORY_URI)"
|
||||
ManifestBranch="$(BUILD_SOURCEBRANCH)"
|
||||
ManifestBuildId="$(BUILD_BUILDNUMBER)"
|
||||
ManifestCommit="$(BUILD_SOURCEVERSION)"
|
||||
AssetManifestPath="$(AssetManifestFilePath)"
|
||||
PublishFlatContainer="true"/>
|
||||
|
||||
<PushToBlobFeed
|
||||
ExpectedFeedUrl="$(ChecksumsFeedUrl)"
|
||||
AccountKey="$(ChecksumsAccountKey)"
|
||||
ItemsToPush="@(ChecksumsToPushToBlobFeed)"
|
||||
ManifestBuildData="Location=$(ChecksumsFeedUrl)"
|
||||
ManifestRepoUri="$(BUILD_REPOSITORY_URI)"
|
||||
ManifestBranch="$(BUILD_SOURCEBRANCH)"
|
||||
ManifestBuildId="$(BUILD_BUILDNUMBER)"
|
||||
ManifestCommit="$(BUILD_SOURCEVERSION)"
|
||||
AssetManifestPath="$(AssetManifestFilePath)"
|
||||
PublishFlatContainer="true"/>
|
||||
</Target>
|
||||
</Project>
|
|
@ -4,7 +4,7 @@
|
|||
<MicrosoftDotNetCliUtilsPackageVersion>3.0.100-preview.18580.6</MicrosoftDotNetCliUtilsPackageVersion>
|
||||
<MicrosoftDotNetCliCommandLinePackageVersion>0.1.1</MicrosoftDotNetCliCommandLinePackageVersion>
|
||||
<MicrosoftNETTestSdkPackageVersion>15.8.0</MicrosoftNETTestSdkPackageVersion>
|
||||
<MicrosoftDotNetPlatformAbstractionsPackageVersion>3.0.0-preview-27205-02</MicrosoftDotNetPlatformAbstractionsPackageVersion>
|
||||
<MicrosoftDotNetPlatformAbstractionsPackageVersion>3.0.0-preview-27218-01</MicrosoftDotNetPlatformAbstractionsPackageVersion>
|
||||
<MicrosoftDotNetProjectJsonMigrationPackageVersion>1.3.1</MicrosoftDotNetProjectJsonMigrationPackageVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<!-- Arcade features -->
|
||||
<PropertyGroup>
|
||||
<ToolsetVersion>3.0.100-preview-009734</ToolsetVersion>
|
||||
<UsingToolNetFrameworkReferenceAssemblies>true</UsingToolNetFrameworkReferenceAssemblies>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- This is a fake version to fool arcade. In this repo, we handle the versioning
|
||||
of assets ourselves, since all we do is generate zips/tarballs and native installers. -->
|
||||
<PropertyGroup>
|
||||
<VersionPrefix>1.0.0</VersionPrefix>
|
||||
<PreReleaseVersionLabel>preview</PreReleaseVersionLabel>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<ToolsetVersion>3.0.100-preview-009741</ToolsetVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
@ -20,7 +32,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview-27205-02</MicrosoftNETCoreAppPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview-27218-01</MicrosoftNETCoreAppPackageVersion>
|
||||
<MicrosoftNETCoreDotNetHostResolverPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</MicrosoftNETCoreDotNetHostResolverPackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -38,7 +50,7 @@
|
|||
<SharedHostVersion>$(MicrosoftNETCoreAppPackageVersion)</SharedHostVersion>
|
||||
<HostFxrVersion>$(MicrosoftNETCoreAppPackageVersion)</HostFxrVersion>
|
||||
<AspNetCoreVersion>$(MicrosoftAspNetCoreAppPackageVersion)</AspNetCoreVersion>
|
||||
<MicrosoftWindowsDesktopPackageVersion>3.0.0-alpha-27128-4</MicrosoftWindowsDesktopPackageVersion>
|
||||
<MicrosoftWindowsDesktopPackageVersion>3.0.0-alpha-27218-3</MicrosoftWindowsDesktopPackageVersion>
|
||||
<MicrosoftDotnetWpfProjectTemplatesPackageVersion>$(MicrosoftWindowsDesktopPackageVersion)</MicrosoftDotnetWpfProjectTemplatesPackageVersion>
|
||||
<MicrosoftDotnetWinFormsProjectTemplatesPackageVersion>$(MicrosoftWindowsDesktopPackageVersion)</MicrosoftDotnetWinFormsProjectTemplatesPackageVersion>
|
||||
</PropertyGroup>
|
||||
|
|
|
@ -18,11 +18,27 @@ 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: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:
|
||||
- script: 'eng\setbuildinfo.bat $(BuildArchitecture) $(BuildConfig)'
|
||||
|
@ -37,12 +53,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: 'dotnetcli-storage-key,dotnetclichecksums-storage-key,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
|
||||
-pack -publish -ci
|
||||
-Configuration $(BuildConfig)
|
||||
-Architecture $(BuildArchitecture)
|
||||
$(_PublishArgs)
|
||||
$(_SignArgs)
|
||||
$(_OfficialBuildIdArgs)
|
||||
$(AdditionalBuildParameters)
|
||||
displayName: Build
|
||||
env:
|
||||
|
@ -52,13 +86,16 @@ phases:
|
|||
- ${{ if eq(parameters.agentOs, 'Linux') }}:
|
||||
- script: ./build.sh
|
||||
$(TestParameter)
|
||||
--pack --publish
|
||||
--pack --publish --ci
|
||||
--noprettyprint
|
||||
--configuration $(BuildConfig)
|
||||
$(DockerParameter)
|
||||
--architecture $(BuildArchitecture)
|
||||
$(LinuxPortable)
|
||||
$(RuntimeId)
|
||||
$(_PublishArgs)
|
||||
$(_SignArgs)
|
||||
$(_OfficialBuildIdArgs)
|
||||
$(AdditionalBuildParameters)
|
||||
displayName: Build
|
||||
env:
|
||||
|
@ -67,9 +104,12 @@ phases:
|
|||
- ${{ if eq(parameters.agentOs, 'Darwin') }}:
|
||||
- script: ./build.sh
|
||||
$(TestParameter)
|
||||
--pack --publish
|
||||
--pack --publish --ci
|
||||
--noprettyprint
|
||||
--configuration $(BuildConfig)
|
||||
$(_PublishArgs)
|
||||
$(_SignArgs)
|
||||
$(_OfficialBuildIdArgs)
|
||||
displayName: Build
|
||||
|
||||
- task: PublishTestResults@1
|
||||
|
|
|
@ -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 %*"
|
|
@ -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%
|
||||
|
|
37
eng/common/PublishToPackageFeed.proj
Normal file
37
eng/common/PublishToPackageFeed.proj
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!--
|
||||
This MSBuild file is intended to be used as the body of the default
|
||||
publishing release pipeline. The release pipeline will use this file
|
||||
to invoke the PushToStaticFeed task that will read the build asset
|
||||
manifest and publish the assets described in the manifest to
|
||||
informed target feeds.
|
||||
-->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(MSBuildThisFileDirectory)MicrosoftDotNetBuildTasksFeedVersion.props" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.dotnet.build.tasks.feed\$(MicrosoftDotNetBuildTasksFeedVersion)\build\Microsoft.DotNet.Build.Tasks.Feed.targets" />
|
||||
|
||||
<Target Name="PublishToFeed">
|
||||
<Error Condition="'$(TargetStaticFeed)' == ''" Text="TargetStaticFeed: Target feed for publishing assets wasn't provided." />
|
||||
<Error Condition="'$(AccountKeyToStaticFeed)' == ''" Text="AccountKeyToStaticFeed: Account key for target feed wasn't provided." />
|
||||
<Error Condition="'$(FullPathAssetManifest)' == ''" Text="Full path to asset manifest wasn't provided." />
|
||||
<Error Condition="'$(FullPathBlobBasePath)' == '' AND '$(FullPathPackageBasePath)' == ''" Text="A valid full path to BlobBasePath of PackageBasePath is required." />
|
||||
|
||||
<PushArtifactsInManifestToFeed
|
||||
ExpectedFeedUrl="$(TargetStaticFeed)"
|
||||
AccountKey="$(AccountKeyToStaticFeed)"
|
||||
Overwrite="$(OverrideAssetsWithSameName)"
|
||||
PassIfExistingItemIdentical="$(PassIfExistingItemIdentical)"
|
||||
MaxClients="$(MaxParallelUploads)"
|
||||
UploadTimeoutInMinutes="$(MaxUploadTimeoutInMinutes)"
|
||||
AssetManifestPath="$(FullPathAssetManifest)"
|
||||
BlobAssetsBasePath="$(FullPathBlobBasePath)"
|
||||
PackageAssetsBasePath="$(FullPathPackageBasePath)" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.DotNet.Build.Tasks.Feed" Version="$(MicrosoftDotNetBuildTasksFeedVersion)" />
|
||||
</ItemGroup>
|
||||
</Project>
|
28
eng/common/README.md
Normal file
28
eng/common/README.md
Normal file
|
@ -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.
|
|
@ -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 <value> Build configuration Debug, Release"
|
||||
Write-Host " -verbosity <value> Msbuild verbosity (q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic])"
|
||||
Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"
|
||||
Write-Host " -verbosity <value> 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
|
||||
|
|
238
eng/common/build.sh
Normal file → Executable file
238
eng/common/build.sh
Normal file → Executable file
|
@ -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 <value> Build configuration: 'Debug' or 'Release' (short: --c)"
|
||||
echo " --verbosity <value> 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 <value> 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 <value> Sets nodereuse msbuild parameter ('true' or 'false')"
|
||||
echo " --warnAsError <value> 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 <value> Build configuration Debug, Release"
|
||||
echo " --verbosity <value> 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 <value> 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
|
||||
|
|
0
eng/common/cibuild.sh
Normal file → Executable file
0
eng/common/cibuild.sh
Normal file → Executable file
|
@ -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
|
||||
|
|
13
eng/common/darc-init.sh
Normal file → Executable file
13
eng/common/darc-init.sh
Normal file → Executable file
|
@ -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
|
||||
|
|
|
@ -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
|
21
eng/common/msbuild.sh
Normal file → Executable file
21
eng/common/msbuild.sh
Normal file → Executable file
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 }}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }}
|
||||
|
|
80
eng/common/templates/steps/send-to-helix.yml
Normal file
80
eng/common/templates/steps/send-to-helix.yml
Normal file
|
@ -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 }}
|
|
@ -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 { "" }
|
||||
|
||||
'<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' | 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
|
||||
}
|
||||
|
|
|
@ -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 '<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' > "$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
|
||||
|
|
|
@ -14,8 +14,8 @@ done
|
|||
REPO_ROOT="$( cd -P "$( dirname "$SOURCE" )/../" && pwd )"
|
||||
|
||||
STAGE2_DIR=$REPO_ROOT/artifacts/bin/redist/Debug/dotnet
|
||||
export PATH=$STAGE2_DIR:$PATH
|
||||
|
||||
export PATH=$STAGE2_DIR:$PATH
|
||||
|
||||
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||
export DOTNET_MULTILEVEL_LOOKUP=0
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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.18620.6"
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<SkipBuildingInstallers Condition=" '$(SkipBuildingInstallers)' == '' AND
|
||||
($(Rid.StartsWith('rhel.6'))
|
||||
OR $(Rid.StartsWith('freebsd'))
|
||||
OR $(Rid.StartsWith('linux-musl'))
|
||||
OR $(Rid.StartsWith('fedora.27'))
|
||||
OR $(Rid.StartsWith('opensuse.42.3'))
|
||||
|
@ -12,6 +13,7 @@
|
|||
|
||||
<UsePortableLinuxSharedFramework Condition=" '$(UsePortableLinuxSharedFramework)' == '' AND '$(OSPlatform)' == 'linux' AND '$(Rid)' != 'rhel.6-x64' AND '$(Rid)' != 'linux-musl-x64' ">true</UsePortableLinuxSharedFramework>
|
||||
<IncludeSharedFrameworksForBackwardsCompatibilityTests Condition=" $(IncludeSharedFrameworksForBackwardsCompatibilityTests) == ''
|
||||
AND '$(Rid)' != 'freebsd-x64'
|
||||
AND '$(Rid)' != 'linux-x64'
|
||||
AND '$(Rid)' != 'rhel.6-x64'
|
||||
AND '$(Rid)' != 'linux-musl-x64'
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
</GetCurrentRuntimeInformation>
|
||||
|
||||
<PropertyGroup>
|
||||
<IsLinux Condition = " '$(HostOSName)' != 'win' AND '$(HostOSName)' != 'osx' ">True</IsLinux>
|
||||
<IsLinux Condition = " '$(HostOSName)' != 'win' AND '$(HostOSName)' != 'osx' AND '$(HostOSName)' != 'freebsd'">True</IsLinux>
|
||||
<OSName Condition=" '$(OSName)' == '' AND '$(IsLinux)' != 'True' ">$(HostOSName)</OSName>
|
||||
<OSPlatform Condition=" '$(OSPlatform)' == '' AND '$(IsLinux)' != 'True' ">$(HostOSPlatform)</OSPlatform>
|
||||
<OSName Condition=" '$(OSName)' == '' AND '$(IsLinux)' == 'True' ">linux</OSName>
|
||||
|
|
|
@ -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 },
|
||||
|
|
Before Width: | Height: | Size: 707 B After Width: | Height: | Size: 707 B |
|
@ -25,4 +25,4 @@ catch {
|
|||
throw "Failed to build"
|
||||
}
|
||||
|
||||
if($LASTEXITCODE -ne 0) { throw "Failed to build" }
|
||||
if($LASTEXITCODE -ne 0) { throw "Failed to build" }
|
||||
|
|
15
src/CopyToLatest/CopyToLatest.csproj
Normal file
15
src/CopyToLatest/CopyToLatest.csproj
Normal file
|
@ -0,0 +1,15 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(CoreSdkTargetFramework)</TargetFramework>
|
||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||
<CopyBuildOutputToPublishDirectory>false</CopyBuildOutputToPublishDirectory>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="targets\BranchInfo.props" />
|
||||
<Import Project="..\redist\targets\BuildCoreSdkTasks.targets" />
|
||||
<Import Project="..\redist\targets\GetRuntimeInformation.targets" />
|
||||
<Import Project="..\redist\targets\Versions.targets" />
|
||||
<Import Project="..\redist\targets\SetBuildDefaults.targets" />
|
||||
|
||||
<Import Project="targets\FinishBuild.targets" />
|
||||
</Project>
|
5
src/CopyToLatest/targets/BranchInfo.props
Normal file
5
src/CopyToLatest/targets/BranchInfo.props
Normal file
|
@ -0,0 +1,5 @@
|
|||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Channel>dev/arcade</Channel>
|
||||
</PropertyGroup>
|
||||
</Project>
|
18
src/CopyToLatest/targets/FinishBuild.targets
Normal file
18
src/CopyToLatest/targets/FinishBuild.targets
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Target Name="FinalizeBuild"
|
||||
DependsOnTargets="SetSdkVersionInfo"
|
||||
AfterTargets="Build">
|
||||
<CopyBlobsToLatest FeedUrl="$(DotnetPublishSdkAssetsBlobFeedUrl)"
|
||||
AccountKey="$(DotNetPublishSdkAssetsBlobFeedKey)"
|
||||
NugetVersion="$(FullNugetVersion)"
|
||||
Channel="$(Channel)"
|
||||
CommitHash="$(GitCommitHash)" />
|
||||
|
||||
<CopyBlobsToLatest FeedUrl="$(DotNetPublishChecksumsBlobFeedUrl)"
|
||||
AccountKey="$(DotNetPublishChecksumsBlobFeedKey)"
|
||||
NugetVersion="$(FullNugetVersion)"
|
||||
Channel="$(Channel)"
|
||||
CommitHash="$(GitCommitHash)" />
|
||||
</Target>
|
||||
</Project>
|
220
src/core-sdk-tasks/AzurePublisher.cs
Normal file
220
src/core-sdk-tasks/AzurePublisher.cs
Normal file
|
@ -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<string> ListBlobs(Product product, string version)
|
||||
{
|
||||
string virtualDirectory = $"{product}/{version}";
|
||||
return ListBlobs(virtualDirectory);
|
||||
}
|
||||
|
||||
public IEnumerable<string> 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<string> 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<bool> 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<bool> 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
|
132
src/core-sdk-tasks/CopyBlobsToLatest.cs
Normal file
132
src/core-sdk-tasks/CopyBlobsToLatest.cs
Normal file
|
@ -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 = @"(?<feedurl>https:\/\/(?<accountname>[^\.-]+)(?<domain>[^\/]*)\/((?<token>[a-zA-Z0-9+\/]*?\/\d{4}-\d{2}-\d{2})\/)?(?<containername>[^\/]+)\/(?<relativepath>.*\/)?)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(@"(?<CommitHash>[\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
|
|
@ -35,6 +35,14 @@ namespace Microsoft.DotNet.Cli.Build.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public static bool IsFreeBSD
|
||||
{
|
||||
get
|
||||
{
|
||||
return RuntimeInformation.IsOSPlatform(OSPlatform.Create("FREEBSD"));
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsUbuntu
|
||||
{
|
||||
get
|
||||
|
@ -84,7 +92,7 @@ namespace Microsoft.DotNet.Cli.Build.Framework
|
|||
{
|
||||
get
|
||||
{
|
||||
return IsLinux || IsOSX;
|
||||
return IsLinux || IsOSX || IsFreeBSD;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,6 +133,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:
|
||||
|
@ -183,6 +193,10 @@ namespace Microsoft.DotNet.Cli.Build.Framework
|
|||
{
|
||||
return BuildPlatform.OpenSuse;
|
||||
}
|
||||
else if (IsFreeBSD)
|
||||
{
|
||||
return BuildPlatform.FreeBSD;
|
||||
}
|
||||
else
|
||||
{
|
||||
return default(BuildPlatform);
|
||||
|
|
|
@ -14,6 +14,7 @@ namespace Microsoft.DotNet.Cli.Build.Framework
|
|||
RHEL = 7,
|
||||
Debian = 8,
|
||||
Fedora = 9,
|
||||
OpenSuse = 10
|
||||
OpenSuse = 10,
|
||||
FreeBSD = 11
|
||||
}
|
||||
}
|
||||
|
|
66
src/core-sdk-tasks/GenerateChecksums.cs
Normal file
66
src/core-sdk-tasks/GenerateChecksums.cs
Normal file
|
@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
[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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
<PropertyGroup>
|
||||
<TargetFrameworks>$(CoreSdkTargetFramework);net472</TargetFrameworks>
|
||||
<TargetFrameworks Condition="'$(OS)' != 'Windows_NT'">$(CoreSdkTargetFramework)</TargetFrameworks>
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -11,6 +12,7 @@
|
|||
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
|
||||
<PackageReference Include="NuGet.Versioning" Version="4.3.0" />
|
||||
<PackageReference Include="System.Reflection.Metadata" Version="1.4.2" />
|
||||
<PackageReference Include="WindowsAzure.Storage" Version="8.4.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">
|
||||
|
|
|
@ -28,7 +28,8 @@
|
|||
<Import Project="targets\GenerateRPMs.targets" />
|
||||
<Import Project="targets\GeneratePKG.targets" />
|
||||
<Import Project="targets\GenerateInstallers.targets" />
|
||||
<Import Project="targets\Badge.targets" />
|
||||
<Import Project="targets\Checksum.targets" />
|
||||
|
||||
<Import Project="targets\Signing.targets" />
|
||||
|
||||
</Project>
|
||||
|
|
31
src/redist/targets/Badge.targets
Normal file
31
src/redist/targets/Badge.targets
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<VersionSvgTemplate>$(RepoRoot)/resources/images/version_badge.svg</VersionSvgTemplate>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="GenerateVersionBadge"
|
||||
DependsOnTargets="SetBadgeProps"
|
||||
AfterTargets="Build">
|
||||
<Message Text="$(VersionBadge)" />
|
||||
|
||||
<ReplaceFileContents
|
||||
InputFiles="$(VersionSvgTemplate)"
|
||||
DestinationFiles="$(VersionBadge)"
|
||||
ReplacementPatterns="ver_number"
|
||||
ReplacementStrings="$(SdkVersion)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="SetBadgeProps" DependsOnTargets="GetCurrentRuntimeInformation">
|
||||
<PropertyGroup>
|
||||
<VersionBadgeMoniker>$(OSName)_$(Architecture)</VersionBadgeMoniker>
|
||||
<VersionBadgeMoniker Condition=" '$(Rid)' == 'rhel.6-x64' ">rhel.6_x64</VersionBadgeMoniker>
|
||||
<VersionBadgeMoniker Condition=" '$(Rid)' == 'linux-musl-x64' ">linux_musl_x64</VersionBadgeMoniker>
|
||||
<VersionBadgeMoniker Condition=" '$(IslinuxPortable)' == 'true' ">linux_$(Architecture)</VersionBadgeMoniker>
|
||||
<VersionBadgeMoniker Condition=" '$(IsBuildingAndPublishingAllLinuxDistrosNativeInstallers)' == 'true' ">all_linux_distros_native_installer</VersionBadgeMoniker>
|
||||
|
||||
<VersionBadge>$(ArtifactsShippingPackagesDir)$(VersionBadgeMoniker)_$(Configuration)_version_badge.svg</VersionBadge>
|
||||
<CoherentBadge>$(ArtifactsShippingPackagesDir)$(VersionBadgeMoniker)_$(Configuration)_coherent_badge.svg</CoherentBadge>
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
</Project>
|
|
@ -34,5 +34,7 @@
|
|||
<UsingTask TaskName="GetUseBundledNETCoreAppPackageVersionAsDefaultNetCorePatchVersion" AssemblyFile="$(CoreSdkTaskDll)"/>
|
||||
<UsingTask TaskName="AddMetadataIsPE" AssemblyFile="$(CoreSdkTaskDll)"/>
|
||||
<UsingTask TaskName="Crossgen" AssemblyFile="$(CoreSdkTaskDll)"/>
|
||||
<UsingTask TaskName="CopyBlobsToLatest" AssemblyFile="$(CoreSdkTaskDll)"/>
|
||||
<UsingTask TaskName="GenerateChecksums" AssemblyFile="$(CoreSdkTaskDll)"/>
|
||||
|
||||
</Project>
|
||||
|
|
24
src/redist/targets/Checksum.targets
Normal file
24
src/redist/targets/Checksum.targets
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Target Name="GenerateChecksums"
|
||||
DependsOnTargets="InitializeChecksumItemGroup;"
|
||||
AfterTargets="GenerateInstallers"
|
||||
Inputs="@(ArtifactsForGeneratingChecksums)"
|
||||
Outputs="%(ArtifactsForGeneratingChecksums.DestinationPath)">
|
||||
<GenerateChecksums Items="@(ArtifactsForGeneratingChecksums)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="InitializeChecksumItemGroup">
|
||||
<ItemGroup>
|
||||
<FilesToExcludeForChecksum Include="$(ArtifactsShippingPackagesDir)*.svg" />
|
||||
<FilesToExcludeForChecksum Include="$(ArtifactsShippingPackagesDir)*.nupkg" />
|
||||
<FilesToExcludeForChecksum Include="$(ArtifactsShippingPackagesDir)*.sha" />
|
||||
<FilesToExcludeForChecksum Include="$(ArtifactsShippingPackagesDir)*.cab" />
|
||||
<ArtifactsForGeneratingChecksums Include="$(ArtifactsShippingPackagesDir)*.*" Exclude="@(FilesToExcludeForChecksum)" />
|
||||
|
||||
<ArtifactsForGeneratingChecksums>
|
||||
<DestinationPath>%(ArtifactsForGeneratingChecksums.Identity).sha</DestinationPath>
|
||||
</ArtifactsForGeneratingChecksums>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
</Project>
|
|
@ -15,6 +15,8 @@
|
|||
<LibCLRJitRid Condition="'$(Architecture)' == 'arm' And '$(OSName)' == 'linux'">x64_arm</LibCLRJitRid>
|
||||
<LibCLRJitPath>$(NuGetPackageRoot)/$(RuntimeNETCoreAppPackageName)/$(MicrosoftNETCoreAppPackageVersion)/runtimes/$(LibCLRJitRid)/native/$(DynamicLibPrefix)clrjit$(DynamicLibExtension)</LibCLRJitPath>
|
||||
<SharedFrameworkNameVersionPath>$(RedistLayoutPath)shared/$(SharedFrameworkName)/$(MicrosoftNETCoreAppPackageVersion)</SharedFrameworkNameVersionPath>
|
||||
<DIASymReaderCrossgenFilter>*</DIASymReaderCrossgenFilter>
|
||||
<DIASymReaderCrossgenFilter Condition="'$(Architecture)' == 'arm' And '$(OSName)' == 'win'">x86</DIASymReaderCrossgenFilter>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Download the runtime package with the crossgen executable in it -->
|
||||
|
@ -58,7 +60,7 @@
|
|||
<FSharpFiles Remove="$(SdkOutputDirectory)FSharp\**\*.resources.dll" />
|
||||
<RemainingFiles Remove="$(SdkOutputDirectory)**\*.resources.dll" />
|
||||
|
||||
<DiasymReaderPath Include="$(SharedFrameworkNameVersionPath)/Microsoft.DiaSymReader.Native.*.dll" />
|
||||
<DiasymReaderPath Include="$(SharedFrameworkNameVersionPath)/Microsoft.DiaSymReader.Native.$(DIASymReaderCrossgenFilter).dll" />
|
||||
</ItemGroup>
|
||||
|
||||
<AddMetadataIsPE Items="@(RoslynFiles)">
|
||||
|
@ -94,6 +96,7 @@
|
|||
<PropertyGroup Condition="'$(CreateCrossgenSymbols)' == ''">
|
||||
<CreateCrossgenSymbols>true</CreateCrossgenSymbols>
|
||||
<CreateCrossgenSymbols Condition="'$(OSName)' == 'osx'">false</CreateCrossgenSymbols>
|
||||
<CreateCrossgenSymbols Condition="'$(OSName)' == 'freebsd'">false</CreateCrossgenSymbols>
|
||||
</PropertyGroup>
|
||||
|
||||
<Crossgen
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
<Project>
|
||||
|
||||
<!-- TODO: Add GenerateDebs to this list: https://github.com/dotnet/core-sdk/issues/201 -->
|
||||
|
||||
<Target Name="GenerateInstallers"
|
||||
AfterTargets="Pack"
|
||||
DependsOnTargets="GetCurrentRuntimeInformation;
|
||||
GenerateMsis;
|
||||
GeneratePkgs;
|
||||
GenerateRpms;"
|
||||
GenerateRpms;
|
||||
GenerateDebs"
|
||||
/>
|
||||
</Project>
|
||||
|
|
|
@ -291,8 +291,8 @@
|
|||
LayoutTemplates;
|
||||
LayoutBundledTools;
|
||||
RetargetTools;
|
||||
LayoutAppHostTemplate;
|
||||
CrossgenLayout;
|
||||
LayoutAppHostTemplate;
|
||||
SignLayout"
|
||||
AfterTargets="Build">
|
||||
|
||||
|
|
|
@ -137,6 +137,7 @@
|
|||
'$(MsiVersion)' ^
|
||||
'$(SimpleVersion)' ^
|
||||
'$(NugetVersion)' ^
|
||||
'$(MicrosoftWindowsDesktopPackageVersion)' ^
|
||||
'$(CombinedFrameworkSDKHostInstallerUpgradeCode)' ^
|
||||
'$(Architecture)' ^
|
||||
'$(MicrosoftNETCoreAppPackageVersion)' ^
|
||||
|
|
|
@ -28,13 +28,6 @@
|
|||
<!--<ItemsToSign Include="$(ArtifactsPackagesDir)**\*.nupkg" />
|
||||
<ItemsToSign Include="$(VisualStudioSetupOutputPath)**\*.vsix" />-->
|
||||
|
||||
<!-- Default certificate/strong-name to be used for all files with PKT=="31bf3856ad364e35". -->
|
||||
<StrongNameSignInfo Include="MsSharedLib72" PublicKeyToken="31bf3856ad364e35" CertificateName="Microsoft400" />
|
||||
<StrongNameSignInfo Include="SilverlightCert121" PublicKeyToken="7cec85d7bea7798e" CertificateName="Microsoft400" />
|
||||
<StrongNameSignInfo Include="StrongName" PublicKeyToken="b77a5c561934e089" CertificateName="Microsoft400" />
|
||||
<StrongNameSignInfo Include="StrongName" PublicKeyToken="b03f5f7f11d50a3a" CertificateName="Microsoft400" />
|
||||
<!--<StrongNameSignInfo Include="$(MSBuildThisFileDirectory)snk\Open.snk" PublicKeyToken="cc7b13ffcd2ddd51" CertificateName="Microsoft400" />-->
|
||||
|
||||
<!--
|
||||
Map of file extensions to default certificate name. Files with these extensions are
|
||||
signed with the specified certificate. Particularly useful for files that don't have
|
||||
|
|
26
src/redist/targets/packaging/windows/clisdk/_common.ps1
Normal file
26
src/redist/targets/packaging/windows/clisdk/_common.ps1
Normal file
|
@ -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"
|
|
@ -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
|
||||
|
|
|
@ -94,6 +94,7 @@
|
|||
<Variable Name="DOTNETSDKVERSION" Type="string" Value="$(var.DisplayVersion)" bal:Overridable="no" />
|
||||
<Variable Name="DOTNETRUNTIMEVERSION" Type="string" Value="$(var.DotNetRuntimeVersion)" bal:Overridable="no" />
|
||||
<Variable Name="ASPNETCOREVERSION" Type="string" Value="$(var.AspNetCoreVersion)" bal:Overridable="no" />
|
||||
<Variable Name="WINFORMSANDWPFVERSION" Type="string" Value="$(var.WinFormsAndWpfVersion)" bal:Overridable="no" />
|
||||
<Variable Name="DOTNETHOMESIMILARITYCHECKOVERRIDE" Type="string" Value="" bal:Overridable="yes" />
|
||||
|
||||
<Chain DisableSystemRestore="yes" ParallelCache="yes">
|
||||
|
|
|
@ -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,
|
||||
|
@ -41,6 +42,7 @@ function RunCandleForBundle
|
|||
-dHostFXRMsiSourcePath="$HostFxrMSIFile" `
|
||||
-dSharedHostMsiSourcePath="$SharedHostMSIFile" `
|
||||
-dWinFormsAndWpfMsiSourcePath="$WinFormsAndWpfMSIFile" `
|
||||
-dWinFormsAndWpfVersion="$WindowsDesktopVersion" `
|
||||
-dAdditionalSharedFXMsiSourcePath="$AdditionalSharedFxMSIFile" `
|
||||
-dAdditionalHostFXRMsiSourcePath="$AdditionalHostFxrMSIFile" `
|
||||
-dAdditionalSharedHostMsiSourcePath="$AdditionalSharedHostMSIFile" `
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -8,6 +8,13 @@
|
|||
<RegistryValue Action="write" Name="$(var.NugetVersion)" Type="integer" Value="1" KeyPath="yes"/>
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
<!--- The 'WpfWinformsTemplatesFlag' registry key is meant to be a temporary solution for Visual Studio 16.0 -->
|
||||
<!--- https://devdiv.visualstudio.com/DevDiv/_workitems/edit/676485 -->
|
||||
<Component Id="WpfWinformsTemplatesFlag" Directory="TARGETDIR" Win64="no">
|
||||
<RegistryKey Root="HKLM" Key="SOFTWARE\dotnet\Setup\InstalledVersions\SDKFeatures">
|
||||
<RegistryValue Action="write" Name="WpfWinformsTemplates" Type="integer" Value="1" KeyPath="yes"/>
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
<Component Id="SDKInstallLocation_x64" Directory="TARGETDIR" Win64="no">
|
||||
<Condition>VersionNT64 AND DOTNETHOME_X64</Condition>
|
||||
<RegistryKey Root="HKLM" Key="SOFTWARE\dotnet\Setup\InstalledVersions\x64\sdk">
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace EndToEnd
|
|||
{
|
||||
public class GivenDotnetUsesDotnetTools : TestBase
|
||||
{
|
||||
[Fact]
|
||||
[RequiresAspNetCore]
|
||||
public void ThenOneDotnetToolsCanBeCalled()
|
||||
{
|
||||
new DotnetCommand()
|
||||
|
|
|
@ -18,6 +18,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
|||
public readonly static string TestWorkingFolder;
|
||||
public readonly static string DotnetUnderTest;
|
||||
public readonly static string DotnetRidUnderTest;
|
||||
public readonly static string Stage2AspNetCore;
|
||||
|
||||
static RepoDirectoriesProvider()
|
||||
{
|
||||
|
@ -61,6 +62,17 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
|||
}
|
||||
}
|
||||
|
||||
string AspNetCoreDir = Path.Combine(
|
||||
Path.GetDirectoryName(DotnetUnderTest),
|
||||
"shared",
|
||||
"Microsoft.AspNetCore.App");
|
||||
|
||||
if (Directory.Exists(AspNetCoreDir))
|
||||
{
|
||||
Stage2AspNetCore =
|
||||
Directory.EnumerateDirectories(AspNetCoreDir).First();
|
||||
}
|
||||
|
||||
// TODO: Resolve dotnet folder even if DotnetUnderTest doesn't have full path
|
||||
var sdkFolders = Directory.GetDirectories(Path.Combine(Path.GetDirectoryName(DotnetUnderTest), "sdk"));
|
||||
sdkFolders.Length.Should().Be(1, "Only one SDK folder is expected in the layout");
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// 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()
|
||||
{
|
||||
if (RepoDirectoriesProvider.Stage2AspNetCore == null)
|
||||
{
|
||||
this.Skip = $"This test requires a AspNetCore but it isn't present.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue