diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index 0a4e281655..ca0ef63a15 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -22,517 +22,573 @@ variables:
value: true
- name: _TeamName
value: AspNetCore
-- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - name: _BuildArgs
- value: /p:TeamName=$(_TeamName)
- /p:OfficialBuildId=$(Build.BuildNumber)
-- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
+- name: _DotNetPublishToBlobFeed
+ value: true
+- name: _PublishUsingPipelines
+ value: true
+- name: _DotNetArtifactsCategory
+ value: .NETCORE
+- name: _DotNetValidationArtifactsCategory
+ value: .NETCORE
+- ${{ if ne(variables['System.TeamProject'], 'internal') }}:
- name: _BuildArgs
value: ''
+ - name: _PublishArgs
+ value: ''
+ - name: _SignType
+ value: ''
+- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
+ # DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1
+ # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT
+ - group: DotNet-Blob-Feed
+ - group: Publish-Build-Assets
-jobs:
-# Code check
-- template: jobs/default-build.yml
- parameters:
- jobName: Code_check
- jobDisplayName: Code check
- agentOs: Windows
- steps:
- - powershell: ./eng/scripts/CodeCheck.ps1 -ci
- displayName: Run eng/scripts/CodeCheck.ps1
- artifacts:
- - name: Code_Check_Logs
- path: artifacts/log/
- publishOnError: true
+ - name: _BuildArgs
+ value: /p:TeamName=$(_TeamName)
+ /p:OfficialBuildId=$(Build.BuildNumber)
+ - name: _SignType
+ value: real
-# Build Windows (x64/x86)
-- template: jobs/default-build.yml
- parameters:
- codeSign: true
- jobName: Windows_build
- jobDisplayName: "Build: Windows x64/x86"
- agentOs: Windows
- steps:
- - script: "echo ##vso[build.addbuildtag]daily-build"
- condition: and(ne(variables['Build.Reason'], 'PullRequest'), notin(variables['DotNetFinalVersionKind'], 'release', 'prerelease'))
- displayName: 'Set CI tags'
- - script: "echo ##vso[build.addbuildtag]release-candidate"
- condition: and(ne(variables['Build.Reason'], 'PullRequest'), in(variables['DotNetFinalVersionKind'], 'release', 'prerelease'))
- displayName: 'Set CI tags'
- # !!! NOTE !!! Some of these steps have disabled code signing.
- # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
- # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
- # The sign settings have been configured to
+ # The following extra properties are not set when testing. Use with final build.[cmd,sh] of asset-producing jobs.
+ - name: _PublishArgs
+ value: /p:Publish=true
+ /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1)
+ /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
+ /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed)
+ /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
+ /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory)
+ - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ - name: _BuildArgs
+ value: ''
+ - name: _SignType
+ valule: test
+ - name: _PublishArgs
+ value: ''
- - script: ./build.cmd
- -ci
- -arch x64
- -pack
- -all
- -buildNative
- /bl:artifacts/log/build.x64.binlog
- $(_BuildArgs)
- displayName: Build x64
- # TODO: make it possible to build for one Windows architecture at a time
- # This is going to actually build x86 native assets. See https://github.com/aspnet/AspNetCore/issues/7196
+stages:
+- stage: build
+ displayName: Build
+ jobs:
+ # Code check
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Code_check
+ jobDisplayName: Code check
+ agentOs: Windows
+ steps:
+ - powershell: ./eng/scripts/CodeCheck.ps1 -ci
+ displayName: Run eng/scripts/CodeCheck.ps1
+ artifacts:
+ - name: Code_Check_Logs
+ path: artifacts/log/
+ publishOnError: true
- # Build the x86 shared framework
- - script: ./build.cmd
- -ci
- -arch x86
- -pack
- -all
- -buildNative
- -noBuildJava
- /p:OnlyPackPlatformSpecificPackages=true
- /bl:artifacts/log/build.x86.binlog
+ # Build Windows (x64/x86)
+ - template: jobs/default-build.yml
+ parameters:
+ codeSign: true
+ jobName: Windows_build
+ jobDisplayName: "Build: Windows x64/x86"
+ agentOs: Windows
+ steps:
+ - script: "echo ##vso[build.addbuildtag]daily-build"
+ condition: and(ne(variables['Build.Reason'], 'PullRequest'), notin(variables['DotNetFinalVersionKind'], 'release', 'prerelease'))
+ displayName: 'Set CI tags'
+ - script: "echo ##vso[build.addbuildtag]release-candidate"
+ condition: and(ne(variables['Build.Reason'], 'PullRequest'), in(variables['DotNetFinalVersionKind'], 'release', 'prerelease'))
+ displayName: 'Set CI tags'
+
+ # !!! NOTE !!! Some of these steps have disabled code signing.
+ # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
+ # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
+ # The sign settings have been configured to
+
+ - script: ./build.cmd
+ -ci
+ -arch x64
+ -pack
+ -all
+ -buildNative
+ /bl:artifacts/log/build.x64.binlog
+ $(_BuildArgs)
+ displayName: Build x64
+
+ # Build the x86 shared framework
+ # TODO: make it possible to build for one Windows architecture at a time
+ # This is going to actually build x86 native assets. See https://github.com/aspnet/AspNetCore/issues/7196
+ - script: ./build.cmd
+ -ci
+ -arch x86
+ -pack
+ -all
+ -buildNative
+ -noBuildJava
+ /p:OnlyPackPlatformSpecificPackages=true
+ /bl:artifacts/log/build.x86.binlog
+ $(_BuildArgs)
+ displayName: Build x86
+
+ # This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53
+ - script: .\src\SiteExtensions\build.cmd
+ -ci
+ -pack
+ -noBuildDeps
+ $(_BuildArgs)
+ displayName: Build SiteExtension
+
+ # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If https://github.com/dotnet/arcade/issues/1957 is resolved,
+ # consider running code-signing inline with the other previous steps.
+ # Sign check is disabled because it is run in a separate step below, after installers are built.
+ - script: ./build.cmd
+ -ci
+ -noBuild
+ -noRestore
+ -sign
+ /bl:artifacts/log/build.codesign.binlog
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ displayName: Code sign packages
+
+ # Windows installers bundle both x86 and x64 assets
+ - script: ./build.cmd
+ -ci
+ -sign
+ -buildInstallers
+ /bl:artifacts/log/installers.msbuild.binlog
+ /p:DotNetSignType=$(_SignType)
+ /p:AssetManifestFileName=aspnetcore-win-x64-x86.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ /p:PublishInstallerBaseVersion=true
+ displayName: Build Installers
+
+ artifacts:
+ - name: Windows_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Windows_Packages
+ path: artifacts/packages/
+
+ # Build Windows ARM
+ - template: jobs/default-build.yml
+ parameters:
+ codeSign: true
+ jobName: Windows_arm_build
+ jobDisplayName: "Build: Windows ARM"
+ agentOs: Windows
+ buildArgs:
+ -arch arm
+ -sign
+ -pack
+ -noBuildNodeJS
+ -noBuildJava
+ /bl:artifacts/log/build.win-arm.binlog
+ /p:DotNetSignType=$(_SignType)
+ /p:OnlyPackPlatformSpecificPackages=true
+ /p:AssetManifestFileName=aspnetcore-win-arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Windows_arm_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Windows_arm_Packages
+ path: artifacts/packages/
+
+ # Build MacOS
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: MacOs_x64_build
+ jobDisplayName: "Build: macOS"
+ agentOs: macOs
+ buildArgs:
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.macos.binlog
+ -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: MacOS_x64_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: MacOS_x64_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: MacOS_x64
+
+ # Build Linux x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_x64_build
+ jobDisplayName: "Build: Linux x64"
+ agentOs: Linux
+ steps:
+ - script: ./build.sh
+ --ci
+ --arch x64
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.linux-x64.binlog
$(_BuildArgs)
- displayName: Build x86
-
- # This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53
- - script: .\src\SiteExtensions\build.cmd
- -ci
- -pack
- -noBuildDeps
+ displayName: Run build.sh
+ - script: |
+ git clean -xfd src/**/obj/
+ ./dockerbuild.sh bionic \
+ --ci \
+ --arch x64 \
+ --build-installers \
+ --no-build-deps \
+ --no-build-nodejs \
+ -p:OnlyPackPlatformSpecificPackages=true \
+ -p:BuildRuntimeArchive=false \
+ -p:LinuxInstallerType=deb \
+ -bl:artifacts/log/build.deb.binlog \
$(_BuildArgs)
- displayName: Build SiteExtension
+ displayName: Build Debian installers
+ - script: |
+ git clean -xfd src/**/obj/
+ ./dockerbuild.sh rhel \
+ --ci \
+ --arch x64 \
+ --build-installers \
+ --no-build-deps \
+ --no-build-nodejs \
+ -p:OnlyPackPlatformSpecificPackages=true \
+ -p:BuildRuntimeArchive=false \
+ -p:LinuxInstallerType=rpm \
+ -bl:artifacts/log/build.rpm.binlog \
+ -p:AssetManifestFileName=aspnetcore-Linux_x64.xml \
+ $(_BuildArgs) \
+ $(_PublishArgs)
+ displayName: Build RPM installers
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_x64_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_x64_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_x64
- # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If https://github.com/dotnet/arcade/issues/1957 is resolved,
- # consider running code-signing inline with the other previous steps.
- # Sign check is disabled because it is run in a separate step below, after installers are built.
- - script: ./build.cmd
- -ci
- -noBuild
- -noRestore
- -sign
- /bl:artifacts/log/build.codesign.binlog
- $(_BuildArgs)
- displayName: Code sign packages
+ # Build Linux ARM
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_arm_build
+ jobDisplayName: "Build: Linux ARM"
+ agentOs: Linux
+ buildArgs:
+ --arch arm
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.linux-arm.binlog
+ -p:AssetManifestFileName=aspnetcore-Linux_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_arm_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_arm_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_arm
- # Windows installers bundle both x86 and x64 assets
- - script: ./build.cmd
- -ci
- -sign
- -buildInstallers
- /bl:artifacts/log/installers.msbuild.binlog
- $(_BuildArgs)
- displayName: Build Installers
+ # Build Linux ARM64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_arm64_build
+ jobDisplayName: "Build: Linux ARM64"
+ agentOs: Linux
+ buildArgs:
+ --arch arm64
+ --all
+ --pack
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.arm64.binlog
+ -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_arm64_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_arm64_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_arm64
- artifacts:
- - name: Windows_Logs
- path: artifacts/log/
- publishOnError: true
- - name: Windows_Packages
- path: artifacts/packages/
- - name: Windows_Symbols
- path: artifacts/symbols/
- - name: Windows_VSIX
- path: artifacts/VSSetup/
- - name: Windows_Manifests
- path: artifacts/manifests/
- - name: Windows_Installers
- path: artifacts/installers/
+ # Build Linux Musl x64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_x64_build
+ jobDisplayName: "Build: Linux Musl x64"
+ agentOs: Linux
+ buildScript: ./dockerbuild.sh alpine
+ buildArgs:
+ --ci
+ --arch x64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.musl.binlog
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_musl_x64_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_musl_x64_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_x64
-# Build Windows ARM
-- template: jobs/default-build.yml
- parameters:
- codeSign: true
- jobName: Windows_arm_build
- jobDisplayName: "Build: Windows ARM"
- agentOs: Windows
- buildArgs:
- -arch arm
- -sign
- -pack
- -noBuildNodeJS
- -noBuildJava
- /p:OnlyPackPlatformSpecificPackages=true
- /bl:artifacts/log/build.win-arm.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Windows_arm_Packages
- path: artifacts/packages/
- - name: Windows_arm_Manifests
- path: artifacts/manifests/
- - name: Windows_arm_Installers
- path: artifacts/installers/
- - name: Windows_arm_Logs
- path: artifacts/log/
- publishOnError: true
+ # Build Linux Musl ARM64
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_arm64_build
+ jobDisplayName: "Build: Linux Musl ARM64"
+ agentOs: Linux
+ buildScript: ./dockerbuild.sh ubuntu-alpine37
+ buildArgs:
+ --ci
+ --arch arm64
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -bl:artifacts/log/build.musl.binlog
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_musl_arm64_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_musl_arm64_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_arm64
-# Build MacOS
-- template: jobs/default-build.yml
- parameters:
- jobName: MacOs_x64_build
- jobDisplayName: "Build: macOS"
- agentOs: macOs
- buildArgs:
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.macos.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: MacOS_x64_Packages
- path: artifacts/packages/
- - name: MacOS_x64_Manifests
- path: artifacts/manifests/
- - name: MacOS_x64_Installers
- path: artifacts/installers/
- - name: MacOS_x64_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: MacOS_x64
+ # Test jobs
+ - template: jobs/default-build.yml
+ parameters:
+ condition: ne(variables['SkipTests'], 'true')
+ jobName: Windows_Test
+ jobDisplayName: "Test: Windows Server 2016 x64"
+ agentOs: Windows
+ isTestingJob: true
+ buildArgs: -all -pack -test -BuildNative "/p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false"
+ beforeBuild:
+ - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
+ displayName: Setup IISExpress test certificates and schema
+ afterBuild:
+ - powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
+ displayName: Run Flaky Tests
+ continueOnError: true
+ artifacts:
+ - name: Windows_Test_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Windows_Test_Results
+ path: artifacts/TestResults/
+ publishOnError: true
-# Build Linux x64
-- template: jobs/default-build.yml
- parameters:
- jobName: Linux_x64_build
- jobDisplayName: "Build: Linux x64"
- agentOs: Linux
+ - template: jobs/default-build.yml
+ parameters:
+ condition: ne(variables['SkipTests'], 'true')
+ jobName: Windows_Templates_Test
+ jobDisplayName: "Test: Templates - Windows Server 2016 x64"
+ agentOs: Windows
+ isTestingJob: true
+ steps:
+ - script: ./build.cmd -ci -all -pack
+ displayName: Build Repo
+ - script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog"
+ displayName: Pack Templates
+ - script: ./src/ProjectTemplates/build.cmd -ci -test -NoRestore -NoBuild -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.test.binlog"
+ displayName: Test Templates
+ artifacts:
+ - name: Windows_Test_Templates_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Windows_Test_Templates_Results
+ path: artifacts/TestResults/
+ publishOnError: true
+
+ - template: jobs/default-build.yml
+ parameters:
+ condition: ne(variables['SkipTests'], 'true')
+ jobName: MacOS_Test
+ jobDisplayName: "Test: macOS 10.13"
+ agentOs: macOS
+ isTestingJob: true
+ buildArgs: --all --test "/p:RunTemplateTests=false"
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-mac.sh"
+ displayName: Installing Nginx
+ afterBuild:
+ - bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
+ displayName: Pack Packages (for Template tests)
+ - bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
+ displayName: Pack Templates (for Template tests)
+ - bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
+ displayName: Run Flaky Tests
+ continueOnError: true
+ artifacts:
+ - name: MacOS_Test_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: MacOS_Test_Results
+ path: artifacts/TestResults/
+ publishOnError: true
+
+ - template: jobs/default-build.yml
+ parameters:
+ condition: ne(variables['SkipTests'], 'true')
+ jobName: Linux_Test
+ jobDisplayName: "Test: Ubuntu 16.04 x64"
+ agentOs: Linux
+ isTestingJob: true
+ buildArgs: --all --test "/p:RunTemplateTests=false"
+ beforeBuild:
+ - bash: "./eng/scripts/install-nginx-linux.sh"
+ displayName: Installing Nginx
+ - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
+ displayName: Increase inotify limit
+ afterBuild:
+ - bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
+ displayName: Pack Packages (for Template tests)
+ - bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
+ displayName: Pack Templates (for Template tests)
+ - bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
+ displayName: Run Flaky Tests
+ continueOnError: true
+ artifacts:
+ - name: Linux_Test_Logs
+ path: artifacts/log/
+ publishOnError: true
+ - name: Linux_Test_Results
+ path: artifacts/TestResults/
+ publishOnError: true
+
+ # Source build
+ - job: Source_Build
+ displayName: 'Test: Linux Source Build'
+ container: centos:7
+ pool:
+ vmImage: 'ubuntu-16.04'
+ variables:
+ DotNetCoreSdkDir: $(Agent.ToolsDirectory)/dotnet
+ DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: true
steps:
- - script: ./build.sh
- --ci
- --arch x64
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.linux-x64.binlog
- $(_BuildArgs)
- displayName: Run build.sh
- script: |
- git clean -xfd src/**/obj/
- ./dockerbuild.sh bionic \
- --ci \
- --arch x64 \
- --build-installers \
- --no-build-deps \
- --no-build-nodejs \
- -p:OnlyPackPlatformSpecificPackages=true \
- -p:BuildRuntimeArchive=false \
- -p:LinuxInstallerType=deb \
- -bl:artifacts/log/build.deb.binlog \
- $(_BuildArgs)
- displayName: Build Debian installers
- - script: |
- git clean -xfd src/**/obj/
- ./dockerbuild.sh rhel \
- --ci \
- --arch x64 \
- --build-installers \
- --no-build-deps \
- --no-build-nodejs \
- -p:OnlyPackPlatformSpecificPackages=true \
- -p:BuildRuntimeArchive=false \
- -p:LinuxInstallerType=rpm \
- -bl:artifacts/log/build.rpm.binlog \
- $(_BuildArgs)
- displayName: Build RPM installers
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Linux_x64_Packages
- path: artifacts/packages/
- - name: Linux_x64_Manifests
- path: artifacts/manifests/
- - name: Linux_x64_Installers
- path: artifacts/installers/
- - name: Linux_x64_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_x64
-
-# Build Linux ARM
-- template: jobs/default-build.yml
- parameters:
- jobName: Linux_arm_build
- jobDisplayName: "Build: Linux ARM"
- agentOs: Linux
- buildArgs:
- --arch arm
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.linux-arm.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Linux_arm_Packages
- path: artifacts/packages/
- - name: Linux_arm_Manifests
- path: artifacts/manifests/
- - name: Linux_arm_Installers
- path: artifacts/installers/
- - name: Linux_arm_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_arm
-
-# Build Linux ARM64
-- template: jobs/default-build.yml
- parameters:
- jobName: Linux_arm64_build
- jobDisplayName: "Build: Linux ARM64"
- agentOs: Linux
- buildArgs:
- --arch arm64
- --all
- --pack
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.arm64.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Linux_arm64_Packages
- path: artifacts/packages/
- - name: Linux_arm64_Manifests
- path: artifacts/manifests/
- - name: Linux_arm64_Installers
- path: artifacts/installers/
- - name: Linux_arm64_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_arm64
-
-# Build Linux Musl x64
-- template: jobs/default-build.yml
- parameters:
- jobName: Linux_musl_x64_build
- jobDisplayName: "Build: Linux Musl x64"
- agentOs: Linux
- buildScript: ./dockerbuild.sh alpine
- buildArgs:
- --ci
- --arch x64
- --os-name linux-musl
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.musl.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Linux_musl_x64_Packages
- path: artifacts/packages/
- - name: Linux_musl_x64_Manifests
- path: artifacts/manifests/
- - name: Linux_musl_x64_Installers
- path: artifacts/installers/
- - name: Linux_musl_x64_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_musl_x64
-
-# Build Linux Musl ARM64
-- template: jobs/default-build.yml
- parameters:
- jobName: Linux_musl_arm64_build
- jobDisplayName: "Build: Linux Musl ARM64"
- agentOs: Linux
- buildScript: ./dockerbuild.sh ubuntu-alpine37
- buildArgs:
- --ci
- --arch arm64
- --os-name linux-musl
- --pack
- --all
- --no-build-nodejs
- --no-build-java
- -p:OnlyPackPlatformSpecificPackages=true
- -bl:artifacts/log/build.musl.binlog
- $(_BuildArgs)
- installNodeJs: false
- installJdk: false
- artifacts:
- - name: Linux_musl_arm64_Packages
- path: artifacts/packages/
- - name: Linux_musl_arm64_Manifests
- path: artifacts/manifests/
- - name: Linux_musl_arm64_Installers
- path: artifacts/installers/
- - name: Linux_musl_arm64_Logs
- path: artifacts/log/
- publishOnError: true
-- template: jobs/codesign-xplat.yml
- parameters:
- inputName: Linux_musl_arm64
-
-# Test jobs
-- template: jobs/default-build.yml
- parameters:
- condition: ne(variables['SkipTests'], 'true')
- jobName: Windows_Test
- jobDisplayName: "Test: Windows Server 2016 x64"
- agentOs: Windows
- isTestingJob: true
- buildArgs: -all -pack -test -BuildNative "/p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false"
- beforeBuild:
- - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
- displayName: Setup IISExpress test certificates and schema
- afterBuild:
- - powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
- displayName: Run Flaky Tests
+ source eng/common/native/common-library.sh
+ mkdir -p $HOME/bin
+ GetFile https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 $HOME/bin/jq
+ chmod +x $HOME/bin/jq
+ echo "##vso[task.prependpath]$HOME/bin"
+ displayName: Install jq
+ - task: UseDotNet@2
+ displayName: 'Use .NET Core sdk'
+ inputs:
+ packageType: sdk
+ # The SDK version selected here is intentionally supposed to use the latest release
+ # For the purpose of building Linux distros, we can't depend on features of the SDK
+ # which may not exist in pre-built versions of the SDK
+ # Pinning to preview 8 since preview 9 has breaking changes
+ version: 3.0.100-preview8-013656
+ installationPath: $(DotNetCoreSdkDir)
+ includePreviewVersions: true
+ - script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true /p:BuildNodeJs=false
+ displayName: Run ci-source-build.sh
+ - task: PublishBuildArtifacts@1
+ displayName: Upload logs
+ condition: always()
continueOnError: true
- artifacts:
- - name: Windows_Test_Logs
- path: artifacts/log/
- publishOnError: true
- - name: Windows_Test_Results
- path: artifacts/TestResults/
- publishOnError: true
+ inputs:
+ pathtoPublish: artifacts/log/
+ artifactName: Source_Build_Logs
+ artifactType: Container
+ parallel: true
+ - task: PublishBuildArtifacts@1
+ displayName: Upload package artifacts
+ # Only capture source build artifacts in PRs for the sake of inspecting
+ # changes that impact source-build. The artifacts from this build pipeline are never actually used.
+ condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
+ inputs:
+ pathtoPublish: artifacts/packages/
+ artifactName: Source_Build_Packages
+ artifactType: Container
+ parallel: true
-- template: jobs/default-build.yml
- parameters:
- condition: ne(variables['SkipTests'], 'true')
- jobName: Windows_Templates_Test
- jobDisplayName: "Test: Templates - Windows Server 2016 x64"
- agentOs: Windows
- isTestingJob: true
- steps:
- - script: ./build.cmd -ci -all -pack
- displayName: Build Repo
- - script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog"
- displayName: Pack Templates
- - script: ./src/ProjectTemplates/build.cmd -ci -test -NoRestore -NoBuild -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.test.binlog"
- displayName: Test Templates
- artifacts:
- - name: Windows_Test_Templates_Logs
- path: artifacts/log/
- publishOnError: true
- - name: Windows_Test_Templates_Results
- path: artifacts/TestResults/
- publishOnError: true
+ # Publish to the BAR
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - template: /eng/common/templates/job/publish-build-assets.yml
+ parameters:
+ dependsOn:
+ - Windows_build
+ - Windows_arm_build
+ - CodeSign_Xplat_MacOS_x64
+ - CodeSign_Xplat_Linux_x64
+ - CodeSign_Xplat_Linux_arm
+ - CodeSign_Xplat_Linux_arm64
+ - CodeSign_Xplat_Linux_musl_x64
+ - CodeSign_Xplat_Linux_musl_arm64
+ # In addition to the dependencies above, ensure the build was successful overall.
+ - Code_check
+ - Linux_Test
+ - MacOS_Test
+ - Source_Build
+ - Windows_Templates_Test
+ - Windows_Test
+ pool:
+ vmImage: vs2017-win2016
+ publishUsingPipelines: ${{ variables._PublishUsingPipelines }}
+ enablePublishBuildArtifacts: true # publish artifacts/log files
-- template: jobs/default-build.yml
- parameters:
- condition: ne(variables['SkipTests'], 'true')
- jobName: MacOs_Test
- jobDisplayName: "Test: macOS 10.13"
- agentOs: macOs
- isTestingJob: true
- buildArgs: --all --test "/p:RunTemplateTests=false"
- beforeBuild:
- - bash: "./eng/scripts/install-nginx-mac.sh"
- displayName: Installing Nginx
- afterBuild:
- - bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
- displayName: Pack Packages (for Template tests)
- - bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
- displayName: Pack Templates (for Template tests)
- - bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
- displayName: Run Flaky Tests
- continueOnError: true
- artifacts:
- - name: MacOS_Test_Logs
- path: artifacts/log/
- publishOnError: true
- - name: MacOS_Test_Results
- path: artifacts/TestResults/
- publishOnError: true
-
-- template: jobs/default-build.yml
- parameters:
- condition: ne(variables['SkipTests'], 'true')
- jobName: Linux_Test
- jobDisplayName: "Test: Ubuntu 16.04 x64"
- agentOs: Linux
- isTestingJob: true
- buildArgs: --all --test "/p:RunTemplateTests=false"
- beforeBuild:
- - bash: "./eng/scripts/install-nginx-linux.sh"
- displayName: Installing Nginx
- - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
- displayName: Increase inotify limit
- afterBuild:
- - bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
- displayName: Pack Packages (for Template tests)
- - bash: ./src/ProjectTemplates/build.sh --ci --pack --no-restore --no-build-deps "/bl:artifacts/log/template.pack.binlog"
- displayName: Pack Templates (for Template tests)
- - bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true
- displayName: Run Flaky Tests
- continueOnError: true
- artifacts:
- - name: Linux_Test_Logs
- path: artifacts/log/
- publishOnError: true
- - name: Linux_Test_Results
- path: artifacts/TestResults/
- publishOnError: true
-
-# Source build
-- job: Source_Build
- displayName: 'Test: Linux Source Build'
- container: centos:7
- pool:
- vmImage: 'ubuntu-16.04'
- variables:
- DotNetCoreSdkDir: $(Agent.ToolsDirectory)/dotnet
- DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: true
- steps:
- - script: |
- source eng/common/native/common-library.sh
- mkdir -p $HOME/bin
- GetFile https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 $HOME/bin/jq
- chmod +x $HOME/bin/jq
- echo "##vso[task.prependpath]$HOME/bin"
- displayName: Install jq
- - task: UseDotNet@2
- displayName: 'Use .NET Core sdk'
- inputs:
- packageType: sdk
- # The SDK version selected here is intentionally supposed to use the latest release
- # For the purpose of building Linux distros, we can't depend on features of the SDK
- # which may not exist in pre-built versions of the SDK
- # Pinning to preview 8 since preview 9 has breaking changes
- # version: 3.0.x
- version: 3.0.100-preview8-013656
- installationPath: $(DotNetCoreSdkDir)
- includePreviewVersions: true
- - script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true /p:BuildNodeJs=false
- displayName: Run ci-source-build.sh
- - task: PublishBuildArtifacts@1
- displayName: Upload logs
- condition: always()
- continueOnError: true
- inputs:
- pathtoPublish: artifacts/log/
- artifactName: Source_Build_Logs
- artifactType: Container
- parallel: true
- - task: PublishBuildArtifacts@1
- displayName: Upload package artifacts
- # Only capture source build artifacts in PRs for the sake of inspecting
- # changes that impact source-build. The artifacts from this build pipeline are never actually used.
- condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- inputs:
- pathtoPublish: artifacts/packages/
- artifactName: Source_Build_Packages
- artifactType: Container
- parallel: true
+- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - template: /eng/common/templates/post-build/post-build.yml
+ parameters:
+ # See https://github.com/dotnet/arcade/issues/2871
+ enableSymbolValidation: false
+ enableSigningValidation: false
+ publishInstallersAndChecksums: true
diff --git a/.azure/pipelines/jobs/codesign-xplat.yml b/.azure/pipelines/jobs/codesign-xplat.yml
index b2a683d63e..b0d9a584ea 100644
--- a/.azure/pipelines/jobs/codesign-xplat.yml
+++ b/.azure/pipelines/jobs/codesign-xplat.yml
@@ -19,13 +19,30 @@ jobs:
displayName: Download ${{ parameters.inputName }} artifacts
inputs:
artifactName: ${{ parameters.inputName }}_Packages
- downloadPath: $(Build.StagingDirectory)/deps/
+ downloadPath: $(Build.StagingDirectory)/downloaded_packages/
itemPattern: '**/*.nupkg'
- - task: MSBuild@1
- displayName: Code-sign .nupkg files
+ - task: CopyFiles@2
+ displayName: Copy packages to ArtifactsShippingPackagesDir
inputs:
- solution: eng\tools\XplatPackageSigner\XplatPackageSigner.proj
- msbuildArguments: /p:SignType=$(_SignType) /p:DirectoryToSign=$(Build.StagingDirectory)\deps\${{ parameters.inputName }}_Packages\
+ sourceFolder: $(Build.StagingDirectory)/downloaded_packages/
+ contents: '**/*.nupkg'
+ targetFolder: $(Build.SourcesDirectory)/artifacts/packages/$(BuildConfiguration)/shipping/
+ flattenFolders: true
+ - powershell: .\eng\common\build.ps1
+ -ci
+ -restore
+ -sign
+ -publish
+ -configuration $(BuildConfiguration)
+ -projects $(Build.SourcesDirectory)/eng/empty.proj
+ /p:AssetManifestFileName=aspnetcore-${{ parameters.inputName }}-signed.xml
+ /p:DotNetSignType=$(_SignType)
+ $(_BuildArgs)
+ $(_PublishArgs)
+ displayName: Sign and publish packages
artifacts:
+ - name: CodeSign_Xplat_${{ parameters.inputName }}_Logs
+ path: artifacts/log/
+ publishOnError: true
- name: ${{ parameters.inputName }}_Packages_Signed
- path: $(Build.StagingDirectory)\deps\${{ parameters.inputName }}_Packages\
+ path: artifacts/packages/
diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml
index 2c47005dfc..45d7bc6184 100644
--- a/.azure/pipelines/jobs/default-build.yml
+++ b/.azure/pipelines/jobs/default-build.yml
@@ -5,10 +5,6 @@
# The name of the job. Defaults to the name of the OS. No spaces allowed
# jobDisplayName: string
# The friendly job name to display in the UI. Defaults to the name of the OS.
-# poolName: string
-# The name of the Azure DevOps agent pool to use.
-# poolVmImage: string
-# The name of a virtual machine image to use. Primarily of interest when using the Hosted pools.
# agentOs: string
# Used in templates to define variables which are OS specific. Typically from the set { Windows, Linux, macOS }
# buildArgs: string
@@ -21,20 +17,18 @@
# afterBuild: [steps]
# Additional steps to run after build.sh/cmd
# artifacts: [array]
-# - path: string
-# The file path to artifacts output
-# includeForks: boolean
-# Should artifacts from forks be published
-# name: string
+# name: string
# The name of the artifact container
-# variables: { string: string }
-# A map of custom variables
-# matrix: { string: { string: string } }
-# A map of matrix configurations and variables. https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema#job
+# - path: string
+# The file path to artifacts output
+# includeForks: boolean
+# Should artifacts from forks be published?
+# publishOnError: boolean
+# Should artifacts be published if previous step failed?
# dependsOn: string | [ string ]
-# For fan-out/fan-in. https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema#job
+# For fan-out/fan-in. https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema#job
# condition: string
-# A condition which can be used to skip the job completely
+# A condition which can be used to skip the job completely
# codeSign: boolean
# This build definition is enabled for code signing. (Only applies to Windows)
# buildDirectory: string
@@ -48,20 +42,16 @@
parameters:
agentOs: 'Windows'
- poolName: ''
- poolVmImage: ''
buildArgs: ''
configuration: 'Release'
beforeBuild: []
# steps: [] don't define an empty object default because there is no way in template expression yet to check "if isEmpty(parameters.steps)"
afterBuild: []
codeSign: false
- variables: {}
dependsOn: ''
condition: ''
# jobName: '' - use agentOs by default.
# jobDisplayName: '' - use agentOs by default.
- # matrix: {} - don't define an empty object default because there is no way in template expression yet to check "if isEmpty(parameters.matrix)"
artifacts: []
buildDirectory: ''
buildScript: ''
@@ -75,182 +65,159 @@ parameters:
cancelTimeoutInMinutes: 15
jobs:
-- job: ${{ coalesce(parameters.jobName, parameters.agentOs) }}
- displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }}
- dependsOn: ${{ parameters.dependsOn }}
- ${{ if ne(parameters.condition, '') }}:
- condition: ${{ parameters.condition }}
- timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
- workspace:
- clean: all
- strategy:
- ${{ if ne(parameters.matrix, '') }}:
- maxParallel: 8
- matrix: ${{ parameters.matrix }}
- # Map friendly OS names to the right queue
- # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
- pool:
- ${{ if ne(parameters.poolVmImage, '') }}:
- vmImage: ${{ parameters.poolVmImage }}
- ${{ if and(eq(parameters.poolVmImage, ''), eq(parameters.agentOs, 'macOS')) }}:
- vmImage: macOS-10.13
- ${{ if and(eq(parameters.poolVmImage, ''), eq(parameters.agentOs, 'Linux')) }}:
- vmImage: ubuntu-16.04
- ${{ if ne(parameters.poolName, '') }}:
- name: ${{ parameters.poolName }}
- ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'Windows')) }}:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: NetCorePublic-Pool
- ${{ if ne(parameters.isTestingJob, true) }}:
- # Visual Studio Build Tools
- queue: BuildPool.Windows.10.Amd64.VS2019.BT.Open
- ${{ if eq(parameters.isTestingJob, true) }}:
+- template: /eng/common/templates/job/job.yml
+ parameters:
+ name: ${{ coalesce(parameters.jobName, parameters.agentOs) }}
+ displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }}
+ dependsOn: ${{ parameters.dependsOn }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }}
+ ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}:
+ enableMicrobuild: true
+ enablePublishBuildAssets: true
+ enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }}
+ enablePublishTestResults: true # publish test results to AzDO (populates AzDO Tests tab)
+ enableTelemetry: true
+ helixRepo: aspnet/AspNetCore
+ helixType: build.product/
+ workspace:
+ clean: all
+ # Map friendly OS names to the right queue
+ # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
+ pool:
+ ${{ if eq(parameters.agentOs, 'macOS') }}:
+ vmImage: macOS-10.13
+ ${{ if eq(parameters.agentOs, 'Linux') }}:
+ vmImage: ubuntu-16.04
+ ${{ if eq(parameters.agentOs, 'Windows') }}:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: NetCorePublic-Pool
+ ${{ if ne(parameters.isTestingJob, true) }}:
+ # Visual Studio Build Tools
+ queue: BuildPool.Windows.10.Amd64.VS2019.BT.Open
+ ${{ if eq(parameters.isTestingJob, true) }}:
+ # Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing
+ queue: BuildPool.Windows.10.Amd64.VS2019.Open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: NetCoreInternal-Pool
# Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing
- queue: BuildPool.Windows.10.Amd64.VS2019.Open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- name: NetCoreInternal-Pool
- # Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing
- queue: BuildPool.Windows.10.Amd64.VS2019
- variables:
- AgentOsName: ${{ parameters.agentOs }}
- ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping
- DOTNET_HOME: $(Build.SourcesDirectory)/.dotnet
- BuildScript: ${{ parameters.buildScript }}
- BuildScriptArgs: ${{ parameters.buildArgs }}
- BuildConfiguration: ${{ parameters.configuration }}
- BuildDirectory: ${{ parameters.buildDirectory }}
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
- TeamName: AspNetCore
- ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
- JAVA_HOME: $(Agent.BuildDirectory)\.tools\jdk\win-x64
- ${{ if or(ne(parameters.codeSign, true), ne(variables['System.TeamProject'], 'internal')) }}:
- _SignType: ''
- ${{ if and(eq(parameters.codeSign, true), eq(variables['System.TeamProject'], 'internal')) }}:
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
- _SignType: real
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
- _SignType: test
- ${{ insert }}: ${{ parameters.variables }}
- steps:
- - checkout: self
- clean: true
- - ${{ if eq(parameters.installNodeJs, 'true') }}:
- - task: NodeTool@0
- displayName: Install Node 10.x
- inputs:
- versionSpec: 10.x
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - task: NuGetCommand@2
- displayName: 'Clear NuGet caches'
- condition: succeeded()
- inputs:
- command: custom
- arguments: 'locals all -clear'
- - ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
- - powershell: ./eng/scripts/InstallJdk.ps1
- displayName: Install JDK 11
+ queue: BuildPool.Windows.10.Amd64.VS2019
+ variables:
+ - AgentOsName: ${{ parameters.agentOs }}
+ - ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping
+ - BuildScript: ${{ parameters.buildScript }}
+ - BuildScriptArgs: ${{ parameters.buildArgs }}
+ - _BuildConfig: ${{ parameters.configuration }}
+ - BuildConfiguration: ${{ parameters.configuration }}
+ - BuildDirectory: ${{ parameters.buildDirectory }}
+ - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
+ - TeamName: AspNetCore
+ - ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
+ - JAVA_HOME: $(Agent.BuildDirectory)\.tools\jdk\win-x64
+ - ${{ if or(ne(parameters.codeSign, true), ne(variables['System.TeamProject'], 'internal')) }}:
+ - _SignType: ''
+ - ${{ if and(eq(parameters.codeSign, true), eq(variables['System.TeamProject'], 'internal')) }}:
+ - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
+ - _SignType: real
+ - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ - _SignType: test
+ steps:
+ - checkout: self
+ clean: true
+ - ${{ if eq(parameters.installNodeJs, 'true') }}:
+ - task: NodeTool@0
+ displayName: Install Node 10.x
+ inputs:
+ versionSpec: 10.x
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - task: NuGetCommand@2
+ displayName: 'Clear NuGet caches'
+ condition: succeeded()
+ inputs:
+ command: custom
+ arguments: 'locals all -clear'
+ - ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
+ - powershell: ./eng/scripts/InstallJdk.ps1
+ displayName: Install JDK 11
+ - ${{ if eq(parameters.isTestingJob, true) }}:
+ - powershell: |
+ Write-Host "##vso[task.setvariable variable=SeleniumProcessTrackingFolder]$(BuildDirectory)\artifacts\tmp\selenium\"
+ ./eng/scripts/InstallGoogleChrome.ps1
+ displayName: Install Chrome
+
+ - ${{ parameters.beforeBuild }}
+
+ - ${{ if ne(parameters.steps, '')}}:
+ - ${{ parameters.steps }}
+ - ${{ if eq(parameters.steps, '')}}:
+ - ${{ if eq(parameters.buildScript, '') }}:
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - script: .\$(BuildDirectory)\build.cmd -ci /p:DotNetSignType=$(_SignType) -Configuration $(BuildConfiguration) $(BuildScriptArgs)
+ displayName: Run build.cmd
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: ./$(BuildDirectory)/build.sh -ci -configuration $(BuildConfiguration) $(BuildScriptArgs)
+ displayName: Run build.sh
+ - ${{ if ne(parameters.buildScript, '') }}:
+ - script: $(BuildScript) -Configuration $(BuildConfiguration) $(BuildScriptArgs)
+ displayName: run $(BuildScript)
+
+ - ${{ parameters.afterBuild }}
+
+ - ${{ if eq(parameters.agentOs, 'Windows') }}:
+ - powershell: eng\scripts\KillProcesses.ps1
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
+ - ${{ if ne(parameters.agentOs, 'Windows') }}:
+ - script: eng/scripts/KillProcesses.sh
+ displayName: Kill processes
+ continueOnError: true
+ condition: always()
+
+ - ${{ each artifact in parameters.artifacts }}:
+ - task: PublishBuildArtifacts@1
+ displayName: Upload artifacts from ${{ artifact.path }}
+ condition: and(or(succeeded(), eq('${{ artifact.publishOnError }}', 'true')), or(eq(variables['system.pullrequest.isfork'], false), eq('${{ artifact.includeForks }}', 'true')))
+ continueOnError: true
+ inputs:
+ ${{ if eq(parameters.buildDirectory, '') }}:
+ pathtoPublish: ${{ artifact.path }}
+ ${{ if ne(parameters.buildDirectory, '') }}:
+ pathtoPublish: ${{ parameters.buildDirectory }}\${{ artifact.path }}
+ ${{ if eq(artifact.name, '') }}:
+ artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
+ ${{ if ne(artifact.name, '') }}:
+ artifactName: ${{ artifact.name }}
+ artifactType: Container
+ parallel: true
+
- ${{ if eq(parameters.isTestingJob, true) }}:
- - powershell: |
- Write-Host "##vso[task.setvariable variable=SeleniumProcessTrackingFolder]$(BuildDirectory)\artifacts\tmp\selenium\"
- ./eng/scripts/InstallGoogleChrome.ps1
- displayName: Install Chrome
- - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}:
- - task: MicroBuildSigningPlugin@1
- displayName: Install MicroBuild Signing plugin
- condition: and(succeeded(), in(variables['_SignType'], 'test', 'real'))
- inputs:
- signType: $(_SignType)
- zipSources: false
- feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
-
- - ${{ parameters.beforeBuild }}
-
- - ${{ if ne(parameters.steps, '')}}:
- - ${{ parameters.steps }}
- - ${{ if eq(parameters.steps, '')}}:
- - ${{ if eq(parameters.buildScript, '') }}:
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - script: .\$(BuildDirectory)\build.cmd -ci /p:DotNetSignType=$(_SignType) -Configuration $(BuildConfiguration) $(BuildScriptArgs)
- displayName: Run build.cmd
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: ./$(BuildDirectory)/build.sh -ci -configuration $(BuildConfiguration) $(BuildScriptArgs)
- displayName: Run build.sh
- - ${{ if ne(parameters.buildScript, '') }}:
- - script: $(BuildScript) -Configuration $(BuildConfiguration) $(BuildScriptArgs)
- displayName: run $(BuildScript)
-
- - ${{ parameters.afterBuild }}
-
- - ${{ if eq(parameters.agentOs, 'Windows') }}:
- - powershell: eng\scripts\KillProcesses.ps1
- displayName: Kill processes
- continueOnError: true
- condition: always()
- - ${{ if ne(parameters.agentOs, 'Windows') }}:
- - script: eng/scripts/KillProcesses.sh
- displayName: Kill processes
- continueOnError: true
- condition: always()
-
- - ${{ each artifact in parameters.artifacts }}:
- - task: PublishBuildArtifacts@1
- displayName: Upload artifacts from ${{ artifact.path }}
- condition: and(or(succeeded(), eq('${{ artifact.publishOnError }}', 'true')), or(eq(variables['system.pullrequest.isfork'], false), eq('${{ artifact.includeForks }}', 'true')))
- continueOnError: true
- inputs:
- ${{ if eq(parameters.buildDirectory, '') }}:
- pathtoPublish: ${{ artifact.path }}
- ${{ if ne(parameters.buildDirectory, '') }}:
- pathtoPublish: ${{ parameters.buildDirectory }}\${{ artifact.path }}
- ${{ if eq(artifact.name, '') }}:
- artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
- ${{ if ne(artifact.name, '') }}:
- artifactName: ${{ artifact.name }}
- artifactType: Container
- parallel: true
-
- - ${{ if eq(parameters.isTestingJob, true) }}:
- - task: PublishTestResults@2
- displayName: Publish test results
- condition: always()
- continueOnError: true
- inputs:
- testRunTitle: $(AgentOsName)-$(BuildConfiguration)
- testRunner: vstest
- testResultsFiles: '**/artifacts/**/*.trx'
- mergeTestResults: true
- buildConfiguration: $(BuildConfiguration)
- buildPlatform: $(AgentOsName)
- - task: PublishTestResults@2
- displayName: Publish test results
- condition: always()
- continueOnError: true
- inputs:
- testRunTitle: $(AgentOsName)-$(BuildConfiguration)
- testRunner: xunit
- testResultsFiles: '**/artifacts/TestResults/**/*.xml'
- mergeTestResults: true
- buildConfiguration: $(BuildConfiguration)
- buildPlatform: $(AgentOsName)
- - task: PublishTestResults@2
- displayName: Publish js test results
- condition: always()
- inputs:
- testRunner: junit
- testResultsFiles: '**/artifacts/log/**/*.junit.xml'
- buildConfiguration: $(BuildConfiguration)
- buildPlatform: $(AgentOsName)
- - task: PublishTestResults@2
- displayName: Publish Java test results
- condition: always()
- inputs:
- testRunner: junit
- testResultsFiles: '**/TEST-com.microsoft.signalr*.xml'
- buildConfiguration: $(BuildConfiguration)
- buildPlatform: $(AgentOsName)
-
-
- - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows')) }}:
- - task: MicroBuildCleanup@1
- displayName: Cleanup MicroBuild tasks
- condition: always()
+ - task: PublishTestResults@2
+ displayName: Publish VSTest test results
+ condition: always()
+ continueOnError: true
+ inputs:
+ testRunTitle: $(AgentOsName)-$(BuildConfiguration)
+ testRunner: vstest
+ testResultsFiles: '**/artifacts/**/*.trx'
+ mergeTestResults: true
+ buildConfiguration: $(BuildConfiguration)
+ buildPlatform: $(AgentOsName)
+ - task: PublishTestResults@2
+ displayName: Publish js test results
+ condition: always()
+ inputs:
+ testRunner: junit
+ testResultsFiles: '**/artifacts/log/**/*.junit.xml'
+ buildConfiguration: $(BuildConfiguration)
+ buildPlatform: $(AgentOsName)
+ - task: PublishTestResults@2
+ displayName: Publish Java test results
+ condition: always()
+ inputs:
+ testRunner: junit
+ testResultsFiles: '**/TEST-com.microsoft.signalr*.xml'
+ buildConfiguration: $(BuildConfiguration)
+ buildPlatform: $(AgentOsName)
diff --git a/Directory.Build.props b/Directory.Build.props
index 06e288aa81..4017184d04 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -21,6 +21,15 @@
true
true
false
+
+
+ false
+ true
@@ -119,7 +128,7 @@
false
-
+
$(ArtifactsDir)installers\$(Configuration)\
$(ArtifactsDir)symbols\$(Configuration)\
diff --git a/Directory.Build.targets b/Directory.Build.targets
index f5b217f365..b3faf802c6 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -30,7 +30,8 @@
- $(PreReleaseBrandingLabel) Build $(VersionSuffix)
+
+ $(PreReleaseBrandingLabel) Build $(VersionSuffix)
$(VersionPrefix)
$(PackageBrandingVersion) $(BrandingVersionSuffix.Trim())
diff --git a/build.sh b/build.sh
index ad4ce2c1c8..05e1628368 100755
--- a/build.sh
+++ b/build.sh
@@ -221,7 +221,7 @@ if [ "$build_deps" = false ]; then
msbuild_args[${#msbuild_args[*]}]="-p:BuildProjectReferences=false"
fi
-if [ "$build_managed" = true ] || (["$build_all" = true ] && [ "$build_managed" != false ]); then
+if [ "$build_managed" = true ] || ([ "$build_all" = true ] && [ "$build_managed" != false ]); then
if [ -z "$build_nodejs" ]; then
if [ -x "$(command -v node)" ]; then
__warn "Building of C# project is enabled and has dependencies on NodeJS projects. Building of NodeJS projects is enabled since node is detected on PATH."
@@ -266,6 +266,10 @@ if [ -z "$configuration" ]; then
fi
msbuild_args[${#msbuild_args[*]}]="-p:Configuration=$configuration"
+# Set verbosity
+echo "Setting msbuild verbosity to $verbosity"
+msbuild_args[${#msbuild_args[*]}]="-verbosity:$verbosity"
+
# Initialize global variables need to be set before the import of Arcade is imported
restore=$run_restore
diff --git a/dockerbuild.sh b/dockerbuild.sh
index 10ce8e9d08..f73a017491 100755
--- a/dockerbuild.sh
+++ b/dockerbuild.sh
@@ -124,6 +124,7 @@ docker build "$(dirname "$dockerfile")" \
--build-arg "USER=$(whoami)" \
--build-arg "USER_ID=$(id -u)" \
--build-arg "GROUP_ID=$(id -g)" \
+ --build-arg "WORKDIR=$DIR" \
--tag $tagname \
-f "$dockerfile"
@@ -138,7 +139,7 @@ docker run \
-e BUILD_SOURCEBRANCH \
-e DOTNET_CLI_TELEMETRY_OPTOUT \
-e Configuration \
- -v "$DIR:/code/build" \
+ -v "$DIR:$DIR" \
${docker_args[@]+"${docker_args[@]}"} \
$tagname \
./build.sh \
diff --git a/docs/Artifacts.md b/docs/Artifacts.md
index 450d19f627..6417210cd6 100644
--- a/docs/Artifacts.md
+++ b/docs/Artifacts.md
@@ -3,22 +3,36 @@ Artifacts
Building this repo produces build artifacts in the directory structure described below. Build outputs are organized into logical groups based on artifact type and the intended usage of the artifacts.
+See also https://github.com/dotnet/arcade/blob/master/Documentation/ArcadeSdk.md This repo follows _most_ of the conventions described there.
+
```
artifacts/
installers/
$(Configuration)/
- *.msi = Windows installers
- *.deb, *.rpm = Linux installers
- *.zip, *.tar.gz = archives versions of installers
+ *.msi = Windows installers
+ *.deb, *.rpm = Linux installers
+ *.zip, *.tar.gz = archives versions of installers
+ log/
+ runningProcesses*.txt = Process list from just before build completed
+ runningProcesses*.bak = Process list from two minutes before runningProcesses*.txt files were written
+ *.binlog = Binary logs for a few build phases e.g. site extension build
+ **/
+ *.log = Log files for test runs and individual tests
+ $(Configuration)/
+ *.binlog = Binary logs for most build phases
packages/
$(Configuration)/
- Shipping/ = Packages which are intended for use by customers. These, along with installers, represent the 'product'.
- *.nupkg = NuGet packages which ship to nuget.org
- *.jar = Java packages which ship to Maven Central and others
- *.tgz = NPM packages which ship to npmjs.org
- NonShipping/
- *.nupkg = NuGet packages for internal use only. Used to hand off bits to Microsoft partner teams. Not intended for use by customers.
+ Shipping/ = Packages which are intended for use by customers. These, along with installers, represent the 'product'.
+ *.nupkg = NuGet packages which ship to nuget.org
+ *.jar = Java packages which ship to Maven Central and others
+ *.tgz = NPM packages which ship to npmjs.org
+ NonShipping/
+ *.nupkg = NuGet packages for internal use only. Used to hand off bits to Microsoft partner teams. Not intended for use by customers.
+ symbols/
+ $(Configuration)/
+ $(TargetFramework)/
+ *.pdb = Loose symbol files for symbol server publication. Special cases where *.symbols.nupkg packaging is cumbersome.
VSSetup/
$(Configuration)/
- *.vsix = Visual Studio extensions
+ *.vsix = Visual Studio extensions. None currently exist.
```
diff --git a/eng/AfterSolutionBuild.targets b/eng/AfterSolutionBuild.targets
index 24f5a1b8b2..c82553612f 100644
--- a/eng/AfterSolutionBuild.targets
+++ b/eng/AfterSolutionBuild.targets
@@ -17,15 +17,4 @@
SharedFrameworkTargetFramework="netcoreapp$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)" />
-
-
-
-
-
-
-
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 0cd5ac2537..2e11857b1b 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -172,6 +172,8 @@ and are generated based on the last package release.
+
+
diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props
index 4bb8a4afea..6cfba9b0b6 100644
--- a/eng/PatchConfig.props
+++ b/eng/PatchConfig.props
@@ -65,7 +65,9 @@ Later on, this will be checked using this condition:
+ Microsoft.AspNetCore.DataProtection.AzureStorage;
Microsoft.AspNetCore.Hosting;
+ Microsoft.AspNetCore.SpaServices;
diff --git a/eng/Publishing.props b/eng/Publishing.props
new file mode 100644
index 0000000000..0b01250bff
--- /dev/null
+++ b/eng/Publishing.props
@@ -0,0 +1,56 @@
+
+
+
+ $(ArtifactsDir.Substring(0, $([MSBuild]::Subtract($(ArtifactsDir.Length), 1))))
+
+ $(PublishDependsOnTargets);_PublishInstallers
+
+ <_UploadPathRoot>aspnetcore
+
+
+
+
+
+
+
+
+ <_InstallersToPublish Remove="@(_InstallersToPublish)" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\packages\**\*.jar" UploadPathSegment="jar" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\packages\**\*.pom" UploadPathSegment="jar" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\packages\**\*.tgz" UploadPathSegment="npm" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.deb" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.exe" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.msi" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.rpm" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.tar.gz" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.version" UploadPathSegment="Runtime"
+ Condition=" '$(PublishInstallerBaseVersion)' == 'true' " />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.wixlib" UploadPathSegment="Runtime" />
+ <_InstallersToPublish Include="$(ArtifactsDir)\installers\**\*.zip" UploadPathSegment="Runtime" />
+
+
+
+
+
+
+
+
+
+ <_PackageVersion>@(_ResolvedPackageVersionInfo->'%(PackageVersion)')
+
+
+
+
+
+
+
+ false
+ NonShipping=true;ShipInstaller=dotnetcli
+ true
+ $(_UploadPathRoot)/%(_InstallersToPublish.UploadPathSegment)/$(_PackageVersion)/%(Filename)%(Extension)
+
+
+
+
diff --git a/eng/SignCheckExclusionsFile.txt b/eng/SignCheckExclusionsFile.txt
new file mode 100644
index 0000000000..e047f630ec
--- /dev/null
+++ b/eng/SignCheckExclusionsFile.txt
@@ -0,0 +1,4 @@
+apphost.exe;; Exclude the apphost because this is expected to be code-signed by customers after the SDK modifies it.
+.js;; We do not sign JavaScript files.
+.binlog;; MSBuild binary logs are not signed though they are sometimes placed where validation thinks they should be.
+WixUIWixca|WixDepCA;; We do not sign WiX content in our installers.
diff --git a/eng/Signing.props b/eng/Signing.props
index 829cd569e9..3b61e9205f 100644
--- a/eng/Signing.props
+++ b/eng/Signing.props
@@ -21,6 +21,7 @@
-->
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 300bc7d8c0..eeb594008c 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -9,428 +9,428 @@
-->
-
+
https://github.com/aspnet/Blazor
- 46d4074b15672e7d6e576decdfaf0d37f4c36f8d
+ e6d5939369c38dbd913c3765f30327bb713a7d67
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 3187623392c21b80c33e3f4df1d135aaae66d530
+ 5ca5f30f0848e3909787095da9c78924986ee095
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 3187623392c21b80c33e3f4df1d135aaae66d530
+ 5ca5f30f0848e3909787095da9c78924986ee095
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 3187623392c21b80c33e3f4df1d135aaae66d530
+ 5ca5f30f0848e3909787095da9c78924986ee095
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 3187623392c21b80c33e3f4df1d135aaae66d530
+ 5ca5f30f0848e3909787095da9c78924986ee095
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/EntityFrameworkCore
- 7fa7c03a269273b62117d92b4191ef6d08a34a95
+ d2654d9ef0db4b34f1b72cc25dfae3c81fbeccef
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/dotnet/core-setup
- b9dd6c969c15a2734aecbd3e2aa83afed02040e4
+ 8f5d7b1ba4f744199ba006cac38dfcb9a2408880
-
+
https://github.com/dotnet/core-setup
- b9dd6c969c15a2734aecbd3e2aa83afed02040e4
+ 8f5d7b1ba4f744199ba006cac38dfcb9a2408880
-
+
https://github.com/dotnet/core-setup
- b9dd6c969c15a2734aecbd3e2aa83afed02040e4
+ 8f5d7b1ba4f744199ba006cac38dfcb9a2408880
-
+
https://github.com/dotnet/core-setup
- b9dd6c969c15a2734aecbd3e2aa83afed02040e4
+ 8f5d7b1ba4f744199ba006cac38dfcb9a2408880
-
+
https://github.com/dotnet/corefx
- ae488157a419935918d3364e843cf1632a2b4299
+ 3da667af759d88b683ca851694ced073e8dc9960
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/dotnet/arcade
- 00d8aa82b488f321204a0e69a81399af9df276a1
+ 2d393243ba4a0c95c2c18aa266df6e0f43ffe22d
-
+
https://github.com/dotnet/arcade
- 00d8aa82b488f321204a0e69a81399af9df276a1
+ 2d393243ba4a0c95c2c18aa266df6e0f43ffe22d
-
+
https://github.com/dotnet/arcade
- 00d8aa82b488f321204a0e69a81399af9df276a1
+ 2d393243ba4a0c95c2c18aa266df6e0f43ffe22d
-
+
https://github.com/aspnet/Extensions
- 32764537039b4dd9ed01ff5f316ee7c60ae62312
+ 73c259904d5db01bbeede15df2a72d1b94cb3306
-
+
https://github.com/dotnet/roslyn
- fa8e2c9b566e4471a3509fc63d7baca0a2a6d30b
+ 3b423bd305daf81076d4d7b105101361c2490531
diff --git a/eng/Versions.props b/eng/Versions.props
index 7000a916c2..57f006ca3e 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -10,8 +10,10 @@
0
0
2
- rc$(PreReleasePreviewNumber)
- Release Candidate $(PreReleasePreviewNumber)
+ true
+ false
+ rc$(PreReleasePreviewNumber)
+ Release Candidate $(PreReleasePreviewNumber)
9
preview$(BlazorClientPreReleasePreviewNumber)
@@ -53,116 +55,116 @@
-->
- 1.0.0-beta.19454.31
+ 1.0.0-beta.19458.2
- 3.3.1-beta3-19430-03
+ 3.3.1-beta3-19454-05
- 3.0.0-rc1-19453-06
- 3.0.0-rc1-19453-06
- 3.0.0-rc1-19453-06
- 2.1.0-rc1-19453-06
+ 3.0.0-rc1-19456-20
+ 3.0.0-rc1-19456-20
+ 3.0.0-rc1-19456-20
+ 2.1.0-rc1-19456-20
- 1.0.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 1.7.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
- 4.6.0-rc1.19453.4
+ 1.0.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 1.7.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
+ 4.6.0-rc1.19456.4
- 3.0.0-rc1.19453.4
+ 3.0.0-rc1.19456.4
- 3.0.0-preview9.19455.4
+ 3.0.0-preview9.19456.1
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
- 3.0.0-rc1.19455.2
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
+ 3.0.0-rc1.19456.10
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
- 3.0.0-rc1.19455.8
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
+ 3.0.0-rc1.19456.14
- 3.0.0-rc1.19452.2
- 3.0.0-rc1.19452.2
- 3.0.0-rc1.19452.2
- 3.0.0-rc1.19452.2
+ 3.0.0-rc1.19456.6
+ 3.0.0-rc1.19456.6
+ 3.0.0-rc1.19456.6
+ 3.0.0-rc1.19456.6
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index feb58d1419..e001ccb481 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -85,6 +85,10 @@ function Build {
# 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
+
+ # Resolve relative project paths into full paths
+ $projects = ($projects.Split(';').ForEach({Resolve-Path $_}) -join ';')
+
$msbuildArgs += "/p:Projects=$projects"
$properties = $msbuildArgs
}
diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1
index 268986246e..ec41965fc8 100644
--- a/eng/common/performance/performance-setup.ps1
+++ b/eng/common/performance/performance-setup.ps1
@@ -17,7 +17,7 @@ Param(
[string] $Configurations="CompilationMode=$CompilationMode"
)
-$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance")
+$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") -or ($Repository -eq "dotnet-performance")
$UseCoreRun = ($CoreRootDirectory -ne [string]::Empty)
$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty)
diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh
index 550b3ebf18..2f2092166e 100755
--- a/eng/common/performance/performance-setup.sh
+++ b/eng/common/performance/performance-setup.sh
@@ -113,7 +113,7 @@ while (($# > 0)); do
esac
done
-if [[ "$repository" == "dotnet/performance" ]]; then
+if [ "$repository" == "dotnet/performance" ] || [ "$repository" == "dotnet-performance" ]; then
run_from_perf_repo=true
fi
diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml
index 8db456bb7f..ffda80a197 100644
--- a/eng/common/templates/job/job.yml
+++ b/eng/common/templates/job/job.yml
@@ -24,7 +24,7 @@ parameters:
workspace: ''
-# Job base template specific parameters
+ # Job base template specific parameters
# Optional: Enable installing Microbuild plugin
# if 'true', these "variables" must be specified in the variables object or as part of the queue matrix
# _TeamName - the name of your team
@@ -151,6 +151,9 @@ jobs:
continueOnError: ${{ parameters.continueOnError }}
condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT'))
+ - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - task: NuGetAuthenticate@0
+
- ${{ each step in parameters.steps }}:
- ${{ step }}
diff --git a/eng/common/templates/job/performance.yml b/eng/common/templates/job/performance.yml
index ef809253d1..f877fd7a89 100644
--- a/eng/common/templates/job/performance.yml
+++ b/eng/common/templates/job/performance.yml
@@ -5,6 +5,7 @@ parameters:
displayName: '' # optional -- display name for the job. Will use jobName if not passed
pool: '' # required -- name of the Build pool
container: '' # required -- name of the container
+ osGroup: '' # required -- operating system for the job
extraSetupParameters: '' # optional -- extra arguments to pass to the setup script
frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against
continueOnError: 'false' # optional -- determines whether to continue the build if the step errors
@@ -44,12 +45,13 @@ jobs:
- HelixPreCommand: ''
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - ${{ if eq(variables['Agent.Os'], 'Windows_NT') }}:
+ - ${{ if eq( parameters.osGroup, 'Windows_NT') }}:
- HelixPreCommand: 'set "PERFLAB_UPLOAD_TOKEN=$(PerfCommandUploadToken)"'
- IsInternal: -Internal
- - ${{ if ne(variables['Agent.Os'], 'Windows_NT') }}:
+ - ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
- HelixPreCommand: 'export PERFLAB_UPLOAD_TOKEN="$(PerfCommandUploadTokenLinux)"'
- IsInternal: --internal
+
- group: DotNet-HelixApi-Access
- group: dotnet-benchview
diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml
index 9e77ef1b54..b722975f9c 100644
--- a/eng/common/templates/job/publish-build-assets.yml
+++ b/eng/common/templates/job/publish-build-assets.yml
@@ -47,6 +47,10 @@ jobs:
downloadPath: '$(Build.StagingDirectory)/Download'
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
+
+ - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - task: NuGetAuthenticate@0
+
- task: PowerShell@2
displayName: Publish Build Assets
inputs:
@@ -59,6 +63,7 @@ jobs:
/p:Configuration=$(_BuildConfig)
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
+
- task: powershell@2
displayName: Create ReleaseConfigs Artifact
inputs:
@@ -67,12 +72,14 @@ jobs:
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(BARBuildId)
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value "$(DefaultChannels)"
Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(IsStableBuild)
+
- task: PublishBuildArtifacts@1
displayName: Publish ReleaseConfigs Artifact
inputs:
PathtoPublish: '$(Build.StagingDirectory)/ReleaseConfigs.txt'
PublishLocation: Container
ArtifactName: ReleaseConfigs
+
- ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}:
- task: PublishBuildArtifacts@1
displayName: Publish Logs to VSTS
diff --git a/eng/common/templates/post-build/channels/netcore-dev-30.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml
index 3ce7ce4d6e..7984f06d1b 100644
--- a/eng/common/templates/post-build/channels/netcore-dev-30.yml
+++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml
@@ -1,5 +1,4 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
publishInstallersAndChecksums: false
@@ -47,7 +46,7 @@ stages:
/p:Configuration=Release
${{ parameters.symbolPublishingAdditionalParameters }}
- - job:
+ - job: publish_assets
displayName: Publish Assets
dependsOn: setupMaestroVars
variables:
@@ -79,30 +78,41 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(PublicDevRelease_30_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:ArtifactsCategory=$(_DotNetArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
- /p:Configuration=Release
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
+ /p:Configuration=Release
/p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
/p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
/p:InstallersAzureAccountKey=$(dotnetcli-storage-key)
@@ -110,24 +120,6 @@ stages:
/p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- stage: NetCore_Dev30_Publish_Validation
displayName: .NET Core 3.0 Dev Publish Validation
@@ -136,30 +128,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_30_Channel_Id))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- - template: ../darc-gather-drop.yml
- parameters:
- ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }}
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml
index d40aaacc4f..bcedd0f075 100644
--- a/eng/common/templates/post-build/channels/netcore-dev-31.yml
+++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml
@@ -1,5 +1,4 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
publishInstallersAndChecksums: false
@@ -79,22 +78,33 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(PublicDevRelease_31_Channel_Id)
/p:ArtifactsCategory=$(_DotNetArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
/p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
/p:BARBuildId=$(BARBuildId)
/p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
@@ -110,24 +120,6 @@ stages:
/p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- stage: NetCore_Dev31_Publish_Validation
displayName: .NET Core 3.1 Dev Publish Validation
@@ -136,30 +128,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- - template: ../darc-gather-drop.yml
- parameters:
- ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }}
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml
index 584185c2a7..18432cc60b 100644
--- a/eng/common/templates/post-build/channels/netcore-dev-5.yml
+++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml
@@ -1,8 +1,8 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
publishInstallersAndChecksums: false
+ publishToAzureDevOpsFeeds: true
stages:
- stage: NetCore_Dev5_Publish
@@ -47,7 +47,7 @@ stages:
/p:Configuration=Release
${{ parameters.symbolPublishingAdditionalParameters }}
- - job:
+ - job: publish_assets
displayName: Publish Assets
dependsOn: setupMaestroVars
variables:
@@ -79,55 +79,53 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(NetCore_5_Dev_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:ArtifactsCategory=$(_DotNetArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
/p:Configuration=Release
+ /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
/p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
/p:InstallersAzureAccountKey=$(dotnetcli-storage-key)
- /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
/p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl)
/p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
+ /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }}
+ /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
+ /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
+ /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json'
+ /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- stage: NetCore_Dev5_Publish_Validation
displayName: .NET Core 5 Dev Publish Validation
@@ -136,30 +134,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- - template: ../darc-gather-drop.yml
- parameters:
- ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }}
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml
index 8bf88fd49e..36e1d1188b 100644
--- a/eng/common/templates/post-build/channels/netcore-internal-30.yml
+++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml
@@ -1,5 +1,4 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
@@ -78,50 +77,42 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(InternalServicing_30_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName)
- /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1)
- /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url)
- /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts'
- /p:Configuration=Release
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
+ /p:Configuration=Release
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- template: ../trigger-subscription.yml
parameters:
ChannelId: ${{ variables.InternalServicing_30_Channel_Id }}
@@ -133,26 +124,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.InternalServicing_30_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml
index dc9541d9ec..abae985ab0 100644
--- a/eng/common/templates/post-build/channels/netcore-release-30.yml
+++ b/eng/common/templates/post-build/channels/netcore-release-30.yml
@@ -1,5 +1,4 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
@@ -78,51 +77,42 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Publish
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(PublicRelease_30_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName)
- /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1)
- /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url)
- /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts'
- /p:Configuration=Release
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
+ /p:Configuration=Release
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- template: ../trigger-subscription.yml
parameters:
ChannelId: ${{ variables.PublicRelease_30_Channel_Id }}
@@ -134,27 +124,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)),
- contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.PublicRelease_30_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml
index 4dcf4ba9c8..b2a6c7659d 100644
--- a/eng/common/templates/post-build/channels/netcore-release-31.yml
+++ b/eng/common/templates/post-build/channels/netcore-release-31.yml
@@ -1,5 +1,4 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
@@ -78,51 +77,48 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Publish
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(PublicRelease_31_Channel_Id)
+ /p:ArtifactsCategory=$(_DotNetArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
/p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName)
- /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1)
- /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url)
- /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
/p:BARBuildId=$(BARBuildId)
/p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
/p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
/p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
/p:Configuration=Release
+ /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
+ /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
+ /p:InstallersAzureAccountKey=$(dotnetcli-storage-key)
+ /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl)
+ /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- template: ../trigger-subscription.yml
parameters:
ChannelId: ${{ variables.PublicRelease_31_Channel_Id }}
@@ -134,27 +130,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)),
- contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.PublicRelease_31_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml
index 4d9f197d43..36f6dea628 100644
--- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml
+++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml
@@ -1,10 +1,8 @@
parameters:
- enableSymbolValidation: true
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
publishInstallersAndChecksums: false
- publishToAzureDevOpsFeeds: false
- azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
+ publishToAzureDevOpsFeeds: true
stages:
- stage: NetCore_Tools_Latest_Publish
@@ -49,7 +47,7 @@ stages:
/p:Configuration=Release
${{ parameters.symbolPublishingAdditionalParameters }}
- - job:
+ - job: publish_assets
displayName: Publish Assets
dependsOn: setupMaestroVars
variables:
@@ -81,60 +79,53 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(NetCore_Tools_Latest_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:ArtifactsCategory=$(_DotNetArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
+ /p:StaticInternalFeed=$(StaticInternalFeed)
+ /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl)
+ /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey)
+ /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl)
+ /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey)
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
/p:Configuration=Release
- /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
/p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
+ /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
/p:InstallersAzureAccountKey=$(dotnetcli-storage-key)
/p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl)
/p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
/p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }}
- /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }}
+ /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
/p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
- /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }}
+ /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
/p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)
${{ parameters.artifactsPublishingAdditionalParameters }}
-
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
+
- stage: NetCore_Tools_Latest_PublishValidation
displayName: .NET Tools - Latest Publish Validation
@@ -143,30 +134,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - ${{ if eq(parameters.enableSymbolValidation, 'true') }}:
- - job:
- displayName: Symbol Availability
- dependsOn: setupMaestroVars
- condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id))
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: current
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Check Symbol Availability
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion)
-
- - template: ../darc-gather-drop.yml
- parameters:
- ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }}
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }}
diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml
index e306fa87bf..a5fcdc581a 100644
--- a/eng/common/templates/post-build/channels/public-validation-release.yml
+++ b/eng/common/templates/post-build/channels/public-validation-release.yml
@@ -1,8 +1,7 @@
parameters:
artifactsPublishingAdditionalParameters: ''
publishInstallersAndChecksums: false
- publishToAzureDevOpsFeeds: false
- azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
+ publishToAzureDevOpsFeeds: true
stages:
- stage: PVR_Publish
@@ -13,7 +12,7 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - job:
+ - job: publish_assets
displayName: Publish Assets
dependsOn: setupMaestroVars
variables:
@@ -45,60 +44,48 @@ stages:
buildType: current
artifactName: AssetManifests
+ - task: NuGetToolInstaller@1
+ displayName: 'Install NuGet.exe'
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
- task: PowerShell@2
- displayName: Add Assets Location
+ displayName: Publish Assets
env:
- AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw)
+ AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw)
inputs:
filePath: eng\common\sdk-task.ps1
- arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
- /p:ChannelId=$(PublicValidationRelease_30_Channel_Id)
+ arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet
/p:ArtifactsCategory=$(_DotNetValidationArtifactsCategory)
/p:IsStableBuild=$(IsStableBuild)
/p:IsInternalBuild=$(IsInternalBuild)
/p:RepositoryName=$(Build.Repository.Name)
/p:CommitSha=$(Build.SourceVersion)
- /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe
- /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)'
- /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
- /p:BARBuildId=$(BARBuildId)
- /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
- /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
- /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
- /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts'
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts'
+ /p:NugetPath=$(NuGetExeToolPath)
+ /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)'
+ /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)'
+ /p:BARBuildId=$(BARBuildId)
+ /p:MaestroApiEndpoint='$(MaestroApiEndPoint)'
+ /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)'
+ /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/'
+ /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/'
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/'
/p:Configuration=Release
+ /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
/p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl)
/p:InstallersAzureAccountKey=$(dotnetcli-storage-key)
- /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }}
/p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl)
/p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key)
/p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }}
- /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }}
+ /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
/p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
- /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }}
+ /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
/p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)'
${{ parameters.artifactsPublishingAdditionalParameters }}
- - task: NuGetCommand@2
- displayName: Publish Packages to AzDO Feed
- condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com')
- inputs:
- command: push
- vstsFeed: $(AzDoFeedName)
- packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg
- publishVstsFeed: $(AzDoFeedName)
-
- - task: PowerShell@2
- displayName: Publish Blobs to AzDO Feed
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1
- arguments: -FeedName $(AzDoFeedName)
- -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw)
- enabled: false
-
- stage: PVR_PublishValidation
displayName: .NET Tools - Validation Publish Validation
@@ -107,10 +94,6 @@ stages:
jobs:
- template: ../setup-maestro-vars.yml
- - template: ../darc-gather-drop.yml
- parameters:
- ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }}
-
- template: ../promote-build.yml
parameters:
ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }}
diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml
index 49712b3a60..c134764496 100644
--- a/eng/common/templates/post-build/common-variables.yml
+++ b/eng/common/templates/post-build/common-variables.yml
@@ -1,6 +1,7 @@
variables:
- group: Publish-Build-Assets
- group: DotNet-DotNetCli-Storage
+ - group: DotNet-MSRC-Storage
# .NET Core 3 Dev
- name: PublicDevRelease_30_Channel_Id
@@ -8,7 +9,7 @@ variables:
# .NET Core 3.1 Dev
- name: PublicDevRelease_31_Channel_Id
- value: 260
+ value: 128
# .NET Core 5 Dev
- name: NetCore_5_Dev_Channel_Id
@@ -38,10 +39,6 @@ variables:
- name: IsInternalBuild
value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }}
- # Storage account name for proxy-backed feeds
- - name: ProxyBackedFeedsAccountName
- value: dotnetfeed
-
# Default Maestro++ API Endpoint and API Version
- name: MaestroApiEndPoint
value: "https://maestro-prod.westus2.cloudapp.azure.com"
@@ -55,8 +52,27 @@ variables:
- name: SymbolToolVersion
value: 1.0.1
+ # Feed Configurations
+ # These should include the suffix "/index.json"
+
+ # Configuration for the feed where packages from internal non-stable builds will be published to
+ - name: StaticInternalFeed
+ value: 'https://dnceng.pkgs.visualstudio.com/_packaging/dotnet-core-internal/nuget/v3/index.json'
+
# Default locations for Installers and checksums
+ # Public Locations
- name: ChecksumsBlobFeedUrl
value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json
- name: InstallersBlobFeedUrl
value: https://dotnetcli.blob.core.windows.net/dotnet/index.json
+
+ # Private Locations
+ - name: InternalChecksumsBlobFeedUrl
+ value: https://dotnetclichecksumsmsrc.blob.core.windows.net/dotnet/index.json
+ - name: InternalChecksumsBlobFeedKey
+ value: $(dotnetclichecksumsmsrc-storage-key)
+
+ - name: InternalInstallersBlobFeedUrl
+ value: https://dotnetclimsrc.blob.core.windows.net/dotnet/index.json
+ - name: InternalInstallersBlobFeedKey
+ value: $(dotnetclimsrc-access-key)
diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml
index ae376b7747..e473cadbcc 100644
--- a/eng/common/templates/post-build/post-build.yml
+++ b/eng/common/templates/post-build/post-build.yml
@@ -98,28 +98,25 @@ stages:
- template: \eng\common\templates\post-build\channels\netcore-dev-5.yml
parameters:
- enableSymbolValidation: ${{ parameters.enableSymbolValidation }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
+ enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }}
- template: \eng\common\templates\post-build\channels\netcore-dev-30.yml
parameters:
- enableSymbolValidation: ${{ parameters.enableSymbolValidation }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
- template: \eng\common\templates\post-build\channels\netcore-dev-31.yml
parameters:
- enableSymbolValidation: ${{ parameters.enableSymbolValidation }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
- template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml
parameters:
- enableSymbolValidation: ${{ parameters.enableSymbolValidation }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
diff --git a/eng/docker/alpine.Dockerfile b/eng/docker/alpine.Dockerfile
index ae9cbab56f..bc1547d1df 100644
--- a/eng/docker/alpine.Dockerfile
+++ b/eng/docker/alpine.Dockerfile
@@ -2,8 +2,9 @@ FROM microsoft/dotnet:2.1.0-preview1-runtime-deps-alpine
ARG USER
ARG USER_ID
ARG GROUP_ID
+ARG WORKDIR
-WORKDIR /code/build
+WORKDIR ${WORKDIR}
RUN mkdir -p "/home/$USER" && chown "${USER_ID}:${GROUP_ID}" "/home/$USER"
ENV HOME "/home/$USER"
diff --git a/eng/docker/bionic.Dockerfile b/eng/docker/bionic.Dockerfile
index c8ad159119..9fe672137a 100644
--- a/eng/docker/bionic.Dockerfile
+++ b/eng/docker/bionic.Dockerfile
@@ -3,8 +3,9 @@ FROM microsoft/dotnet:2.1-runtime-deps-bionic
ARG USER
ARG USER_ID
ARG GROUP_ID
+ARG WORKDIR
-WORKDIR /code/build
+WORKDIR ${WORKDIR}
RUN mkdir -p "/home/$USER" && chown "${USER_ID}:${GROUP_ID}" "/home/$USER"
ENV HOME "/home/$USER"
diff --git a/eng/docker/rhel.Dockerfile b/eng/docker/rhel.Dockerfile
index 0ddc49837b..d42ab7b389 100644
--- a/eng/docker/rhel.Dockerfile
+++ b/eng/docker/rhel.Dockerfile
@@ -5,8 +5,9 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:rhel-7-rpmpkg-e1b4a89-201753110
ARG USER
ARG USER_ID
ARG GROUP_ID
+ARG WORKDIR
-WORKDIR /code/build
+WORKDIR ${WORKDIR}
RUN useradd -m ${USER} --uid ${USER_ID} -g root
RUN echo '${USER} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
diff --git a/eng/docker/ubuntu-alpine37.Dockerfile b/eng/docker/ubuntu-alpine37.Dockerfile
index fcce8aab56..859098f04e 100644
--- a/eng/docker/ubuntu-alpine37.Dockerfile
+++ b/eng/docker/ubuntu-alpine37.Dockerfile
@@ -2,8 +2,9 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-alpine
ARG USER
ARG USER_ID
ARG GROUP_ID
+ARG WORKDIR
-WORKDIR /code/build
+WORKDIR ${WORKDIR}
RUN mkdir -p "/home/$USER" && chown "${USER_ID}:${GROUP_ID}" "/home/$USER"
ENV HOME "/home/$USER"
diff --git a/eng/empty.proj b/eng/empty.proj
new file mode 100644
index 0000000000..b952792fdc
--- /dev/null
+++ b/eng/empty.proj
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/eng/tools/Maestro/Maestro.csproj b/eng/tools/Maestro/Maestro.csproj
deleted file mode 100644
index 67a5210bc4..0000000000
--- a/eng/tools/Maestro/Maestro.csproj
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
- netcoreapp3.0
- true
- $(ArtifactsDir)manifests\
- true
-
-
-
-
-
-
-
-
-
-
-
- NonShipping=true
-
-
-
-
-
-
-
-
-
-
diff --git a/eng/tools/XplatPackageSigner/XplatPackageSigner.proj b/eng/tools/XplatPackageSigner/XplatPackageSigner.proj
deleted file mode 100644
index 493b463c48..0000000000
--- a/eng/tools/XplatPackageSigner/XplatPackageSigner.proj
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- $([MSBuild]::ValueOrDefault($(SignType),'real'))
-
-
-
-
-
-
-
- $([MSBuild]::NormalizeDirectory($(DirectoryToSign)))
- $(BaseIntermediateOutputPath)
-
-
-
-
-
- NuGet
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/eng/tools/XplatPackageSigner/sign-packages.cmd b/eng/tools/XplatPackageSigner/sign-packages.cmd
deleted file mode 100644
index b5a689dfc0..0000000000
--- a/eng/tools/XplatPackageSigner/sign-packages.cmd
+++ /dev/null
@@ -1,15 +0,0 @@
-@ECHO OFF
-
-SET DirToSign=%1
-
-IF "%DirToSign%"=="" (
- echo Error^: Expected argument ^
- echo Usage^: sign-packages.cmd ^
-
- exit /b 1
-)
-
-SET RepoRoot=%~dp0..\..\..
-SET Project=%~dp0XplatPackageSigner.proj
-
-%RepoRoot%\build.cmd -NoRestore -projects %project% /p:DirectoryToSign=%DirToSign% /bl:%RepoRoot%\artifacts\log\XplatSign.binlog
diff --git a/global.json b/global.json
index 9792ab2144..abdd56300f 100644
--- a/global.json
+++ b/global.json
@@ -24,7 +24,7 @@
},
"msbuild-sdks": {
"Yarn.MSBuild": "1.15.2",
- "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19454.31",
- "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19454.31"
+ "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19458.2",
+ "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19458.2"
}
}
diff --git a/src/Components/Blazor/Directory.Build.props b/src/Components/Blazor/Directory.Build.props
index dd413c575c..baeb85b7d4 100644
--- a/src/Components/Blazor/Directory.Build.props
+++ b/src/Components/Blazor/Directory.Build.props
@@ -4,6 +4,6 @@
$(BlazorClientPreReleaseVersionLabel)
-
+
diff --git a/src/Components/test/E2ETest/ServerExecutionTests/ComponentHubReliabilityTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/ComponentHubReliabilityTest.cs
index bbca5e1136..42eae05174 100644
--- a/src/Components/test/E2ETest/ServerExecutionTests/ComponentHubReliabilityTest.cs
+++ b/src/Components/test/E2ETest/ServerExecutionTests/ComponentHubReliabilityTest.cs
@@ -280,6 +280,17 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
[InlineData("afterrender-async-throw")]
public async Task ComponentLifecycleMethodThrowsExceptionTerminatesTheCircuit(string id)
{
+ if (id == "setparameters-async-throw")
+ {
+ // In the case of setparameters-async-throw, the exception isn't triggered until after
+ // a renderbatch. This would lead to timing-based flakiness, because that batch's ACK
+ // may be received either before or after the subsequent event that is meant to trigger
+ // circuit termination. If it was received before, then the circuit would be terminated
+ // prematurely by the OnRenderCompleted call. To avoid timing-based flakiness, we can
+ // just not send OnRenderCompleted calls as they aren't required for this scenario.
+ Client.ConfirmRenderBatch = false;
+ }
+
// Arrange
var expectedError = "Unhandled exception in circuit .*";
var rootUri = ServerFixture.RootUri;
diff --git a/src/Components/test/E2ETest/ServerExecutionTests/GlobalizationTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/GlobalizationTest.cs
index e284ff06e0..ed045a6383 100644
--- a/src/Components/test/E2ETest/ServerExecutionTests/GlobalizationTest.cs
+++ b/src/Components/test/E2ETest/ServerExecutionTests/GlobalizationTest.cs
@@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
display = Browser.FindElement(By.Id("input_type_text_datetime_value"));
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
- ReplaceText(input, new DateTime(2000, 1, 2).ToString(cultureInfo));
+ input.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
input.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
@@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
display = Browser.FindElement(By.Id("input_type_text_datetimeoffset_value"));
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
- ReplaceText(input, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
+ input.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
input.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
}
@@ -136,7 +136,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
- ReplaceText(extraInput, new DateTime(2000, 1, 2).ToString(cultureInfo));
+ extraInput.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
extraInput.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
@@ -148,7 +148,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
- ReplaceText(extraInput, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
+ extraInput.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
extraInput.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
@@ -193,7 +193,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
- ReplaceText(extraInput, new DateTime(2000, 1, 2).ToString(cultureInfo));
+ extraInput.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
extraInput.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
@@ -205,21 +205,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
- ReplaceText(extraInput, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
+ extraInput.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
extraInput.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
}
- // see: https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/214
- //
- // Calling Clear() can trigger onchange, which will revert the value to its default.
- private static void ReplaceText(IWebElement element, string text)
- {
- element.SendKeys(Keys.Control + "a");
- element.SendKeys(text);
- }
-
private void SetCulture(string culture)
{
var selector = new SelectElement(Browser.FindElement(By.Id("culture-selector")));
diff --git a/src/Components/test/E2ETest/Tests/FormsTest.cs b/src/Components/test/E2ETest/Tests/FormsTest.cs
index 056b581180..c0808deca5 100644
--- a/src/Components/test/E2ETest/Tests/FormsTest.cs
+++ b/src/Components/test/E2ETest/Tests/FormsTest.cs
@@ -11,7 +11,7 @@ using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System;
using System.Linq;
-using System.Security.Cryptography;
+using System.Text.Json;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;
@@ -196,27 +196,26 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
// Validates on edit
Browser.Equal("valid", () => renewalDateInput.GetAttribute("class"));
- renewalDateInput.SendKeys("01/01/2000\t");
+ renewalDateInput.ReplaceText("01/01/2000\t");
Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class"));
// Can become invalid
- renewalDateInput.SendKeys("0/0/0");
+ renewalDateInput.ReplaceText("0/0/0");
Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor);
// Empty is invalid, because it's not nullable
- renewalDateInput.SendKeys($"{Keys.Backspace}\t{Keys.Backspace}\t{Keys.Backspace}\t");
+ renewalDateInput.ReplaceText($"{Keys.Backspace}");
Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor);
// Can become valid
- renewalDateInput.SendKeys("01/01/01\t");
+ renewalDateInput.ReplaceText("01/01/01");
Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class"));
Browser.Empty(messagesAccessor);
}
[Fact]
- [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2511", FlakyOn.All)]
public void InputDateInteractsWithEditContext_NullableDateTimeOffset()
{
var appElement = Browser.MountTestComponent();
@@ -229,8 +228,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
Browser.Equal("modified valid", () => expiryDateInput.GetAttribute("class"));
// Can become invalid
- expiryDateInput.Clear();
- expiryDateInput.SendKeys("111111111");
+ expiryDateInput.ReplaceText("111111111");
Browser.Equal("modified invalid", () => expiryDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The OptionalExpiryDate field must be a date." }, messagesAccessor);
diff --git a/src/DataProtection/AzureStorage/ref/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj b/src/DataProtection/AzureStorage/ref/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
index 07cb2861f0..5da79e220f 100644
--- a/src/DataProtection/AzureStorage/ref/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
+++ b/src/DataProtection/AzureStorage/ref/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
@@ -7,5 +7,6 @@
+
diff --git a/src/DataProtection/AzureStorage/src/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj b/src/DataProtection/AzureStorage/src/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
index 8272cd539b..f9a124b261 100644
--- a/src/DataProtection/AzureStorage/src/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
+++ b/src/DataProtection/AzureStorage/src/Microsoft.AspNetCore.DataProtection.AzureStorage.csproj
@@ -7,6 +7,7 @@
true
aspnetcore;dataprotection;azure;blob
true
+ true
@@ -17,6 +18,7 @@
+
diff --git a/src/DataProtection/AzureStorage/test/Microsoft.AspNetCore.DataProtection.AzureStorage.Tests.csproj b/src/DataProtection/AzureStorage/test/Microsoft.AspNetCore.DataProtection.AzureStorage.Tests.csproj
index ed16b18390..ae55e43152 100644
--- a/src/DataProtection/AzureStorage/test/Microsoft.AspNetCore.DataProtection.AzureStorage.Tests.csproj
+++ b/src/DataProtection/AzureStorage/test/Microsoft.AspNetCore.DataProtection.AzureStorage.Tests.csproj
@@ -3,12 +3,15 @@
netcoreapp3.0
true
+ true
+
+
diff --git a/src/Hosting/Server.IntegrationTesting/src/Common/DotNetCommands.cs b/src/Hosting/Server.IntegrationTesting/src/Common/DotNetCommands.cs
index 5533834014..1bc54b4d55 100644
--- a/src/Hosting/Server.IntegrationTesting/src/Common/DotNetCommands.cs
+++ b/src/Hosting/Server.IntegrationTesting/src/Common/DotNetCommands.cs
@@ -16,8 +16,13 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
// Compare to https://github.com/aspnet/BuildTools/blob/314c98e4533217a841ff9767bb38e144eb6c93e4/tools/KoreBuild.Console/Commands/CommandContext.cs#L76
public static string GetDotNetHome()
{
+ // runtest.* scripts throughout the repo define $env:DOTNET_HOME
var dotnetHome = Environment.GetEnvironmentVariable("DOTNET_HOME");
+ // /activate.* and runtest.* scripts define $env:DOTNET_ROOT and (for /activate.*) $env:{DOTNET_ROOT(x86)}
var dotnetRoot = Environment.GetEnvironmentVariable("DOTNET_ROOT");
+ // /eng/common/tools.* scripts define $env:DOTNET_INSTALL_DIR
+ var dotnetInstallDir = Environment.GetEnvironmentVariable("DOTNET_INSTALL_DIR");
+
var userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
var home = Environment.GetEnvironmentVariable("HOME");
@@ -28,8 +33,19 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
}
else if (!string.IsNullOrEmpty(dotnetRoot))
{
- // DOTNET_ROOT has x64 appended to the path, which we append again in GetDotNetInstallDir
- result = dotnetRoot.Substring(0, dotnetRoot.Length - 3);
+ if (dotnetRoot.EndsWith("x64"))
+ {
+ // DOTNET_ROOT has x64 appended to the path, which we append again in GetDotNetInstallDir
+ result = dotnetRoot[0..^3];
+ }
+ else
+ {
+ result = dotnetRoot;
+ }
+ }
+ else if (!string.IsNullOrEmpty(dotnetInstallDir))
+ {
+ result = dotnetInstallDir;
}
else if (!string.IsNullOrEmpty(userProfile))
{
@@ -46,9 +62,10 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
public static string GetDotNetInstallDir(RuntimeArchitecture arch)
{
var dotnetDir = DotNetHome;
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ var archSpecificDir = Path.Combine(dotnetDir, arch.ToString());
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && Directory.Exists(archSpecificDir))
{
- dotnetDir = Path.Combine(dotnetDir, arch.ToString());
+ dotnetDir = archSpecificDir;
}
return dotnetDir;
diff --git a/src/Middleware/SpaServices/src/Prerendering/RenderToStringResult.cs b/src/Middleware/SpaServices/src/Prerendering/RenderToStringResult.cs
index f6f5d77911..ce37c54fed 100644
--- a/src/Middleware/SpaServices/src/Prerendering/RenderToStringResult.cs
+++ b/src/Middleware/SpaServices/src/Prerendering/RenderToStringResult.cs
@@ -5,6 +5,7 @@ using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;
+using System.Text.Encodings.Web;
namespace Microsoft.AspNetCore.SpaServices.Prerendering
{
@@ -54,9 +55,13 @@ namespace Microsoft.AspNetCore.SpaServices.Prerendering
foreach (var property in Globals.Properties())
{
- stringBuilder.AppendFormat("window.{0} = {1};",
- property.Name,
- property.Value.ToString(Formatting.None));
+ var propertyNameJavaScriptString = JavaScriptEncoder.Default.Encode(property.Name);
+ var valueJson = property.Value.ToString(Formatting.None);
+ var valueJsonJavaScriptString = JavaScriptEncoder.Default.Encode(valueJson);
+
+ stringBuilder.AppendFormat("window[\"{0}\"] = JSON.parse(\"{1}\");",
+ propertyNameJavaScriptString,
+ valueJsonJavaScriptString);
}
return stringBuilder.ToString();
diff --git a/src/Middleware/SpaServices/test/Microsoft.AspNetCore.SpaServices.Tests.csproj b/src/Middleware/SpaServices/test/Microsoft.AspNetCore.SpaServices.Tests.csproj
new file mode 100644
index 0000000000..0d18e4e2a0
--- /dev/null
+++ b/src/Middleware/SpaServices/test/Microsoft.AspNetCore.SpaServices.Tests.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netcoreapp3.0
+
+
+
+
+
+
+
diff --git a/src/Middleware/SpaServices/test/RenderToStringResultTests.cs b/src/Middleware/SpaServices/test/RenderToStringResultTests.cs
new file mode 100644
index 0000000000..e87312d211
--- /dev/null
+++ b/src/Middleware/SpaServices/test/RenderToStringResultTests.cs
@@ -0,0 +1,71 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Collections.Generic;
+using Microsoft.AspNetCore.SpaServices.Prerendering;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Xunit;
+
+namespace Microsoft.AspNetCore.SpaServices.Tests
+{
+ public class RenderToStringResultTest
+ {
+ [Fact]
+ public void HandlesNullGlobals()
+ {
+ // Arrange
+ var renderToStringResult = new RenderToStringResult();
+ renderToStringResult.Globals = null;
+
+ // Act
+ var actualScript = renderToStringResult.CreateGlobalsAssignmentScript();
+
+ // Assert
+ Assert.Equal(string.Empty, actualScript);
+ }
+
+ [Fact]
+ public void HandlesGlobalsWithMultipleProperties()
+ {
+ // Arrange
+ var renderToStringResult = new RenderToStringResult();
+ renderToStringResult.Globals = ToJObject(new
+ {
+ FirstProperty = "first value",
+ SecondProperty = new[] { "Array entry 0", "Array entry 1" }
+ });
+
+ // Act
+ var actualScript = renderToStringResult.CreateGlobalsAssignmentScript();
+
+ // Assert
+ var expectedScript = @"window[""FirstProperty""] = JSON.parse(""\u0022first value\u0022"");" +
+ @"window[""SecondProperty""] = JSON.parse(""[\u0022Array entry 0\u0022,\u0022Array entry 1\u0022]"");";
+ Assert.Equal(expectedScript, actualScript);
+ }
+
+ [Fact]
+ public void HandlesGlobalsWithCorrectStringEncoding()
+ {
+ // Arrange
+ var renderToStringResult = new RenderToStringResult();
+ renderToStringResult.Globals = ToJObject(new Dictionary
+ {
+ { "Va\"'}\u260E" }
+ });
+
+ // Act
+ var actualScript = renderToStringResult.CreateGlobalsAssignmentScript();
+
+ // Assert
+ var expectedScript = @"window[""Va\u003Cl\u0027u\u0022e""] = JSON.parse(""\u0022\u003C/tag\u003E\\\u0022\u0027}\u260E\u0022"");";
+ Assert.Equal(expectedScript, actualScript);
+ }
+
+ private static JObject ToJObject(object value)
+ {
+ return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(value));
+ }
+ }
+}
diff --git a/src/Shared/E2ETesting/WebElementExtensions.cs b/src/Shared/E2ETesting/WebElementExtensions.cs
new file mode 100644
index 0000000000..6f08e1ba31
--- /dev/null
+++ b/src/Shared/E2ETesting/WebElementExtensions.cs
@@ -0,0 +1,17 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+namespace OpenQA.Selenium
+{
+ public static class WebElementExtensions
+ {
+ // see: https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/214
+ //
+ // Calling Clear() can trigger onchange, which will revert the value to its default.
+ public static void ReplaceText(this IWebElement element, string text)
+ {
+ element.SendKeys(Keys.Control + "a");
+ element.SendKeys(text);
+ }
+ }
+}
diff --git a/src/SignalR/server/Core/src/Internal/DefaultHubDispatcher.cs b/src/SignalR/server/Core/src/Internal/DefaultHubDispatcher.cs
index cead347976..b0a841e1b7 100644
--- a/src/SignalR/server/Core/src/Internal/DefaultHubDispatcher.cs
+++ b/src/SignalR/server/Core/src/Internal/DefaultHubDispatcher.cs
@@ -316,15 +316,9 @@ namespace Microsoft.AspNetCore.SignalR.Internal
_ = StreamResultsAsync(hubMethodInvocationMessage.InvocationId, connection, enumerable, scope, hubActivator, hub, cts, hubMethodInvocationMessage);
}
- else if (string.IsNullOrEmpty(hubMethodInvocationMessage.InvocationId))
- {
- // Send Async, no response expected
- invocation = ExecuteHubMethod(methodExecutor, hub, arguments);
- }
-
else
{
- // Invoke Async, one reponse expected
+ // Invoke or Send
async Task ExecuteInvocation()
{
object result;
@@ -350,7 +344,12 @@ namespace Microsoft.AspNetCore.SignalR.Internal
}
}
- await connection.WriteAsync(CompletionMessage.WithResult(hubMethodInvocationMessage.InvocationId, result));
+ // No InvocationId - Send Async, no response expected
+ if (!string.IsNullOrEmpty(hubMethodInvocationMessage.InvocationId))
+ {
+ // Invoke Async, one reponse expected
+ await connection.WriteAsync(CompletionMessage.WithResult(hubMethodInvocationMessage.InvocationId, result));
+ }
}
invocation = ExecuteInvocation();
}
diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs
index bc31d32c4c..9a45f00e68 100644
--- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs
+++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs
@@ -3402,6 +3402,46 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
}
+ [Fact]
+ public async Task UploadStreamFromSendReleasesHubActivatorOnceComplete()
+ {
+ using (StartVerifiableLog())
+ {
+ var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(builder =>
+ {
+ builder.AddSingleton(typeof(IHubActivator<>), typeof(CustomHubActivator<>));
+ }, LoggerFactory);
+ var connectionHandler = serviceProvider.GetService>();
+
+ using (var client = new TestClient())
+ {
+ var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout();
+
+ var hubActivator = serviceProvider.GetService>() as CustomHubActivator;
+ var createTask = hubActivator.CreateTask.Task;
+
+ // null ID means we're doing a Send and not an Invoke
+ await client.BeginUploadStreamAsync(invocationId: null, nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, args: Array.Empty