diff --git a/.vscode/settings.json b/.vscode/settings.json index 89a3c7cca0c7..3a67def99f21 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,9 @@ { - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.*proj": "xml", - "*.props": "xml", - "*.targets": "xml", - "*.tasks": "xml" - } + "files.trimTrailingWhitespace": true, + "files.associations": { + "*.*proj": "xml", + "*.props": "xml", + "*.targets": "xml", + "*.tasks": "xml" + } } diff --git a/Directory.Build.targets b/Directory.Build.targets index 5006951f11e7..f5b217f3650d 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -16,7 +16,8 @@ false - true + + true diff --git a/eng/Build.props b/eng/Build.props index e47402faf882..fa5e1d21d634 100644 --- a/eng/Build.props +++ b/eng/Build.props @@ -28,6 +28,7 @@ - @@ -149,10 +148,16 @@ and are generated based on the last package release. + + + + + + @@ -170,8 +175,8 @@ and are generated based on the last package release. - + diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index 9bdbb3ec7bde..d1d79ea73f2a 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -8,11 +8,11 @@ + + + - - - - + diff --git a/eng/Signing.props b/eng/Signing.props index 0dc432069dfa..829cd569e995 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -54,6 +54,7 @@ + @@ -98,10 +99,17 @@ + + + + diff --git a/eng/Tools.props b/eng/Tools.props index 46285b1448e0..cdfb67026c6a 100644 --- a/eng/Tools.props +++ b/eng/Tools.props @@ -6,7 +6,9 @@ Without this here, we see regular failures with 'error MSB4236: The SDK 'Yarn.MSBuild' specified could not be found.' Since this project is evaluated before .npmproj files are loaded, this should cause the package to end up in the NuGet cache ahead of time. + + This is not needed in source build. --> - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 69bf0109bb59..3ed95a15550c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -9,412 +9,412 @@ --> - + https://github.com/aspnet/Blazor - 7eeab316fa122b69a9bd777c93dcc78bc6a68905 + f5d0da88db7b29207fc005a7478bf0b9b6fc9fc9 - + https://github.com/aspnet/AspNetCore-Tooling - e60ad5d5d050ab5ee87f4cf1fb9ae440db87777d + 01db467df0350147bbf04f80f8c16033c23a4b4a - + https://github.com/aspnet/AspNetCore-Tooling - e60ad5d5d050ab5ee87f4cf1fb9ae440db87777d + 01db467df0350147bbf04f80f8c16033c23a4b4a - + https://github.com/aspnet/AspNetCore-Tooling - e60ad5d5d050ab5ee87f4cf1fb9ae440db87777d + 01db467df0350147bbf04f80f8c16033c23a4b4a - + https://github.com/aspnet/AspNetCore-Tooling - e60ad5d5d050ab5ee87f4cf1fb9ae440db87777d + 01db467df0350147bbf04f80f8c16033c23a4b4a - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/EntityFrameworkCore - 44d8c31bcb4bb46714389619070be9d1c6bad319 + 0e4d1f3b9b9051ebf08342047a6db4b8a2bfcaef - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce https://github.com/dotnet/corefx a28176b5ec68b6da1472934fe9493790d1665cae - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/dotnet/core-setup - 62a9f1bdf39ba0b719875d33e248408d3802e925 + 9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46 - + https://github.com/dotnet/core-setup - 62a9f1bdf39ba0b719875d33e248408d3802e925 + 9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46 - + https://github.com/dotnet/core-setup - 62a9f1bdf39ba0b719875d33e248408d3802e925 + 9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46 - + https://github.com/dotnet/core-setup - 62a9f1bdf39ba0b719875d33e248408d3802e925 + 9042fe6c81aa3b47f58ccd94ff02e42f9f7a4e46 - + https://github.com/dotnet/corefx - a6c1d1ac235aba5bf17dd06228a62509192cda6a + be3d4bad4576eecda116d3e9a368cd6959ecf5ce - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 https://github.com/dotnet/arcade @@ -428,13 +428,13 @@ https://github.com/dotnet/arcade a11024c8c22cc762011addafc30c653c938048f4 - + https://github.com/aspnet/Extensions - dbe3543601c1ab290fde1ae30ea8dd978d33d4d3 + 3702cd2801d0459663bccebe6ae63054748b8589 - + https://github.com/dotnet/roslyn - a1905991543bed104f7f7f0842aca2b65d263b87 + 3c865821f2864393a0ff7fe22c92ded6d51a546c diff --git a/eng/Versions.props b/eng/Versions.props index c3b3b87f7b3d..a6cffe72966b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -52,115 +52,115 @@ 1.0.0-beta.19411.1 - 3.3.0-beta3-19406-05 + 3.4.0-beta1-19456-03 - 5.0.0-alpha1.19404.5 - 5.0.0-alpha1.19404.5 - 5.0.0-alpha1.19404.5 - 2.1.0-alpha1.19404.5 + 5.0.0-alpha1.19465.2 + 5.0.0-alpha1.19465.2 + 5.0.0-alpha1.19465.2 + 2.1.0-alpha1.19465.2 - 1.1.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 + 1.2.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 4.7.0-preview6.19264.9 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 1.8.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 - 5.0.0-alpha1.19381.2 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 1.9.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 + 5.0.0-alpha1.19462.7 - 5.0.0-alpha1.19381.2 + 5.0.0-alpha1.19462.7 - 5.0.0-alpha1.19426.2 + 5.0.0-alpha1.19463.2 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 - 5.0.0-alpha1.19406.3 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 + 5.0.0-alpha1.19466.1 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 - 5.0.0-alpha1.19407.3 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 + 5.0.0-alpha1.19467.7 - 5.0.0-alpha1.19426.2 - 5.0.0-alpha1.19426.2 - 5.0.0-alpha1.19426.2 - 5.0.0-alpha1.19426.2 + 5.0.0-alpha1.19467.1 + 5.0.0-alpha1.19467.1 + 5.0.0-alpha1.19467.1 + 5.0.0-alpha1.19467.1 2.3.2 10.0.1 + 15.8.166 15.8.166 + 1.2.6 15.8.166 3.0.0 3.0.0 diff --git a/eng/Workarounds.targets b/eng/Workarounds.targets index 21aabd09405c..bb01d5f38bd4 100644 --- a/eng/Workarounds.targets +++ b/eng/Workarounds.targets @@ -20,8 +20,8 @@ - - + + diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index 8854d979f379..46d175fdfdca 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -1,9 +1,9 @@ param ( $darcVersion = $null, - $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" + $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16", + $verbosity = "m" ) -$verbosity = "m" . $PSScriptRoot\tools.ps1 function InstallDarcCli ($darcVersion) { diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index abdd0bc05a13..242429bca65e 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -3,6 +3,7 @@ source="${BASH_SOURCE[0]}" darcVersion='' versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" +verbosity=m while [[ $# > 0 ]]; do opt="$(echo "$1" | awk '{print tolower($0)}')" @@ -15,6 +16,10 @@ while [[ $# > 0 ]]; do versionEndpoint=$2 shift ;; + --verbosity) + verbosity=$2 + shift + ;; *) echo "Invalid argument: $1" usage @@ -34,7 +39,6 @@ while [[ -h "$source" ]]; do [[ $source != /* ]] && source="$scriptroot/$source" done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -verbosity=m . "$scriptroot/tools.sh" diff --git a/eng/common/native/CommonLibrary.psm1 b/eng/common/native/CommonLibrary.psm1 index 2a08d5246e73..41416862d913 100644 --- a/eng/common/native/CommonLibrary.psm1 +++ b/eng/common/native/CommonLibrary.psm1 @@ -152,6 +152,8 @@ function Get-File { } else { Write-Verbose "Downloading $Uri" + # Don't display the console progress UI - it's a huge perf hit + $ProgressPreference = 'SilentlyContinue' while($Attempt -Lt $DownloadRetries) { try { diff --git a/eng/common/performance/perfhelixpublish.proj b/eng/common/performance/perfhelixpublish.proj index 05e5f098915b..e5826b532370 100644 --- a/eng/common/performance/perfhelixpublish.proj +++ b/eng/common/performance/perfhelixpublish.proj @@ -5,8 +5,14 @@ --dotnet-versions %DOTNET_VERSION% --cli-source-info args --cli-branch %PERFLAB_BRANCH% --cli-commit-sha %PERFLAB_HASH% --cli-repository https://github.com/%PERFLAB_REPO% --cli-source-timestamp %PERFLAB_BUILDTIMESTAMP% py -3 %HELIX_CORRELATION_PAYLOAD%\Core_Root\CoreRun.exe + %HELIX_CORRELATION_PAYLOAD%\Baseline_Core_Root\CoreRun.exe $(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts + %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts_Baseline + %HELIX_CORRELATION_PAYLOAD%\performance\src\tools\ResultsComparer\ResultsComparer.csproj + %HELIX_CORRELATION_PAYLOAD%\performance\tools\dotnet\$(Architecture)\dotnet.exe + %25%25 + %HELIX_WORKITEM_ROOT%\testResults.xml @@ -24,14 +30,24 @@ --dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP python3 $(BaseDirectory)/Core_Root/corerun + $(BaseDirectory)/Baseline_Core_Root/corerun $(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts + $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline + $(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj + $(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet + %25 + $HELIX_WORKITEM_ROOT/testResults.xml --corerun $(CoreRun) + + --corerun $(BaselineCoreRun) + + $(Python) $(WorkItemCommand) --incremental no --architecture $(Architecture) -f $(_Framework) $(PerfLabArguments) @@ -57,20 +73,29 @@ + + false + + $(WorkItemDirectory) - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) 4:00 + $(WorkItemDirectory) - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory)" + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) 4:00 diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index 937e4544a103..268986246e54 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -1,6 +1,7 @@ Param( [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, [string] $CoreRootDirectory, + [string] $BaselineCoreRootDirectory, [string] $Architecture="x64", [string] $Framework="netcoreapp5.0", [string] $CompilationMode="Tiered", @@ -12,11 +13,13 @@ Param( [string] $Csproj="src\benchmarks\micro\MicroBenchmarks.csproj", [string] $Kind="micro", [switch] $Internal, + [switch] $Compare, [string] $Configurations="CompilationMode=$CompilationMode" ) $RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") $UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) +$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) $PayloadDirectory = (Join-Path $SourceDirectory "Payload") $PerformanceDirectory = (Join-Path $PayloadDirectory "performance") @@ -29,11 +32,17 @@ $HelixSourcePrefix = "pr" $Queue = "Windows.10.Amd64.ClientRS4.DevEx.15.8.Open" if ($Framework.StartsWith("netcoreapp")) { - $Queue = "Windows.10.Amd64.ClientRS4.Open" + $Queue = "Windows.10.Amd64.ClientRS5.Open" +} + +if ($Compare) { + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf.Open" + $PerfLabArguments = "" + $ExtraBenchmarkDotNetArguments = "" } if ($Internal) { - $Queue = "Windows.10.Amd64.ClientRS5.Perf" + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf" $PerfLabArguments = "--upload-to-perflab-container" $ExtraBenchmarkDotNetArguments = "" $Creator = "" @@ -56,6 +65,10 @@ if ($UseCoreRun) { $NewCoreRoot = (Join-Path $PayloadDirectory "Core_Root") Move-Item -Path $CoreRootDirectory -Destination $NewCoreRoot } +if ($UseBaselineCoreRun) { + $NewBaselineCoreRoot = (Join-Path $PayloadDirectory "Baseline_Core_Root") + Move-Item -Path $BaselineCoreRootDirectory -Destination $NewBaselineCoreRoot +} $DocsDir = (Join-Path $PerformanceDirectory "docs") robocopy $DocsDir $WorkItemDirectory @@ -80,7 +93,9 @@ Write-PipelineSetVariable -Name 'TargetCsproj' -Value "$Csproj" -IsMultiJobVaria Write-PipelineSetVariable -Name 'Kind' -Value "$Kind" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'Architecture' -Value "$Architecture" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'UseCoreRun' -Value "$UseCoreRun" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false # Helix Arguments Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index 068bfcbb3b36..550b3ebf18e6 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -2,6 +2,7 @@ source_directory=$BUILD_SOURCESDIRECTORY core_root_directory= +baseline_core_root_directory= architecture=x64 framework=netcoreapp5.0 compilation_mode=tiered @@ -10,12 +11,14 @@ branch=$BUILD_SOURCEBRANCH commit_sha=$BUILD_SOURCEVERSION build_number=$BUILD_BUILDNUMBER internal=false +compare=false kind="micro" run_categories="coreclr corefx" csproj="src\benchmarks\micro\MicroBenchmarks.csproj" configurations= run_from_perf_repo=false use_core_run=true +use_baseline_core_run=true while (($# > 0)); do lowerI="$(echo $1 | awk '{print tolower($0)}')" @@ -28,6 +31,10 @@ while (($# > 0)); do core_root_directory=$2 shift 2 ;; + --baselinecorerootdirectory) + baseline_core_root_directory=$2 + shift 2 + ;; --architecture) architecture=$2 shift 2 @@ -72,6 +79,10 @@ while (($# > 0)); do internal=true shift 1 ;; + --compare) + compare=true + shift 1 + ;; --configurations) configurations=$2 shift 2 @@ -114,6 +125,10 @@ if [ -z "$core_root_directory" ]; then use_core_run=false fi +if [ -z "$baseline_core_root_directory" ]; then + use_baseline_core_run=false +fi + payload_directory=$source_directory/Payload performance_directory=$payload_directory/performance workitem_directory=$source_directory/workitem @@ -123,6 +138,19 @@ queue=Ubuntu.1804.Amd64.Open creator=$BUILD_DEFINITIONNAME helix_source_prefix="pr" +if [[ "$compare" == true ]]; then + extra_benchmark_dotnet_arguments= + perflab_arguments= + + # No open queues for arm64 + if [[ "$architecture" = "arm64" ]]; then + echo "Compare not available for arm64" + exit 1 + fi + + queue=Ubuntu.1804.Amd64.Tiger.Perf.Open +fi + if [[ "$internal" == true ]]; then perflab_arguments="--upload-to-perflab-container" helix_source_prefix="official" @@ -132,7 +160,7 @@ if [[ "$internal" == true ]]; then if [[ "$architecture" = "arm64" ]]; then queue=Ubuntu.1804.Arm64.Perf else - queue=Ubuntu.1804.Amd64.Perf + queue=Ubuntu.1804.Amd64.Tiger.Perf fi fi @@ -156,21 +184,33 @@ if [[ "$use_core_run" = true ]]; then mv $core_root_directory $new_core_root fi +if [[ "$use_baseline_core_run" = true ]]; then + new_baseline_core_root=$payload_directory/Baseline_Core_Root + mv $baseline_core_root_directory $new_baseline_core_root +fi + +ci=true + +_script_dir=$(pwd)/eng/common +. "$_script_dir/pipeline-logging-functions.sh" + # Make sure all of our variables are available for future steps -echo "##vso[task.setvariable variable=UseCoreRun]$use_core_run" -echo "##vso[task.setvariable variable=Architecture]$architecture" -echo "##vso[task.setvariable variable=PayloadDirectory]$payload_directory" -echo "##vso[task.setvariable variable=PerformanceDirectory]$performance_directory" -echo "##vso[task.setvariable variable=WorkItemDirectory]$workitem_directory" -echo "##vso[task.setvariable variable=Queue]$queue" -echo "##vso[task.setvariable variable=SetupArguments]$setup_arguments" -echo "##vso[task.setvariable variable=Python]python3" -echo "##vso[task.setvariable variable=PerfLabArguments]$perflab_arguments" -echo "##vso[task.setvariable variable=ExtraBenchmarkDotNetArguments]$extra_benchmark_dotnet_arguments" -echo "##vso[task.setvariable variable=BDNCategories]$run_categories" -echo "##vso[task.setvariable variable=TargetCsproj]$csproj" -echo "##vso[task.setvariable variable=RunFromPerfRepo]$run_from_perf_repo" -echo "##vso[task.setvariable variable=Creator]$creator" -echo "##vso[task.setvariable variable=HelixSourcePrefix]$helix_source_prefix" -echo "##vso[task.setvariable variable=Kind]$kind" -echo "##vso[task.setvariable variable=_BuildConfig]$architecture.$kind.$framework" \ No newline at end of file +Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "UseBaselineCoreRun" -value "$use_baseline_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false +Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "WorkItemDirectory" -value "$workitem_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "Queue" -value "$queue" -is_multi_job_variable false +Write-PipelineSetVariable -name "SetupArguments" -value "$setup_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "Python" -value "$python3" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerfLabArguments" -value "$perflab_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "ExtraBenchmarkDotNetArguments" -value "$extra_benchmark_dotnet_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "BDNCategories" -value "$run_categories" -is_multi_job_variable false +Write-PipelineSetVariable -name "TargetCsproj" -value "$csproj" -is_multi_job_variable false +Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" -is_multi_job_variable false +Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false +Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false +Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false +Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false +Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false diff --git a/eng/common/post-build/darc-gather-drop.ps1 b/eng/common/post-build/darc-gather-drop.ps1 index 93a0bd832858..89854d3c1c2a 100644 --- a/eng/common/post-build/darc-gather-drop.ps1 +++ b/eng/common/post-build/darc-gather-drop.ps1 @@ -19,7 +19,17 @@ try { ExitWithExitCode $exitCode } + # For now, only use a dry run. + # Ideally we would change darc to enable a quick request that + # would check whether the file exists that you can download it, + # and that it won't conflict with other files. + # https://github.com/dotnet/arcade/issues/3674 + # Right now we can't remove continue-on-error because we ocassionally will have + # dependencies that have no associated builds (e.g. an old dependency). + # We need to add an option to baseline specific dependencies away, or add them manually + # to the BAR. darc gather-drop --non-shipping ` + --dry-run ` --continue-on-error ` --id $BarBuildId ` --output-dir $DropLocation ` diff --git a/eng/common/post-build/dotnetsymbol-init.ps1 b/eng/common/post-build/dotnetsymbol-init.ps1 deleted file mode 100644 index e7659b98c8c3..000000000000 --- a/eng/common/post-build/dotnetsymbol-init.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -param ( - $dotnetsymbolVersion = $null -) - -$ErrorActionPreference = "Stop" -Set-StrictMode -Version 2.0 - -. $PSScriptRoot\..\tools.ps1 - -$verbosity = "minimal" - -function Installdotnetsymbol ($dotnetsymbolVersion) { - $dotnetsymbolPackageName = "dotnet-symbol" - - $dotnetRoot = InitializeDotNetCli -install:$true - $dotnet = "$dotnetRoot\dotnet.exe" - $toolList = & "$dotnet" tool list --global - - if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { - Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." - } - else { - Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." - Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity $verbosity --global - } -} - -Installdotnetsymbol $dotnetsymbolVersion diff --git a/eng/common/post-build/sourcelink-cli-init.ps1 b/eng/common/post-build/sourcelink-cli-init.ps1 deleted file mode 100644 index 9eaa25b3b507..000000000000 --- a/eng/common/post-build/sourcelink-cli-init.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -param ( - $sourcelinkCliVersion = $null -) - -$ErrorActionPreference = "Stop" -Set-StrictMode -Version 2.0 - -. $PSScriptRoot\..\tools.ps1 - -$verbosity = "minimal" - -function InstallSourcelinkCli ($sourcelinkCliVersion) { - $sourcelinkCliPackageName = "sourcelink" - - $dotnetRoot = InitializeDotNetCli -install:$true - $dotnet = "$dotnetRoot\dotnet.exe" - $toolList = & "$dotnet" tool list --global - - if (($toolList -like "*$sourcelinkCliPackageName*") -and ($toolList -like "*$sourcelinkCliVersion*")) { - Write-Host "SourceLink CLI version $sourcelinkCliVersion is already installed." - } - else { - Write-Host "Installing SourceLink CLI version $sourcelinkCliVersion..." - Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $sourcelinkCliPackageName --version $sourcelinkCliVersion --verbosity $verbosity --global - } -} - -InstallSourcelinkCli $sourcelinkCliVersion diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 41e01ae6e674..bbfdacca1307 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -1,8 +1,8 @@ param( [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet packages to be checked are stored [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation - [Parameter(Mandatory=$true)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade - [Parameter(Mandatory=$true)][string] $GHCommit, # GitHub commit SHA used to build the packages + [Parameter(Mandatory=$false)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade + [Parameter(Mandatory=$false)][string] $GHCommit, # GitHub commit SHA used to build the packages [Parameter(Mandatory=$true)][string] $SourcelinkCliVersion # Version of SourceLink CLI to use ) @@ -13,6 +13,12 @@ param( # all files present in the repo at a specific commit point. $global:RepoFiles = @{} +# Maximum number of jobs to run in parallel +$MaxParallelJobs = 6 + +# Wait time between check for system load +$SecondsBetweenLoadChecks = 10 + $ValidatePackage = { param( [string] $PackagePath # Full path to a Symbols.NuGet package @@ -22,8 +28,8 @@ $ValidatePackage = { # Ensure input file exist if (!(Test-Path $PackagePath)) { - Write-PipelineTaskError "Input file does not exist: $PackagePath" - ExitWithExitCode 1 + Write-Host "Input file does not exist: $PackagePath" + return 1 } # Extensions for which we'll look for SourceLink information @@ -38,7 +44,7 @@ $ValidatePackage = { Add-Type -AssemblyName System.IO.Compression.FileSystem - [System.IO.Directory]::CreateDirectory($ExtractPath); + [System.IO.Directory]::CreateDirectory($ExtractPath) | Out-Null try { $zip = [System.IO.Compression.ZipFile]::OpenRead($PackagePath) @@ -138,16 +144,18 @@ $ValidatePackage = { if ($FailedFiles -eq 0) { Write-Host "Passed." + return 0 } else { - Write-PipelineTaskError "$PackagePath has broken SourceLink links." + Write-Host "$PackagePath has broken SourceLink links." + return 1 } } function ValidateSourceLinkLinks { - if (!($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { + if ($GHRepoName -ne "" -and !($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { if (!($GHRepoName -Match "^[^\s-]+-[^\s]+$")) { - Write-PipelineTaskError "GHRepoName should be in the format / or -" + Write-PipelineTaskError "GHRepoName should be in the format / or -. '$GHRepoName'" ExitWithExitCode 1 } else { @@ -155,30 +163,33 @@ function ValidateSourceLinkLinks { } } - if (!($GHCommit -Match "^[0-9a-fA-F]{40}$")) { - Write-PipelineTaskError "GHCommit should be a 40 chars hexadecimal string" + if ($GHCommit -ne "" -and !($GHCommit -Match "^[0-9a-fA-F]{40}$")) { + Write-PipelineTaskError "GHCommit should be a 40 chars hexadecimal string. '$GHCommit'" ExitWithExitCode 1 } - $RepoTreeURL = -Join("http://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") - $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") + if ($GHRepoName -ne "" -and $GHCommit -ne "") { + $RepoTreeURL = -Join("http://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") + $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") - try { - # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash - $Data = Invoke-WebRequest $RepoTreeURL -UseBasicParsing | ConvertFrom-Json | Select-Object -ExpandProperty tree + try { + # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash + $Data = Invoke-WebRequest $RepoTreeURL -UseBasicParsing | ConvertFrom-Json | Select-Object -ExpandProperty tree - foreach ($file in $Data) { - $Extension = [System.IO.Path]::GetExtension($file.path) + foreach ($file in $Data) { + $Extension = [System.IO.Path]::GetExtension($file.path) - if ($CodeExtensions.Contains($Extension)) { - $RepoFiles[$file.path] = 1 + if ($CodeExtensions.Contains($Extension)) { + $RepoFiles[$file.path] = 1 + } } } + catch { + Write-Host "Problems downloading the list of files from the repo. Url used: $RepoTreeURL . Execution will proceed without caching." + } } - catch { - Write-PipelineTaskError "Problems downloading the list of files from the repo. Url used: $RepoTreeURL" - Write-Host $_ - ExitWithExitCode 1 + elseif ($GHRepoName -ne "" -or $GHCommit -ne "") { + Write-Host "For using the http caching mechanism both GHRepoName and GHCommit should be informed." } if (Test-Path $ExtractPath) { @@ -186,14 +197,33 @@ function ValidateSourceLinkLinks { } # Process each NuGet package in parallel - $Jobs = @() Get-ChildItem "$InputPath\*.symbols.nupkg" | ForEach-Object { - $Jobs += Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName + Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName | Out-Null + $NumJobs = @(Get-Job -State 'Running').Count + + while ($NumJobs -ge $MaxParallelJobs) { + Write-Host "There are $NumJobs validation jobs running right now. Waiting $SecondsBetweenLoadChecks seconds to check again." + sleep $SecondsBetweenLoadChecks + $NumJobs = @(Get-Job -State 'Running').Count + } + + foreach ($Job in @(Get-Job -State 'Completed')) { + Receive-Job -Id $Job.Id + Remove-Job -Id $Job.Id + } } - foreach ($Job in $Jobs) { - Wait-Job -Id $Job.Id | Receive-Job + $ValidationFailures = 0 + foreach ($Job in @(Get-Job)) { + $jobResult = Wait-Job -Id $Job.Id | Receive-Job + if ($jobResult -ne "0") { + $ValidationFailures++ + } + } + if ($ValidationFailures -gt 0) { + Write-PipelineTaskError " $ValidationFailures package(s) failed validation." + ExitWithExitCode 1 } } diff --git a/eng/common/post-build/symbols-validation.ps1 b/eng/common/post-build/symbols-validation.ps1 index d5ec51b150f2..096ac321d129 100644 --- a/eng/common/post-build/symbols-validation.ps1 +++ b/eng/common/post-build/symbols-validation.ps1 @@ -37,10 +37,10 @@ function FirstMatchingSymbolDescriptionOrDefault { # DWARF file for a .dylib $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") - $dotnetsymbolExe = "$env:USERPROFILE\.dotnet\tools" - $dotnetsymbolExe = Resolve-Path "$dotnetsymbolExe\dotnet-symbol.exe" + $dotnetSymbolExe = "$env:USERPROFILE\.dotnet\tools" + $dotnetSymbolExe = Resolve-Path "$dotnetSymbolExe\dotnet-symbol.exe" - & $dotnetsymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null + & $dotnetSymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null if (Test-Path $PdbPath) { return "PDB" @@ -159,25 +159,25 @@ function CheckSymbolsAvailable { } } -function Installdotnetsymbol { - $dotnetsymbolPackageName = "dotnet-symbol" +function InstallDotnetSymbol { + $dotnetSymbolPackageName = "dotnet-symbol" $dotnetRoot = InitializeDotNetCli -install:$true $dotnet = "$dotnetRoot\dotnet.exe" $toolList = & "$dotnet" tool list --global - if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { - Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." + if (($toolList -like "*$dotnetSymbolPackageName*") -and ($toolList -like "*$dotnetSymbolVersion*")) { + Write-Host "dotnet-symbol version $dotnetSymbolVersion is already installed." } else { - Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." + Write-Host "Installing dotnet-symbol version $dotnetSymbolVersion..." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity "minimal" --global + & "$dotnet" tool install $dotnetSymbolPackageName --version $dotnetSymbolVersion --verbosity "minimal" --global } } try { - Installdotnetsymbol + InstallDotnetSymbol CheckSymbolsAvailable } diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index aab7589f2cc7..fa239484f2ca 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -53,8 +53,8 @@ if ($ValidPath -eq $False) exit 1 } -& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $ArtifactsDirectory -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel -$gdnFolder = Join-Path $ArtifactsDirectory ".gdn" +& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory (Split-Path $SourceDirectory -Parent) -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel +$gdnFolder = Join-Path (Split-Path $SourceDirectory -Parent) ".gdn" if ($TsaOnboard) { if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) { @@ -86,8 +86,8 @@ if ($TsaPublish) { if (-not $TsaRepositoryName) { $TsaRepositoryName = "$($Repository)-$($BranchName)" } - Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $SourceDirectory --logger-level $GuardianLoggerLevel" - & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --onboard $True --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel if ($LASTEXITCODE -ne 0) { Write-Host "Guardian tsa-publish failed with exit code $LASTEXITCODE." exit $LASTEXITCODE diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1 index 26e01c0673c1..c737eb0e71c1 100644 --- a/eng/common/sdl/init-sdl.ps1 +++ b/eng/common/sdl/init-sdl.ps1 @@ -11,6 +11,9 @@ $ErrorActionPreference = "Stop" Set-StrictMode -Version 2.0 $LASTEXITCODE = 0 +# Don't display the console progress UI - it's a huge perf hit +$ProgressPreference = 'SilentlyContinue' + # Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file $encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken")) $escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn") diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 3f97ac2f16cc..256ffbfb93a3 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + - + diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index d7b85644581b..9bc25314ae21 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -25,43 +25,35 @@ if ($ValidPath -eq $False) exit 1 } +$configParam = @("--config") + foreach ($tool in $ToolsList) { $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" - $config = $False Write-Host $tool # We have to manually configure tools that run on source to look at the source directory only if ($tool -eq "credscan") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory : $TargetDirectory `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory : $TargetDirectory " $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) if ($LASTEXITCODE -ne 0) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE } - $config = $True } if ($tool -eq "policheck") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target : $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target : $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) if ($LASTEXITCODE -ne 0) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE } - $config = $True } - Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile $config" - if ($config) { - & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian run for $tool using $gdnConfigFile failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE - } - } else { - & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian run for $tool failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE - } - } + $configParam+=$gdnConfigFile } +Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" +& $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam +if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE +} diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index 91621cf88fdb..a7f996419522 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -1,7 +1,10 @@ parameters: overrideParameters: '' # Optional: to override values for parameters. additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")' - continueOnError: false # optional: determines whether to continue the build if the step errors; + # There is some sort of bug (has been reported) in Azure DevOps where if this parameter is named + # 'continueOnError', the parameter value is not correctly picked up. + # This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter + sdlContinueOnError: false # optional: determines whether to continue the build if the step errors; dependsOn: '' # Optional: dependencies of the job jobs: @@ -26,12 +29,12 @@ jobs: -InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts displayName: Extract Blob Artifacts - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - powershell: eng/common/sdl/extract-artifact-packages.ps1 -InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts displayName: Extract Package Artifacts - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' - task: NuGetCommand@2 @@ -45,12 +48,12 @@ jobs: - ${{ if ne(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 ${{ parameters.overrideParameters }} displayName: Execute SDL - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - ${{ if eq(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 - -GuardianPackageName Microsoft.Guardian.Cli.0.7.1 + -GuardianPackageName Microsoft.Guardian.Cli.0.7.2 -NugetPackageDirectory $(Build.SourcesDirectory)\.packages -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) ${{ parameters.additionalParameters }} displayName: Execute SDL - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} diff --git a/eng/common/templates/post-build/channels/internal-servicing.yml b/eng/common/templates/post-build/channels/internal-servicing.yml index dc065ab3085b..4ca36358d962 100644 --- a/eng/common/templates/post-build/channels/internal-servicing.yml +++ b/eng/common/templates/post-build/channels/internal-servicing.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: IS_Publish @@ -20,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish @@ -34,7 +42,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: publish_assets displayName: Publish Assets @@ -92,6 +102,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed 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 f2b0cfb269b5..812def315476 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -1,5 +1,8 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Dev5_Publish @@ -20,10 +23,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish @@ -34,7 +43,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -91,7 +102,13 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed 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 fd6c09b227ff..c2d2076730bb 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -1,5 +1,8 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Tools_Latest_Publish @@ -20,10 +23,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish @@ -34,7 +43,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -91,7 +102,13 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index 771dcf4ef84f..afa95421480b 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -1,5 +1,8 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: Publish @@ -20,10 +23,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish @@ -34,7 +43,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -92,6 +103,12 @@ stages: /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 diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/public-release.yml index 00108bd3f8c8..7ec1f89c08f3 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/public-release.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: PubRel_Publish @@ -20,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish @@ -34,7 +42,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: publish_assets displayName: Publish Assets @@ -80,6 +90,7 @@ stages: /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) @@ -92,6 +103,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed 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 f64184da9f27..12124d621573 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,3 +1,7 @@ +parameters: + artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false + stages: - stage: PVR_Publish dependsOn: validate @@ -62,7 +66,13 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 52a74487fd06..7b3fdb136169 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -1,5 +1,6 @@ variables: - group: Publish-Build-Assets + - group: DotNet-DotNetCli-Storage # .NET Core 3 Dev - name: PublicDevRelease_30_Channel_Id @@ -45,3 +46,9 @@ variables: value: 3.0.0 - name: SymbolToolVersion value: 1.0.1 + + # Default locations for Installers and checksums + - name: ChecksumsBlobFeedUrl + value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json + - name: InstallersBlobFeedUrl + value: https://dotnetcli.blob.core.windows.net/dotnet/index.json diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index aba0b0fcafb8..34667b6c0943 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -1,12 +1,20 @@ parameters: - enableSourceLinkValidation: true + enableSourceLinkValidation: false enableSigningValidation: true - enableSymbolValidation: true + enableSymbolValidation: false enableNugetValidation: true + publishInstallersAndChecksums: false SDLValidationParameters: enable: false + continueOnError: false params: '' + # These parameters let the user customize the call to sdk-task.ps1 for publishing + # symbols & general artifacts as well as for signing validation + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + signingValidationAdditionalParameters: '' + # Which stages should finish execution before post-build stages start dependsOn: [build] @@ -53,7 +61,8 @@ stages: arguments: -task SigningValidation -restore -msbuildEngine dotnet /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' - /p:Configuration=Release + /p:Configuration=Release + ${{ parameters.signingValidationAdditionalParameters }} - ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}: - job: @@ -78,26 +87,46 @@ stages: -GHRepoName $(Build.Repository.Name) -GHCommit $(Build.SourceVersion) -SourcelinkCliVersion $(SourceLinkCLIVersion) + continueOnError: true - ${{ if eq(parameters.SDLValidationParameters.enable, 'true') }}: - template: /eng/common/templates/job/execute-sdl.yml parameters: additionalParameters: ${{ parameters.SDLValidationParameters.params }} + continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }} - template: \eng\common\templates\post-build\channels\netcore-dev-5.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-dev-release.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 }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-release.yml + parameters: + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\internal-servicing.yml + parameters: + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 9c12b1b4fdba..bb5638930ab1 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -163,6 +163,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Invoke-WebRequest "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" -OutFile $installScript } @@ -282,6 +283,7 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { Create-Directory $packageDir Write-Host "Downloading $packageName $packageVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Invoke-WebRequest "https://dotnet.myget.org/F/roslyn-tools/api/v2/package/$packageName/$packageVersion/" -OutFile $packagePath Unzip $packagePath $packageDir } diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 3af9be6157f4..94a1edd7d0b6 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -208,12 +208,19 @@ function GetDotNetInstallScript { # Use curl if available, otherwise use wget if command -v curl > /dev/null; then - curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" - else - wget -q -O "$install_script" "$install_script_url" + curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || { + local exit_code=$? + Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." + ExitWithExitCode $exit_code + } + else + wget -q -O "$install_script" "$install_script_url" || { + local exit_code=$? + Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." + ExitWithExitCode $exit_code + } fi fi - # return value _GetDotNetInstallScript="$install_script" } diff --git a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs index 9ec94add87d2..ed80fa3d08de 100644 --- a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs +++ b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Analyzer.Testing; using Microsoft.AspNetCore.Testing; -using Microsoft.AspNetCore.Testing.xunit; using Microsoft.CodeAnalysis; namespace Microsoft.AspNetCore.Analyzers diff --git a/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs b/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs index 764ac23bd5be..22e3148624a9 100644 --- a/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs +++ b/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs @@ -13,7 +13,7 @@ public void Configure(IApplicationBuilder app) app.UseEndpoints(endpoints => { - endpoints.MapBlazorHub("app"); + endpoints.MapBlazorHub(); }); } diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs index fbf398888dfe..75337b2cc400 100644 --- a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs +++ b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADJwtBearerOptionsConfiguration.cs @@ -24,6 +24,11 @@ public AzureADJwtBearerOptionsConfiguration( public void Configure(string name, JwtBearerOptions options) { var azureADScheme = GetAzureADScheme(name); + if (azureADScheme is null) + { + return; + } + var azureADOptions = _azureADOptions.Get(azureADScheme); if (name != azureADOptions.JwtBearerSchemeName) { diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs index db937ca62e2f..07c0583c32b7 100644 --- a/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs +++ b/src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs @@ -268,6 +268,22 @@ public void AddAzureAD_ThrowsWhenInstanceIsNotSet() Assert.Contains(expectedMessage, exception.Failures); } + [Fact] + public void AddAzureAD_SkipsOptionsValidationForNonAzureCookies() + { + var services = new ServiceCollection(); + services.AddSingleton(new NullLoggerFactory()); + + services.AddAuthentication() + .AddAzureAD(o => { }) + .AddCookie("other"); + + var provider = services.BuildServiceProvider(); + var cookieAuthOptions = provider.GetService>(); + + Assert.NotNull(cookieAuthOptions.Get("other")); + } + [Fact] public void AddAzureADBearer_AddsAllAuthenticationHandlers() { @@ -453,5 +469,21 @@ public void AddAzureADBearer_ThrowsWhenInstanceIsNotSet() Assert.Contains(expectedMessage, exception.Failures); } + + [Fact] + public void AddAzureADBearer_SkipsOptionsValidationForNonAzureCookies() + { + var services = new ServiceCollection(); + services.AddSingleton(new NullLoggerFactory()); + + services.AddAuthentication() + .AddAzureADBearer(o => { }) + .AddJwtBearer("other", o => { }); + + var provider = services.BuildServiceProvider(); + var jwtOptions = provider.GetService>(); + + Assert.NotNull(jwtOptions.Get("other")); + } } } diff --git a/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs b/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs index 3f0c765614a5..8f6272c32639 100644 --- a/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs +++ b/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs @@ -8,6 +8,10 @@ namespace Microsoft.Extensions.Internal { + /// + /// This API supports infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class ComponentInternalUsageDiagnosticAnalyzer : DiagnosticAnalyzer { diff --git a/src/Components/Analyzers/test/AnalyzerTestBase.cs b/src/Components/Analyzers/test/AnalyzerTestBase.cs index e174b4f667da..8c1ae953762e 100644 --- a/src/Components/Analyzers/test/AnalyzerTestBase.cs +++ b/src/Components/Analyzers/test/AnalyzerTestBase.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Analyzer.Testing; using Microsoft.AspNetCore.Testing; -using Microsoft.AspNetCore.Testing.xunit; using Microsoft.CodeAnalysis; namespace Microsoft.AspNetCore.Components.Analyzers diff --git a/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs b/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs index a2feb9c39c9a..375c6d09a6fa 100644 --- a/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs +++ b/src/Components/Blazor/Blazor/ref/Microsoft.AspNetCore.Blazor.netstandard2.0.cs @@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Blazor.Rendering public static partial class WebAssemblyEventDispatcher { [Microsoft.JSInterop.JSInvokableAttribute("DispatchEvent")] - public static System.Threading.Tasks.Task DispatchEvent(Microsoft.AspNetCore.Components.Web.WebEventDescriptor eventDescriptor, string eventArgsJson) { throw null; } + public static System.Threading.Tasks.Task DispatchEvent(Microsoft.AspNetCore.Components.RenderTree.WebEventDescriptor eventDescriptor, string eventArgsJson) { throw null; } } } namespace Microsoft.AspNetCore.Components.Builder diff --git a/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs b/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs index b68aa3c36ef8..25f1c16838eb 100644 --- a/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs +++ b/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs @@ -38,7 +38,6 @@ public Task StartAsync(CancellationToken cancellationToken = default) // this happens in the browser it will be a direct call from Mono. We effectively needs to set the // JSRuntime in the 'root' execution context which implies that we want to do as part of a direct // call from Program.Main, and before any 'awaits'. - JSRuntime.SetCurrentJSRuntime(_runtime); SetBrowserHttpMessageHandlerAsDefault(); return StartAsyncAwaited(); diff --git a/src/Components/Blazor/Blazor/src/Microsoft.AspNetCore.Blazor.csproj b/src/Components/Blazor/Blazor/src/Microsoft.AspNetCore.Blazor.csproj index aa489c210fd1..0673c85b2d23 100644 --- a/src/Components/Blazor/Blazor/src/Microsoft.AspNetCore.Blazor.csproj +++ b/src/Components/Blazor/Blazor/src/Microsoft.AspNetCore.Blazor.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -13,9 +13,11 @@ - - - + + + + + diff --git a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyEventDispatcher.cs b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyEventDispatcher.cs index d46500bae7e0..77aa59cbc15f 100644 --- a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyEventDispatcher.cs +++ b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyEventDispatcher.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Web; using Microsoft.JSInterop; diff --git a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs index 596463709002..8651e14930c8 100644 --- a/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs +++ b/src/Components/Blazor/Blazor/src/Rendering/WebAssemblyRenderer.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Blazor.Services; using Microsoft.AspNetCore.Components; -using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Blazor.Rendering diff --git a/src/Components/Blazor/Blazor/src/Services/WebAssemblyJSRuntime.cs b/src/Components/Blazor/Blazor/src/Services/WebAssemblyJSRuntime.cs index 80ab06c39d14..c5404c256f05 100644 --- a/src/Components/Blazor/Blazor/src/Services/WebAssemblyJSRuntime.cs +++ b/src/Components/Blazor/Blazor/src/Services/WebAssemblyJSRuntime.cs @@ -1,12 +1,34 @@ // 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 Microsoft.AspNetCore.Components; using Mono.WebAssembly.Interop; namespace Microsoft.AspNetCore.Blazor.Services { - internal static class WebAssemblyJSRuntime + internal sealed class WebAssemblyJSRuntime : MonoWebAssemblyJSRuntime { - public static readonly MonoWebAssemblyJSRuntime Instance = new MonoWebAssemblyJSRuntime(); + private static readonly WebAssemblyJSRuntime _instance = new WebAssemblyJSRuntime(); + private static bool _initialized; + + public WebAssemblyJSRuntime() + { + JsonSerializerOptions.Converters.Add(new ElementReferenceJsonConverter()); + } + + public static WebAssemblyJSRuntime Instance + { + get + { + if (!_initialized) + { + // This is executing in MonoWASM. Consequently we do not to have concern ourselves with thread safety. + _initialized = true; + Initialize(_instance); + } + + return _instance; + } + } } } diff --git a/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs b/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs index bc63a4b0df0c..1fafb9e81dbd 100644 --- a/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs @@ -271,6 +271,7 @@ public void Render_BuiltIn_BindToInputWithoutType_WritesAttributes() { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public int ParentValue { get; set; } = 42; @@ -292,6 +293,7 @@ public void Render_BuiltIn_BindToInputText_WithFormat_WritesAttributes() { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1); @@ -314,6 +316,7 @@ public void Render_BuiltIn_BindToInputText_WithFormatFromProperty_WritesAttribut { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1); @@ -338,6 +341,7 @@ public void Render_BuiltIn_BindToInputText_WritesAttributes() { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public int ParentValue { get; set; } = 42; @@ -360,6 +364,7 @@ public void Render_BuiltIn_BindToInputCheckbox_WritesAttributes() { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public bool Enabled { get; set; } diff --git a/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs b/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs index 6513224c057d..d15cf4f58499 100644 --- a/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Test.Helpers; +using Microsoft.AspNetCore.Components.Web; using Xunit; using Xunit.Abstractions; @@ -202,23 +203,25 @@ public void Render_ChildComponent_WithEventHandler(string expression) AdditionalSyntaxTrees.Add(Parse(@" using System; using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; namespace Test { public class MyComponent : ComponentBase { [Parameter] - public Action OnClick { get; set; } + public Action OnClick { get; set; } } } ")); var component = CompileToComponent($@" +@using Microsoft.AspNetCore.Components.Web @code {{ private int counter; - private void Increment(UIMouseEventArgs e) {{ + private void Increment(MouseEventArgs e) {{ counter++; }} }}"); @@ -235,7 +238,7 @@ private void Increment(UIMouseEventArgs e) {{ AssertFrame.Attribute(frame, "OnClick", 1); // The handler will have been assigned to a lambda - var handler = Assert.IsType>(frame.AttributeValue); + var handler = Assert.IsType>(frame.AttributeValue); Assert.Equal("Test.TestComponent", handler.Target.GetType().FullName); }); } @@ -445,11 +448,12 @@ public void Regression_784() // Act var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web

@code { public string ParentBgColor { get; set; } = ""#FFFFFF""; - public void OnComponentHover(UIMouseEventArgs e) + public void OnComponentHover(MouseEventArgs e) { } } diff --git a/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs b/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs index 990ec1db1886..3f380cbc7966 100644 --- a/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Test.Helpers; +using Microsoft.AspNetCore.Components.Web; using Xunit; using Xunit.Abstractions; @@ -308,11 +309,12 @@ public void SupportsUsingStatements() public async Task SupportsTwoWayBindingForTextboxes() { // Arrange/Act - var component = CompileToComponent( - @" - @code { - public string MyValue { get; set; } = ""Initial value""; - }"); + var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web + +@code { + public string MyValue { get; set; } = ""Initial value""; +}"); var myValueProperty = component.GetType().GetProperty("MyValue"); var renderer = new TestRenderer(); @@ -343,11 +345,12 @@ public async Task SupportsTwoWayBindingForTextboxes() public async Task SupportsTwoWayBindingForTextareas() { // Arrange/Act - var component = CompileToComponent( - @" - @code { - public string MyValue { get; set; } = ""Initial value""; - }"); + var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web + +@code { + public string MyValue { get; set; } = ""Initial value""; +}"); var myValueProperty = component.GetType().GetProperty("MyValue"); var renderer = new TestRenderer(); @@ -378,11 +381,12 @@ public async Task SupportsTwoWayBindingForTextareas() public async Task SupportsTwoWayBindingForDateValues() { // Arrange/Act - var component = CompileToComponent( - @" - @code { - public DateTime MyDate { get; set; } = new DateTime(2018, 3, 4, 1, 2, 3); - }"); + var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web + +@code { + public DateTime MyDate { get; set; } = new DateTime(2018, 3, 4, 1, 2, 3); +}"); var myDateProperty = component.GetType().GetProperty("MyDate"); var renderer = new TestRenderer(); @@ -416,11 +420,12 @@ public async Task SupportsTwoWayBindingForDateValuesWithFormatString() { // Arrange/Act var testDateFormat = "ddd yyyy-MM-dd"; - var component = CompileToComponent( - $@" - @code {{ - public DateTime MyDate {{ get; set; }} = new DateTime(2018, 3, 4); - }}"); + var component = CompileToComponent($@" +@using Microsoft.AspNetCore.Components.Web + +@code {{ + public DateTime MyDate {{ get; set; }} = new DateTime(2018, 3, 4); +}}"); var myDateProperty = component.GetType().GetProperty("MyDate"); var renderer = new TestRenderer(); @@ -467,6 +472,7 @@ public void SupportsEventHandlerWithLambda() { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web