diff --git a/.vscode/settings.json b/.vscode/settings.json index 89a3c7cca0..3a67def99f 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 5006951f11..f5b217f365 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 e47402faf8..fa5e1d21d6 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 9bdbb3ec7b..d1d79ea73f 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -8,11 +8,11 @@ + + + - - - - + diff --git a/eng/Signing.props b/eng/Signing.props index 0dc432069d..829cd569e9 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 46285b1448..cdfb67026c 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 69bf0109bb..3ed95a1555 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 c3b3b87f7b..a6cffe7296 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 21aabd0940..bb01d5f38b 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 8854d979f3..46d175fdfd 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 abdd0bc05a..242429bca6 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 2a08d5246e..41416862d9 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 05e5f09891..e5826b5323 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 937e4544a1..268986246e 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 068bfcbb3b..550b3ebf18 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 93a0bd8328..89854d3c1c 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 e7659b98c8..0000000000 --- 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 9eaa25b3b5..0000000000 --- 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 41e01ae6e6..bbfdacca13 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 d5ec51b150..096ac321d1 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 aab7589f2c..fa239484f2 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 26e01c0673..c737eb0e71 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 3f97ac2f16..256ffbfb93 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 d7b8564458..9bc25314ae 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 91621cf88f..a7f9964195 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 dc065ab308..4ca36358d9 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: - 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 +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 f2b0cfb269..812def3154 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 fd6c09b227..c2d2076730 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 771dcf4ef8..afa9542148 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: - 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 @@ -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 00108bd3f8..7ec1f89c08 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: - 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 +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 f64184da9f..12124d6215 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 52a74487fd..7b3fdb1361 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 aba0b0fcaf..34667b6c09 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 9c12b1b4fd..bb5638930a 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 3af9be6157..94a1edd7d0 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 9ec94add87..ed80fa3d08 100644 --- a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs +++ b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs @@ -6,7 +6,6 @@ using System.IO; 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 764ac23bd5..22e3148624 100644 --- a/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs +++ b/src/Analyzers/Analyzers/test/TestFiles/CompilationFeatureDetectorTest/StartupWithMapBlazorHub.cs @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Analyzers.TestFiles.CompilationFeatureDetectorTes 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 fbf398888d..75337b2cc4 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 @@ namespace Microsoft.AspNetCore.Authentication 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 db937ca62e..07c0583c32 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 @@ namespace Microsoft.AspNetCore.Authentication 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 @@ namespace Microsoft.AspNetCore.Authentication 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 3f0c765614..8f6272c326 100644 --- a/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs +++ b/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs @@ -8,6 +8,10 @@ using Microsoft.CodeAnalysis.Diagnostics; 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 e174b4f667..8c1ae95376 100644 --- a/src/Components/Analyzers/test/AnalyzerTestBase.cs +++ b/src/Components/Analyzers/test/AnalyzerTestBase.cs @@ -6,7 +6,6 @@ using System.IO; 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 a2feb9c39c..375c6d09a6 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 b68aa3c36e..25f1c16838 100644 --- a/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs +++ b/src/Components/Blazor/Blazor/src/Hosting/WebAssemblyHost.cs @@ -38,7 +38,6 @@ namespace Microsoft.AspNetCore.Blazor.Hosting // 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 aa489c210f..0673c85b2d 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 d46500bae7..77aa59cbc1 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 5964637090..8651e14930 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.Collections.Generic; 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 80ab06c39d..c5404c256f 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 bc63a4b0df..1fafb9e81d 100644 --- a/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/BindRazorIntegrationTest.cs @@ -271,6 +271,7 @@ namespace Test { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public int ParentValue { get; set; } = 42; @@ -292,6 +293,7 @@ namespace Test { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1); @@ -314,6 +316,7 @@ namespace Test { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1); @@ -338,6 +341,7 @@ namespace Test { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web @code { public int ParentValue { get; set; } = 42; @@ -360,6 +364,7 @@ namespace Test { // 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 6513224c05..d15cf4f584 100644 --- a/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/ComponentRenderingRazorIntegrationTest.cs @@ -6,6 +6,7 @@ using System.Linq; 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 @@ namespace Test 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 @@ namespace Test 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 @@ namespace Test // 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 990ec1db18..3f380cbc79 100644 --- a/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs +++ b/src/Components/Blazor/Build/test/RenderingRazorIntegrationTest.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; 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 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test 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 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test 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 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test 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 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test { // 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 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test { // Arrange var component = CompileToComponent(@" +@using Microsoft.AspNetCore.Components.Web