diff --git a/NuGet.config b/NuGet.config index acac334dd576..af2f31984320 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,21 +24,26 @@ + - + + + - + + - + + @@ -62,15 +67,18 @@ + + - - + + + diff --git a/THIRD-PARTY-NOTICES.TXT b/THIRD-PARTY-NOTICES.TXT index 859bd1a6d9cd..97426f91879b 100644 --- a/THIRD-PARTY-NOTICES.TXT +++ b/THIRD-PARTY-NOTICES.TXT @@ -8,4 +8,4 @@ bring it to our attention. Post an issue or email us: The attached notices are provided for information only. -No notices are provided at this time. \ No newline at end of file +No notices are provided at this time. diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2c379ec4f3be..5b6c49c16515 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,56 +1,56 @@ - + https://github.com/dotnet/templating - f5f6eb5420398b365107b9be9e5cb6290626e39f + 2bd479cb5468578fff053d61c5e2a874c8ba6a0a - + https://github.com/dotnet/templating - f5f6eb5420398b365107b9be9e5cb6290626e39f + 2bd479cb5468578fff053d61c5e2a874c8ba6a0a - + https://github.com/dotnet/templating - f5f6eb5420398b365107b9be9e5cb6290626e39f + b73682307aa0128c5edbec94c2e6a070d13ae6bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 @@ -59,344 +59,310 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://github.com/dotnet/emsdk - b634e009d59f72e9254f984a6b89e685955e0eb8 - - - https://github.com/dotnet/emsdk - b634e009d59f72e9254f984a6b89e685955e0eb8 + 8e475db5d45016c77714cce29077ae8c66d12d53 - + https://github.com/dotnet/emsdk - b634e009d59f72e9254f984a6b89e685955e0eb8 + 8e475db5d45016c77714cce29077ae8c66d12d53 - + https://github.com/dotnet/msbuild - 07da1b9a89da6d00c5a5a6a385cdcebfdfed7110 + 25f168cee22fc5419a38fc8d2ffb6a8c0381b7a0 - + https://github.com/dotnet/msbuild - 07da1b9a89da6d00c5a5a6a385cdcebfdfed7110 + 25f168cee22fc5419a38fc8d2ffb6a8c0381b7a0 - + https://github.com/dotnet/msbuild - 07da1b9a89da6d00c5a5a6a385cdcebfdfed7110 + 25f168cee22fc5419a38fc8d2ffb6a8c0381b7a0 - + https://github.com/dotnet/fsharp - 47d4e3f91e4e5414b6dafbf14288b9c5a798ef99 + 14987c804f33917bf15f4c25e0cd16ecd01807f4 - + https://github.com/dotnet/fsharp - 47d4e3f91e4e5414b6dafbf14288b9c5a798ef99 + 14987c804f33917bf15f4c25e0cd16ecd01807f4 - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn - fc52718eccdb37693a40a518b1178b1e23114e68 + 450493a9b4ec6337bced0120e97cb76f4ed783db - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - c92125011405028c945371a89e1a1eb0e735456d + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - + https://github.com/microsoft/vstest - bc9161306b23641b0364b8f93d546da4d48da1eb + 51441adcd6c424ae7315d66ce7e96baf34d70369 - + https://github.com/microsoft/vstest - bc9161306b23641b0364b8f93d546da4d48da1eb + 51441adcd6c424ae7315d66ce7e96baf34d70369 - + https://github.com/microsoft/vstest - bc9161306b23641b0364b8f93d546da4d48da1eb + 51441adcd6c424ae7315d66ce7e96baf34d70369 - + https://github.com/microsoft/vstest - bc9161306b23641b0364b8f93d546da4d48da1eb + 51441adcd6c424ae7315d66ce7e96baf34d70369 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9c74c8784a90d64bcc5c5c552d5420eafb60fa4f + 889bd3cf7e1c61b6bdee233190da4931118b6e6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9c74c8784a90d64bcc5c5c552d5420eafb60fa4f + 889bd3cf7e1c61b6bdee233190da4931118b6e6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9c74c8784a90d64bcc5c5c552d5420eafb60fa4f + 889bd3cf7e1c61b6bdee233190da4931118b6e6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9c74c8784a90d64bcc5c5c552d5420eafb60fa4f + 889bd3cf7e1c61b6bdee233190da4931118b6e6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - a865df6e83bf8b34bbd6802fdcf25c5cdfb05191 + 15c7bd7f92ae827be47bfb0ca16660f8cd376189 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - + https://github.com/dotnet/razor - cff92f3cc3f19a607ddbb7a0cddfbccf87a1c061 + 41f3afd466695ac2460260431537fe4d779ff446 - + https://github.com/dotnet/razor - cff92f3cc3f19a607ddbb7a0cddfbccf87a1c061 + 41f3afd466695ac2460260431537fe4d779ff446 - + https://github.com/dotnet/razor - cff92f3cc3f19a607ddbb7a0cddfbccf87a1c061 + 41f3afd466695ac2460260431537fe4d779ff446 - + https://github.com/dotnet/razor - cff92f3cc3f19a607ddbb7a0cddfbccf87a1c061 + 41f3afd466695ac2460260431537fe4d779ff446 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b - - - https://github.com/dotnet/test-templates - 0385265f4d0b6413d64aea0223172366a9b9858c - - - https://github.com/dotnet/test-templates - 307b8f538d83a955d8f6dd909eee41a5555f2f4d - - - https://github.com/dotnet/test-templates - becc4bd157cd6608b51a5ffe414a5d2de6330272 - - - https://github.com/dotnet/test-templates - becc4bd157cd6608b51a5ffe414a5d2de6330272 - - - https://github.com/dotnet/test-templates - 49c9ad01f057b3c6352bbec12b117acc2224493c - - - https://github.com/dotnet/test-templates - 47c90e140b027225b799ca8413af10ee3d5f1126 - - - - https://github.com/dotnet/test-templates - 47c90e140b027225b799ca8413af10ee3d5f1126 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - + https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 4569ad0b3bd84191660c74228ad6d18d29fbc1cb + fa8da0fffee2a42efa08aac643276cd0c482c49c - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - a865df6e83bf8b34bbd6802fdcf25c5cdfb05191 + 15c7bd7f92ae827be47bfb0ca16660f8cd376189 https://github.com/dotnet/xdt @@ -408,18 +374,18 @@ 63ae81154c50a1cf9287cc47d8351d55b4289e6d - + https://github.com/dotnet/roslyn-analyzers - b9b54526b7908ea519b503196100a34dd2e52374 + 94e92044351f9eb9e75b22f6000647393e36f5b9 - - https://github.com/dotnet/roslyn-analyzers - b9b54526b7908ea519b503196100a34dd2e52374 + + https://github.com/dotnet/roslyn + 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn-analyzers - b9b54526b7908ea519b503196100a34dd2e52374 + 94e92044351f9eb9e75b22f6000647393e36f5b9 @@ -445,16 +411,16 @@ - - https://github.com/dotnet/source-build-externals - 16c380d1ce5fa0b24e232251c31cb013bbf3365f + + https://dev.azure.com/dnceng/internal/_git/dotnet-source-build-externals + 9c6c10cce644179b2f41cbb8064f07efee903c55 - - https://github.com/dotnet/source-build-assets - 8af4d7484999046095bf7670641b25f2dbb158f0 - + + https://github.com/dotnet/source-build-reference-packages + 6092b62b7f35fddbd6bf31e19b2ab64bbe2443ae + https://github.com/dotnet/deployment-tools @@ -503,125 +469,125 @@ - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - https://github.com/dotnet/aspnetcore - 3c5c32a79a7269c8ee7649d0ea1630f115d8400b + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore + a95d6599f37762ec8394ba9ca01e8263b2e36a26 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://github.com/dotnet/arcade - f843e65cdfc9e9af05d987f2f7f2e6f6a6106eb5 + efce34e9f9f25af27e2b471fbbf8c21f1ac2e318 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - f2c8152eed158e72950025393fde498c90a57a6b + d839c41c85988aadc213e8e42269ecd7883a1790 https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index 4389ac8b22f1..37007df8405e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -5,8 +5,8 @@ 9 0 - 1 - 20 + 3 + 17 @@ -18,15 +18,15 @@ true release - rtm + preview rtm servicing - - + 0 true + true 6.0.1 @@ -35,7 +35,7 @@ 17 36 20 - $([MSBuild]::Add($(VersionFeature), 10)) + $([MSBuild]::Add($(VersionFeature), 13)) <_NET70ILLinkPackVersion>7.0.100-1.23211.1 @@ -76,90 +76,92 @@ 1.1.0-beta.25317.4 - - 9.0.17-servicing.26265.1 + + 9.1.0-preview.1.24555.3 - - - 1.1.0-rtm.25262.1 + + 9.0.18-servicing.26316.2 - 9.0.17 - 9.0.17-servicing.26264.16 - 9.0.17 - 9.0.17 - 9.0.17-servicing.26264.16 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 + 9.0.18 + 9.0.18-servicing.26315.22 + 9.0.18 + 9.0.18 + 9.0.18-servicing.26315.22 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 8.0.0-rc.1.23414.4 - 9.0.17-servicing.26264.16 - 9.0.17-servicing.26264.16 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 + 9.0.18-servicing.26315.22 + 9.0.18-servicing.26315.22 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 2.1.0 - 9.0.17 + 9.0.18 8.0.0 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 8.0.0 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 - 9.0.17 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 9.0.18 + 4.5.1 + 4.5.5 8.0.5 - 9.0.17 - 9.0.17 + 4.5.4 + 9.0.18 + 9.0.18 - 9.0.17-servicing.26268.1 - 9.0.17-servicing.26268.1 - 9.0.17 - 9.0.17 + 9.0.18-servicing.26317.1 + 9.0.18-servicing.26317.1 + 9.0.18 + 9.0.18 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 - 6.12.5-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 - 17.12.0-release-24508-01 - 17.12.0-release-24508-01 - 17.12.0-release-24508-01 + 17.14.1-release-25428-01 + 17.14.1-release-25428-01 + 17.14.1-release-25428-01 - 9.0.0-preview.26226.5 - 3.11.0-beta1.26226.5 + 9.0.0-preview.26255.2 + 3.12.0-beta1.26064.1 @@ -170,8 +172,8 @@ Some .NET Framework tasks and the resolver will need to run in a VS/MSBuild that is older than the very latest, based on what we want the SDK to support. So use a version that matches the version - in minimumMSBuildVersion. Note that MSBuild has started versioning before release so the version we use as the Minimum should be .0 - to ensure we load in VS but the version we build against should be the version of MSBuild that ships in the .0 VS release. + in minimumMSBuildVersion. Note that MSBuild has started versioning before release so the version we use as the Minimum should be .0 + to ensure we load in VS but the version we build against should be the version of MSBuild that ships in the .0 VS release. In these cases, we don't want to use MicrosoftBuildVersion and other associated properties that are updated by the VMR infrastructure. So, we read this version from the 'minimumMSBuildVersion' file in non-source-only cases into MicrosoftBuildMinimumVersion, @@ -180,65 +182,65 @@ At usage sites, either we use MicrosoftBuildMinimumVersion, or MicrosoftBuildVersion in source-only modes. Additionally, set the MinimumVSVersion for the installer UI that's required for targeting NetCurrent --> - 17.12.57 - 17.12.57-preview-26069-01 + 17.14.51 + 17.14.51-servicing-26324-02 17.11.48 17.12 - 9.0.119 + 9.0.317 $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) - 9.0.119-servicing.26302.8 + 9.0.317-servicing.26358.3 $(MicrosoftTemplateEngineMocksPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineMocksPackageVersion) - 12.9.101-beta.25070.7 + 13.9.303-beta.25361.1 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 - 4.12.0-3.25609.5 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 + 4.14.0-3.26064.1 9.0.18 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 9.0.18 9.0.18 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 - 9.0.18-servicing.26310.12 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 + 9.0.18-servicing.26323.11 - 9.0.0-preview.26069.1 - 9.0.0-preview.26069.1 - 9.0.0-preview.26069.1 + 9.0.0-preview.26064.2 + 9.0.0-preview.26064.2 + 9.0.0-preview.26064.2 - 9.0.17-rtm.26267.1 - 9.0.17-rtm.26267.1 + 9.0.18-rtm.26316.5 + 9.0.18-rtm.26316.5 @@ -270,10 +272,10 @@ - 9.0.0-beta.26220.3 - 9.0.0-beta.26220.3 - 9.0.0-beta.26220.3 - 9.0.0-beta.26220.3 + 9.0.0-beta.26301.4 + 9.0.0-beta.26301.4 + 9.0.0-beta.26301.4 + 9.0.0-beta.26301.4 @@ -317,8 +319,7 @@ 15.0.9617 18.0.9617 - 9.0.17-servicing.26258.3 - 9.0.17 + 9.0.18 $(MicrosoftNETWorkloadEmscriptenCurrentManifest90100PackageVersion) 9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-(?!rtm)[A-z]*[\.]*\d*`)) diff --git a/eng/pipelines/templates/jobs/vmr-build.yml b/eng/pipelines/templates/jobs/vmr-build.yml index 9aeeae442145..95ba36e8a9b6 100644 --- a/eng/pipelines/templates/jobs/vmr-build.yml +++ b/eng/pipelines/templates/jobs/vmr-build.yml @@ -180,6 +180,26 @@ jobs: # Synchronize new content in the VMR during PRs (we expect this to come - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - task: AzureCLI@2 + displayName: 'Mint AzDO token for VMR push' + inputs: + azureSubscription: 'dnceng-build-rw-code-rw-wif' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $token = az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to acquire Azure DevOps access token via 'az account get-access-token'. Exit code: $LASTEXITCODE" + exit 1 + } + $token = $token.Trim() + if ([string]::IsNullOrWhiteSpace($token)) { + Write-Error "Received an empty or whitespace Azure DevOps access token from 'az account get-access-token'." + exit 1 + } + Write-Host "##vso[task.setvariable variable=AzdoToken;issecret=true]$token" + - template: ../steps/vmr-pull-updates.yml@self parameters: vmrPath: $(vmrPath) @@ -397,23 +417,6 @@ jobs: - script: cp "$(sourcesPath)/src/sdk/NuGet.config" "$(sourcesPath)/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/online.NuGet.Config" displayName: Copy Test NuGet Config for Smoke Tests - - ${{ else }}: - - task: Bash@3 - displayName: Add aspnetcore public feed for smoke tests - inputs: - targetType: inline - script: | - set -euo pipefail - - ONLINE_CONFIG="$(sourcesPath)/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/online.NuGet.Config" - FEED_KEY="darc-pub-dotnet-aspnetcore-3c5c32a7" - FEED_URL="https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-aspnetcore-3c5c32a7/nuget/v3/index.json" - - # Add only if missing. Do not touch disabledPackageSources. - if ! grep -qi "| \n |" "$ONLINE_CONFIG" - fi - - script: | set -ex diff --git a/eng/pipelines/templates/jobs/vmr-synchronization.yml b/eng/pipelines/templates/jobs/vmr-synchronization.yml index 94d3331e2f62..db05c8491f9c 100644 --- a/eng/pipelines/templates/jobs/vmr-synchronization.yml +++ b/eng/pipelines/templates/jobs/vmr-synchronization.yml @@ -1,93 +1,111 @@ -### This job synchronizes code from product repositories into the VMR (https://github.com/dotnet/dotnet) -### It synchronizes the content of the VMR to this new commit and pushes the changes - -parameters: -- name: targetRef - displayName: Target revision of dotnet/sdk to synchronize - type: string - default: $(Build.SourceVersion) - -- name: vmrBranch - displayName: dotnet/dotnet branch to use - type: string - default: $(Build.SourceBranch) - -- name: noPush - displayName: Don't push changes to dotnet/dotnet - type: boolean - default: false - -jobs: -- job: Synchronize_VMR - displayName: Synchronize VMR's ${{ parameters.vmrBranch }} - timeoutInMinutes: 120 - variables: - - ${{ if eq(variables['System.TeamProject'], 'public') }}: - - template: /eng/common/templates/variables/pool-providers.yml - - ${{ else }}: - - template: /eng/common/templates-official/variables/pool-providers.yml - - name: vmrPath - value: $(Agent.BuildDirectory)/vmr - - ${{ if not(parameters.noPush) }}: - - ${{ if and( eq(variables['System.TeamProject'], 'internal'), or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: - - group: DotNetBot-GitHub - - group: DotNetBot-GitHub-No-Scopes - - name: vmrPublicUrl - value: https://github.com/dotnet/dotnet - - ${{ if and( eq(variables['System.TeamProject'], 'internal'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/')) }}: - - name: vmrInternalUrl - value: https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-dotnet - - pool: - ${{ if eq(variables['System.TeamProject'], 'public') }}: - name: $(DncEngPublicBuildPool) - image: build.azurelinux.3.amd64.open - os: linux - ${{ else }}: - name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals build.azurelinux.3.amd64 - os: linux - - steps: - - template: ../steps/vmr-prepare.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - - - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - - template: /eng/common/templates-official/steps/get-federated-access-token.yml - parameters: - federatedServiceConnection: VmrSyncPipeline - outputVariableName: AzdoToken - - - template: ../steps/vmr-pull-updates.yml - parameters: - vmrPath: $(vmrPath) - vmrBranch: ${{ parameters.vmrBranch }} - targetRef: ${{ parameters.targetRef }} - - - ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}: - # Push main and release branches to the public VMR - - ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}: - - script: > - ./.dotnet/dotnet darc vmr push - --vmr '$(vmrPath)' - --commit-verification-pat '$(BotAccount-dotnet-maestro-bot-no-scopes-PAT)' - --branch '${{ parameters.vmrBranch }}' - --remote-url '$(vmrPublicUrl)' - --github-pat '$(BotAccount-dotnet-bot-repo-PAT)' - --verbose - displayName: Push changes to dotnet/dotnet (public) - workingDirectory: $(Agent.BuildDirectory)/sdk - - # Push internal/release branches to the internal VMR - - ${{ if startsWith(parameters.vmrBranch, 'internal/release/') }}: - - script: > - ./.dotnet/dotnet darc vmr push - --vmr '$(vmrPath)' - --skip-commit-verification - --branch '${{ parameters.vmrBranch }}' - --remote-url '$(vmrInternalUrl)' - --azdev-pat '$(AzdoToken)' - --verbose - displayName: Push changes to dotnet-dotnet (internal) - workingDirectory: $(Agent.BuildDirectory)/sdk +### This job synchronizes code from product repositories into the VMR (https://github.com/dotnet/dotnet) +### It synchronizes the content of the VMR to this new commit and pushes the changes + +parameters: +- name: targetRef + displayName: Target revision of dotnet/sdk to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrBranch + displayName: dotnet/dotnet branch to use + type: string + default: $(Build.SourceBranch) + +- name: noPush + displayName: Don't push changes to dotnet/dotnet + type: boolean + default: false + +jobs: +- job: Synchronize_VMR + displayName: Synchronize VMR's ${{ parameters.vmrBranch }} + timeoutInMinutes: 120 + variables: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/variables/pool-providers.yml + - ${{ else }}: + - template: /eng/common/templates-official/variables/pool-providers.yml + - name: vmrPath + value: $(Agent.BuildDirectory)/vmr + - ${{ if not(parameters.noPush) }}: + - ${{ if and( eq(variables['System.TeamProject'], 'internal'), or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: + - group: DotNetBot-GitHub + - group: DotNetBot-GitHub-No-Scopes + - name: vmrPublicUrl + value: https://github.com/dotnet/dotnet + - ${{ if and( eq(variables['System.TeamProject'], 'internal'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/')) }}: + - name: vmrInternalUrl + value: https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-dotnet + + pool: + ${{ if eq(variables['System.TeamProject'], 'public') }}: + name: $(DncEngPublicBuildPool) + image: build.azurelinux.3.amd64.open + os: linux + ${{ else }}: + name: $(DncEngInternalBuildPool) + demands: ImageOverride -equals build.azurelinux.3.amd64 + os: linux + + steps: + - template: ../steps/vmr-prepare.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} + + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - template: /eng/common/templates-official/steps/get-federated-access-token.yml + parameters: + federatedServiceConnection: VmrSyncPipeline + outputVariableName: AzdoToken + + - template: ../steps/vmr-pull-updates.yml + parameters: + vmrPath: $(vmrPath) + vmrBranch: ${{ parameters.vmrBranch }} + targetRef: ${{ parameters.targetRef }} + + - ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}: + # Push main and release branches to the public VMR + - ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}: + - script: > + ./.dotnet/dotnet darc vmr push + --vmr '$(vmrPath)' + --commit-verification-pat '$(BotAccount-dotnet-maestro-bot-no-scopes-PAT)' + --branch '${{ parameters.vmrBranch }}' + --remote-url '$(vmrPublicUrl)' + --github-pat '$(BotAccount-dotnet-bot-repo-PAT)' + --verbose + displayName: Push changes to dotnet/dotnet (public) + workingDirectory: $(Agent.BuildDirectory)/sdk + + # Push internal/release branches to the internal VMR + - ${{ if startsWith(parameters.vmrBranch, 'internal/release/') }}: + - task: AzureCLI@2 + displayName: Mint AzDO token via WIF + inputs: + azureSubscription: 'dnceng-build-rw-code-rw-wif' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $token = az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to acquire Azure DevOps access token via 'az account get-access-token'. Exit code: $LASTEXITCODE" + exit 1 + } + $token = $token.Trim() + if ([string]::IsNullOrWhiteSpace($token)) { + Write-Error "Received an empty or whitespace Azure DevOps access token from 'az account get-access-token'." + exit 1 + } + Write-Host "##vso[task.setvariable variable=WifAzdoToken;issecret=true]$token" + - script: > + ./.dotnet/dotnet darc vmr push + --vmr '$(vmrPath)' + --skip-commit-verification + --branch '${{ parameters.vmrBranch }}' + --remote-url '$(vmrInternalUrl)' + --azdev-pat '$(WifAzdoToken)' + --verbose + displayName: Push changes to dotnet-dotnet (internal) + workingDirectory: $(Agent.BuildDirectory)/sdk diff --git a/eng/pipelines/templates/steps/vmr-prepare.yml b/eng/pipelines/templates/steps/vmr-prepare.yml index 8cb5bae7815c..155ccda03d5c 100644 --- a/eng/pipelines/templates/steps/vmr-prepare.yml +++ b/eng/pipelines/templates/steps/vmr-prepare.yml @@ -1,4 +1,4 @@ -### These steps clone the VMR (https://github.com/dotnet/dotnet) into $(Agent.BuildDirectory)/vmr for installer +### These steps clone the VMR (https://github.com/dotnet/dotnet) into $(Agent.BuildDirectory)/vmr for sdk parameters: - name: vmrBranch diff --git a/global.json b/global.json index 50548f9d41c0..1825b53e035e 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "9.0.115", + "dotnet": "9.0.116", "runtimes": { "dotnet": [ "$(VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion)" @@ -17,8 +17,8 @@ "cmake": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26220.3", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26220.3", + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26301.4", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26301.4", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24217.1" } diff --git a/src/Containers/Microsoft.NET.Build.Containers/ContentStore.cs b/src/Containers/Microsoft.NET.Build.Containers/ContentStore.cs index 2fb16be3ec5d..488764482f27 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/ContentStore.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/ContentStore.cs @@ -8,30 +8,18 @@ namespace Microsoft.NET.Build.Containers; internal static class ContentStore { - public static string ArtifactRoot { get; set; } = Path.Combine(Path.GetTempPath(), "Containers"); + public static string ArtifactRoot { get; set; } = EnsureCacheDirectory(); public static string ContentRoot { get { string contentPath = Path.Join(ArtifactRoot, "Content"); - - Directory.CreateDirectory(contentPath); - + CreateCacheDirectory(contentPath); return contentPath; } } - public static string TempPath - { - get - { - string tempPath = Path.Join(ArtifactRoot, "Temp"); - - Directory.CreateDirectory(tempPath); - - return tempPath; - } - } + public static string TempPath { get; } = Directory.CreateTempSubdirectory().FullName; public static string PathForDescriptor(Descriptor descriptor) { @@ -62,8 +50,81 @@ public static string GetPathForHash(string contentHash) return Path.Combine(ContentRoot, contentHash); } - public static string GetTempFile() + public static string GetTempFile() => Path.Join(TempPath, Path.GetRandomFileName()); + + /// + /// Gets the path to the user cache directory for SDK container builds, creating it if it does + /// not already exist. + /// + private static string EnsureCacheDirectory() + { + string userCacheDir = GetUserCacheDirectoryPath(); + CreateCacheDirectory(userCacheDir); + + string dotnetCacheDir = Path.Join(userCacheDir, "dotnet"); + CreateCacheDirectory(dotnetCacheDir); + + string containersCacheDir = Path.Join(dotnetCacheDir, "Containers"); + CreateCacheDirectory(containersCacheDir); + + return containersCacheDir; + } + + /// + /// Creates a cache directory with user-scoped permissions based on the OS. + /// + /// + /// Permissions are only set for the leaf directory. The caller is expected to handle + /// permissions for intermediate directories. + /// + private static void CreateCacheDirectory(string path) + { + if (OperatingSystem.IsWindows()) + { + Directory.CreateDirectory(path); + } + else + { + // Per XDG_CACHE_HOME spec: if the cache directory doesn't exist, try to create it with + // permissions 0700. If it already exists, don't try to change the permissions. + // See https://specifications.freedesktop.org/basedir/latest/#referencing + Directory.CreateDirectory(path, UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); + } + } + + /// + /// Gets the user-scoped cache directory, accounting for OS differences. + /// + private static string GetUserCacheDirectoryPath() { - return Path.Join(TempPath, Path.GetRandomFileName()); + if (OperatingSystem.IsLinux()) + { + // See "XDG Base Directory Specification": + // https://specifications.freedesktop.org/basedir/latest/ + string? xdgCacheHome = Environment.GetEnvironmentVariable("XDG_CACHE_HOME"); + if (!string.IsNullOrEmpty(xdgCacheHome) && Path.IsPathFullyQualified(xdgCacheHome)) + { + return xdgCacheHome; + } + + // From the spec, if XDG_CACHE_HOME is not set then fall back to ~/.cache + string userHomeDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + return Path.Join(userHomeDirectory, ".cache"); + } + + if (OperatingSystem.IsMacOS()) + { + // See "macOS Library Directory Details": + // https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html + string userHomeDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + return Path.Join(userHomeDirectory, "Library", "Caches"); + } + + // On other platforms, use the local application data folder. + string localAppData = Environment.GetFolderPath( + Environment.SpecialFolder.LocalApplicationData, + Environment.SpecialFolderOption.DoNotVerify); + + return localAppData; } } diff --git a/src/Containers/Microsoft.NET.Build.Containers/DigestUtils.cs b/src/Containers/Microsoft.NET.Build.Containers/DigestUtils.cs index c0c7e16e6793..862c01298f2d 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/DigestUtils.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/DigestUtils.cs @@ -37,4 +37,17 @@ internal static string GetSha(string str) return Convert.ToHexStringLower(hash); } + + /// + /// Returns the encoded (hash) portion of a digest string as raw bytes. + /// + /// + /// GetEncodedValue("sha256:e3b0c4...") returns the bytes for "e3b0c4...". + /// + internal static byte[] GetEncodedValue(string digest) + { + int separatorIndex = digest.IndexOf(':'); + string encoded = separatorIndex >= 0 ? digest[(separatorIndex + 1)..] : digest; + return Convert.FromHexString(encoded); + } } diff --git a/src/Containers/Microsoft.NET.Build.Containers/Exceptions/InvalidDigestException.cs b/src/Containers/Microsoft.NET.Build.Containers/Exceptions/InvalidDigestException.cs new file mode 100644 index 000000000000..071f07682a99 --- /dev/null +++ b/src/Containers/Microsoft.NET.Build.Containers/Exceptions/InvalidDigestException.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Security.Cryptography; + +namespace Microsoft.NET.Build.Containers; + +internal sealed class InvalidDigestException : Exception +{ + public InvalidDigestException(string message) + : base(message) + { + } + + public static void ThrowIfMismatched(ReadOnlySpan expected, ReadOnlySpan actual) + { + if (!CryptographicOperations.FixedTimeEquals(expected, actual)) + { + string expectedHashString = Convert.ToHexString(expected).ToLowerInvariant(); + string actualHashString = Convert.ToHexString(actual).ToLowerInvariant(); + throw new InvalidDigestException($"Expected {expectedHashString}, got {actualHashString}."); + } + } +} diff --git a/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs b/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs index 3472ba1c53b2..b1a11ffa8423 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs @@ -4,6 +4,7 @@ using NuGet.Packaging; using System.Diagnostics; using System.Net.Http.Json; +using System.Security.Cryptography; using System.Text.Json.Nodes; using Microsoft.Extensions.Logging; using Microsoft.NET.Build.Containers.Resources; @@ -90,7 +91,7 @@ internal sealed class Registry public string RegistryName { get; } internal Registry(string registryName, ILogger logger, IRegistryAPI registryAPI, RegistrySettings? settings = null, Func? retryDelayProvider = null) : - this(new Uri($"https://{registryName}"), logger, registryAPI, settings) + this(new Uri($"https://{registryName}"), logger, registryAPI, settings, retryDelayProvider) { } internal Registry(string registryName, ILogger logger, RegistryMode mode, RegistrySettings? settings = null) : @@ -99,7 +100,7 @@ internal Registry(string registryName, ILogger logger, RegistryMode mode, Regist internal Registry(Uri baseUri, ILogger logger, IRegistryAPI registryAPI, RegistrySettings? settings = null, Func? retryDelayProvider = null) : - this(baseUri, logger, new RegistryApiFactory(registryAPI), settings) + this(baseUri, logger, new RegistryApiFactory(registryAPI), settings, retryDelayProvider) { } internal Registry(Uri baseUri, ILogger logger, RegistryMode mode, RegistrySettings? settings = null) : @@ -408,15 +409,35 @@ public async Task DownloadBlobAsync(string repository, Descriptor descri { cancellationToken.ThrowIfCancellationRequested(); string localPath = ContentStore.PathForDescriptor(descriptor); - - if (File.Exists(localPath)) + + try { - // Assume file is up to date and just return it + var fileStream = File.OpenRead(localPath); + + var actualHash = SHA256.HashData(fileStream); + var expectedHash = DigestUtils.GetEncodedValue(descriptor.Digest); + InvalidDigestException.ThrowIfMismatched(expectedHash, actualHash); + return localPath; } - + catch (DirectoryNotFoundException) + { + // Cache miss + } + catch (FileNotFoundException) + { + // Cache miss + } + catch (InvalidDigestException exception) + { + // Incorrect digest + _logger.LogTrace( + "Digest validation failed for cached blob {1} ({2}), redownloading from registry.", + localPath, exception.Message); + } + string tempTarballPath = ContentStore.GetTempFile(); - + int retryCount = 0; while (retryCount < MaxDownloadRetries) { @@ -424,12 +445,14 @@ public async Task DownloadBlobAsync(string repository, Descriptor descri { // No local copy, so download one using Stream responseStream = await _registryAPI.Blob.GetStreamAsync(repository, descriptor.Digest, cancellationToken).ConfigureAwait(false); - + using (FileStream fs = File.Create(tempTarballPath)) { - await responseStream.CopyToAsync(fs, cancellationToken).ConfigureAwait(false); + await responseStream + .CopyToAndVerifyAsync(fs, descriptor.Digest, cancellationToken) + .ConfigureAwait(false); } - + // Break the loop if successful break; } @@ -440,16 +463,16 @@ public async Task DownloadBlobAsync(string repository, Descriptor descri { throw new UnableToDownloadFromRepositoryException(repository); } - + _logger.LogTrace("Download attempt {0}/{1} for repository '{2}' failed. Error: {3}", retryCount, MaxDownloadRetries, repository, ex.ToString()); - + // Wait before retrying await Task.Delay(_retryDelayProvider(), cancellationToken).ConfigureAwait(false); } } - + File.Move(tempTarballPath, localPath, overwrite: true); - + return localPath; } @@ -566,7 +589,7 @@ public async Task PushManifestListAsync( _logger.LogInformation(Strings.Registry_TagUploadStarted, tag, RegistryName); await _registryAPI.Manifest.PutAsync(destinationImageReference.Repository, tag, multiArchImage.ImageIndex, multiArchImage.ImageIndexMediaType, cancellationToken).ConfigureAwait(false); _logger.LogInformation(Strings.Registry_TagUploaded, tag, RegistryName); - } + } } public Task PushAsync(BuiltImage builtImage, SourceImageReference source, DestinationImageReference destination, CancellationToken cancellationToken) diff --git a/src/Containers/Microsoft.NET.Build.Containers/StreamExtensions.cs b/src/Containers/Microsoft.NET.Build.Containers/StreamExtensions.cs new file mode 100644 index 000000000000..f66e88080ea8 --- /dev/null +++ b/src/Containers/Microsoft.NET.Build.Containers/StreamExtensions.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Security.Cryptography; + +namespace Microsoft.NET.Build.Containers; + +internal static class StreamExtensions +{ + public static async Task CopyToAndVerifyAsync( + this Stream source, + Stream destination, + string digest, + CancellationToken cancellationToken) + { + byte[] expectedHash = DigestUtils.GetEncodedValue(digest).ToArray(); + + // Assumption: SHA256 is the only supported algorithm. + // See DigestUtils > s_registeredAlgorithms for more details. + using HashAlgorithm hashAlgorithm = SHA256.Create(); + + await using var cryptoStream = new CryptoStream( + stream: source, + transform: hashAlgorithm, + mode: CryptoStreamMode.Read, + // cryptoStream will be disposed at the end of the method, but setting leaveOpen=true + // tells CryptoStream not to dispose the source Stream. The caller is responsible for + // the lifetime of the source Stream. + leaveOpen: true + ); + + await cryptoStream.CopyToAsync(destination, cancellationToken); + + InvalidDigestException.ThrowIfMismatched(expectedHash, hashAlgorithm.Hash ?? []); + } +} diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props index 6803c90109ef..53d7fbe03b35 100644 --- a/src/SourceBuild/content/eng/Versions.props +++ b/src/SourceBuild/content/eng/Versions.props @@ -23,8 +23,8 @@ of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts are not necessary, and this property is removed from the file. --> - 9.0.118 - 9.0.118-servicing.26277.1 + 9.0.119 + 9.0.119-servicing.26323.1 2.0.0-beta4.24126.1 diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json index 38a6ea45a584..f588eb8aecd2 100644 --- a/src/SourceBuild/content/global.json +++ b/src/SourceBuild/content/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "9.0.118" + "dotnet": "9.0.119" }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.7.0", diff --git a/src/SourceBuild/content/repo-projects/aspnetcore.proj b/src/SourceBuild/content/repo-projects/aspnetcore.proj index 2e22456e73d5..324189ff3be6 100644 --- a/src/SourceBuild/content/repo-projects/aspnetcore.proj +++ b/src/SourceBuild/content/repo-projects/aspnetcore.proj @@ -19,6 +19,7 @@ $(BuildArgs) /p:PortableBuild=$(PortableBuild) $(BuildArgs) /p:TargetRuntimeIdentifier=$(TargetRid) + $(BuildArgs) /p:IdentityModelVersion=8.19.2 $(BuildArgs) $(FlagParameterPrefix)no-build-repo-tasks diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkContentTests/SdkFileDiffExclusions.txt b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkContentTests/SdkFileDiffExclusions.txt index 33a1265a0d38..fbee143561b1 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkContentTests/SdkFileDiffExclusions.txt +++ b/src/SourceBuild/content/test/Microsoft.DotNet.SourceBuild.SmokeTests/assets/SdkContentTests/SdkFileDiffExclusions.txt @@ -61,6 +61,9 @@ ./sdk/x.y.z/DotnetTools/dotnet-format/ ./sdk/x.y.z/DotnetTools/dotnet-watch/ +# SB rebuilds IdentityModel from older source lacking the transitive Microsoft.Bcl.Cryptography dependency +./sdk/x.y.z/DotnetTools/dotnet-user-jwts/x.y.z/tools/netx.y/any/Microsoft.Bcl.Cryptography.dll|msft + ./sdk/x.y.z/Extensions/cs/|msft ./sdk/x.y.z/Extensions/de/|msft ./sdk/x.y.z/Extensions/es/|msft diff --git a/src/VirtualMonoRepo/source-mappings.json b/src/VirtualMonoRepo/source-mappings.json index 661fdef3a64d..f7bbbd477bd8 100644 --- a/src/VirtualMonoRepo/source-mappings.json +++ b/src/VirtualMonoRepo/source-mappings.json @@ -47,7 +47,7 @@ }, { "name": "aspire", - "defaultRemote": "https://github.com/dotnet/aspire", + "defaultRemote": "https://github.com/microsoft/aspire", "exclude": [ "src/Aspire.Dashboard/**/*", "samples/**/*" @@ -57,6 +57,7 @@ "name": "aspnetcore", "defaultRemote": "https://github.com/dotnet/aspnetcore", "exclude": [ + "src/submodules/MessagePack-CSharp/src/MessagePack.UnityClient/UserSettings/EditorUserSettings.asset", // Non-OSS license - https://github.com/dotnet/source-build/issues/3537 "src/Installers/Windows/AspNetCoreModule-Setup/**/*" ] diff --git a/test/Microsoft.NET.Build.Containers.UnitTests/RegistryTests.cs b/test/Microsoft.NET.Build.Containers.UnitTests/RegistryTests.cs index 84025f239c0c..43bd4cc047d8 100644 --- a/test/Microsoft.NET.Build.Containers.UnitTests/RegistryTests.cs +++ b/test/Microsoft.NET.Build.Containers.UnitTests/RegistryTests.cs @@ -552,7 +552,10 @@ public async Task DownloadBlobAsync_RetriesOnFailure() var logger = _loggerFactory.CreateLogger(nameof(DownloadBlobAsync_RetriesOnFailure)); var repoName = "testRepo"; - var descriptor = new Descriptor(SchemaTypes.OciLayerGzipV1, "sha256:testdigest1234", 1234); + // The digest must be the actual SHA-256 of the response bytes so that the internal + // branch's CopyToAndVerifyAsync digest validation passes after the download succeeds. + var responseBytes = new byte[] { 1, 2, 3 }; + var descriptor = new Descriptor(SchemaTypes.OciLayerGzipV1, "sha256:039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81", 1234); var cancellationToken = CancellationToken.None; var mockRegistryAPI = new Mock(MockBehavior.Strict); @@ -560,7 +563,7 @@ public async Task DownloadBlobAsync_RetriesOnFailure() .SetupSequence(api => api.Blob.GetStreamAsync(repoName, descriptor.Digest, cancellationToken)) .ThrowsAsync(new Exception("Simulated failure 1")) // First attempt fails .ThrowsAsync(new Exception("Simulated failure 2")) // Second attempt fails - .ReturnsAsync(new MemoryStream(new byte[] { 1, 2, 3 })); // Third attempt succeeds + .ReturnsAsync(new MemoryStream(responseBytes)); // Third attempt succeeds Registry registry = new(repoName, logger, mockRegistryAPI.Object, null, () => TimeSpan.Zero); @@ -592,7 +595,7 @@ public async Task DownloadBlobAsync_ThrowsAfterMaxRetries() var logger = _loggerFactory.CreateLogger(nameof(DownloadBlobAsync_ThrowsAfterMaxRetries)); var repoName = "testRepo"; - var descriptor = new Descriptor(SchemaTypes.OciLayerGzipV1, "sha256:testdigest1234", 1234); + var descriptor = new Descriptor(SchemaTypes.OciLayerGzipV1, "sha256:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2", 1234); var cancellationToken = CancellationToken.None; var mockRegistryAPI = new Mock(MockBehavior.Strict);