Merge branch 'main' of https://github.com/dotnet/installer into test-ArtifactsTest

This commit is contained in:
Ella Hathaway 2023-08-30 18:10:28 +00:00
commit 98bb031068
29 changed files with 301 additions and 1286 deletions

View file

@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"microsoft.dotnet.darc": {
"version": "1.1.0-beta.23374.1",
"version": "1.1.0-beta.23428.3",
"commands": [
"darc"
]

View file

@ -5,10 +5,7 @@ trigger:
- main
- master
- release/*
- internal/release/3.*
- internal/release/5.*
- internal/release/6.*
- internal/release/7.*
- internal/release/*
variables:
- name: _PublishUsingPipelines

298
README.md
View file

@ -136,6 +136,16 @@ You can download the .NET SDK as either an installer (MSI, PKG) or a zip (zip, t
want to install the latest released versions, check out the [preceding section](#looking-for-released-versions-of-the-net-core-tooling).
With development builds, internal NuGet feeds are necessary for some scenarios (for example, to acquire the runtime pack for self-contained apps). You can use the following NuGet.config to configure these feeds. See the following document [Configuring NuGet behavior](https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior) for more information on where to modify your NuGet.config to apply the changes.
**For .NET 9 builds**
```xml
<configuration>
<packageSources>
<add key="dotnet9" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v3/index.json" />
</packageSources>
</configuration>
```
**For .NET 8 builds**
```xml
@ -161,20 +171,20 @@ Do not directly edit the table below. Use https://github.com/dotnet/installer/tr
### Table
*Note* the 7.0.100 build will be finished internally. Below is the last public version available from that branch but is not fully updated with the final runtime.
| Platform | main<br>(8.0.x&nbsp;Runtime) | 8.0.1xx-preview7<br>(8.0-preview7&nbsp;Runtime) | Release/7.0.4xx<br>(7.0.x&nbsp;Runtime) |
| Platform | main<br>(9.0.x&nbsp;Runtime) | 8.0.1xx-rc2<br>(8.0-rc2&nbsp;Runtime) | Release/7.0.4xx<br>(7.0.x&nbsp;Runtime) |
| :--------- | :----------: | :----------: | :----------: |
| **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]<br>[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]<br>[zip][win-x64-zip-main] - [Checksum][win-x64-zip-checksum-main] | [![][win-x64-badge-8.0.1XX-preview7]][win-x64-version-8.0.1XX-preview7]<br>[Installer][win-x64-installer-8.0.1XX-preview7] - [Checksum][win-x64-installer-checksum-8.0.1XX-preview7]<br>[zip][win-x64-zip-8.0.1XX-preview7] - [Checksum][win-x64-zip-checksum-8.0.1XX-preview7] | [![][win-x64-badge-7.0.4XX]][win-x64-version-7.0.4XX]<br>[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]<br>[zip][win-x64-zip-7.0.4XX] - [Checksum][win-x64-zip-checksum-7.0.4XX] |
| **Windows x86** | [![][win-x86-badge-main]][win-x86-version-main]<br>[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]<br>[zip][win-x86-zip-main] - [Checksum][win-x86-zip-checksum-main] | [![][win-x86-badge-8.0.1XX-preview7]][win-x86-version-8.0.1XX-preview7]<br>[Installer][win-x86-installer-8.0.1XX-preview7] - [Checksum][win-x86-installer-checksum-8.0.1XX-preview7]<br>[zip][win-x86-zip-8.0.1XX-preview7] - [Checksum][win-x86-zip-checksum-8.0.1XX-preview7] | [![][win-x86-badge-7.0.4XX]][win-x86-version-7.0.4XX]<br>[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]<br>[zip][win-x86-zip-7.0.4XX] - [Checksum][win-x86-zip-checksum-7.0.4XX] |
| **Windows x64** | [![][win-x64-badge-main]][win-x64-version-main]<br>[Installer][win-x64-installer-main] - [Checksum][win-x64-installer-checksum-main]<br>[zip][win-x64-zip-main] - [Checksum][win-x64-zip-checksum-main] | [![][win-x64-badge-8.0.1XX]][win-x64-version-8.0.1XX]<br>[Installer][win-x64-installer-8.0.1XX] - [Checksum][win-x64-installer-checksum-8.0.1XX]<br>[zip][win-x64-zip-8.0.1XX] - [Checksum][win-x64-zip-checksum-8.0.1XX] | [![][win-x64-badge-7.0.4XX]][win-x64-version-7.0.4XX]<br>[Installer][win-x64-installer-7.0.4XX] - [Checksum][win-x64-installer-checksum-7.0.4XX]<br>[zip][win-x64-zip-7.0.4XX] - [Checksum][win-x64-zip-checksum-7.0.4XX] |
| **Windows x86** | [![][win-x86-badge-main]][win-x86-version-main]<br>[Installer][win-x86-installer-main] - [Checksum][win-x86-installer-checksum-main]<br>[zip][win-x86-zip-main] - [Checksum][win-x86-zip-checksum-main] | [![][win-x86-badge-8.0.1XX]][win-x86-version-8.0.1XX]<br>[Installer][win-x86-installer-8.0.1XX] - [Checksum][win-x86-installer-checksum-8.0.1XX]<br>[zip][win-x86-zip-8.0.1XX] - [Checksum][win-x86-zip-checksum-8.0.1XX] | [![][win-x86-badge-7.0.4XX]][win-x86-version-7.0.4XX]<br>[Installer][win-x86-installer-7.0.4XX] - [Checksum][win-x86-installer-checksum-7.0.4XX]<br>[zip][win-x86-zip-7.0.4XX] - [Checksum][win-x86-zip-checksum-7.0.4XX] |
| **Windows arm** | **N/A** | **N/A** | **N/A** |
| **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]<br>[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]<br>[zip][win-arm64-zip-main] | [![][win-arm64-badge-8.0.1XX-preview7]][win-arm64-version-8.0.1XX-preview7]<br>[Installer][win-arm64-installer-8.0.1XX-preview7] - [Checksum][win-arm64-installer-checksum-8.0.1XX-preview7]<br>[zip][win-arm64-zip-8.0.1XX-preview7] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]<br>[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]<br>[zip][win-arm64-zip-7.0.4XX] |
| **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]<br>[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]<br>[tar.gz][osx-x64-targz-main] - [Checksum][osx-x64-targz-checksum-main] | [![][osx-x64-badge-8.0.1XX-preview7]][osx-x64-version-8.0.1XX-preview7]<br>[Installer][osx-x64-installer-8.0.1XX-preview7] - [Checksum][osx-x64-installer-checksum-8.0.1XX-preview7]<br>[tar.gz][osx-x64-targz-8.0.1XX-preview7] - [Checksum][osx-x64-targz-checksum-8.0.1XX-preview7] | [![][osx-x64-badge-7.0.4XX]][osx-x64-version-7.0.4XX]<br>[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-x64-targz-7.0.4XX] - [Checksum][osx-x64-targz-checksum-7.0.4XX] |
| **macOS arm64** | [![][osx-arm64-badge-main]][osx-arm64-version-main]<br>[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]<br>[tar.gz][osx-arm64-targz-main] - [Checksum][osx-arm64-targz-checksum-main] | [![][osx-arm64-badge-8.0.1XX-preview7]][osx-arm64-version-8.0.1XX-preview7]<br>[Installer][osx-arm64-installer-8.0.1XX-preview7] - [Checksum][osx-arm64-installer-checksum-8.0.1XX-preview7]<br>[tar.gz][osx-arm64-targz-8.0.1XX-preview7] - [Checksum][osx-arm64-targz-checksum-8.0.1XX-preview7] | [![][osx-arm64-badge-7.0.4XX]][osx-arm64-version-7.0.4XX]<br>[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] |
| **Linux x64** | [![][linux-badge-main]][linux-version-main]<br>[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]<br>[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-8.0.1XX-preview7]][linux-version-8.0.1XX-preview7]<br>[DEB Installer][linux-DEB-installer-8.0.1XX-preview7] - [Checksum][linux-DEB-installer-checksum-8.0.1XX-preview7]<br>[RPM Installer][linux-RPM-installer-8.0.1XX-preview7] - [Checksum][linux-RPM-installer-checksum-8.0.1XX-preview7]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-8.0.1XX-preview7] - [Checksum][linux-targz-checksum-8.0.1XX-preview7] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]<br>[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]<br>[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] |
| **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]<br>[tar.gz][linux-arm-targz-main] - [Checksum][linux-arm-targz-checksum-main] | [![][linux-arm-badge-8.0.1XX-preview7]][linux-arm-version-8.0.1XX-preview7]<br>[tar.gz][linux-arm-targz-8.0.1XX-preview7] - [Checksum][linux-arm-targz-checksum-8.0.1XX-preview7] | [![][linux-arm-badge-7.0.4XX]][linux-arm-version-7.0.4XX]<br>[tar.gz][linux-arm-targz-7.0.4XX] - [Checksum][linux-arm-targz-checksum-7.0.4XX] |
| **Linux arm64** | [![][linux-arm64-badge-main]][linux-arm64-version-main]<br>[tar.gz][linux-arm64-targz-main] - [Checksum][linux-arm64-targz-checksum-main] | [![][linux-arm64-badge-8.0.1XX-preview7]][linux-arm64-version-8.0.1XX-preview7]<br>[tar.gz][linux-arm64-targz-8.0.1XX-preview7] - [Checksum][linux-arm64-targz-checksum-8.0.1XX-preview7] | [![][linux-arm64-badge-7.0.4XX]][linux-arm64-version-7.0.4XX]<br>[tar.gz][linux-arm64-targz-7.0.4XX] - [Checksum][linux-arm64-targz-checksum-7.0.4XX] |
| **Linux-musl-x64** | [![][linux-musl-x64-badge-main]][linux-musl-x64-version-main]<br>[tar.gz][linux-musl-x64-targz-main] - [Checksum][linux-musl-x64-targz-checksum-main] | [![][linux-musl-x64-badge-8.0.1XX-preview7]][linux-musl-x64-version-8.0.1XX-preview7]<br>[tar.gz][linux-musl-x64-targz-8.0.1XX-preview7] - [Checksum][linux-musl-x64-targz-checksum-8.0.1XX-preview7] | [![][linux-musl-x64-badge-7.0.4XX]][linux-musl-x64-version-7.0.4XX]<br>[tar.gz][linux-musl-x64-targz-7.0.4XX] - [Checksum][linux-musl-x64-targz-checksum-7.0.4XX] |
| **Linux-musl-arm** | [![][linux-musl-arm-badge-main]][linux-musl-arm-version-main]<br>[tar.gz][linux-musl-arm-targz-main] - [Checksum][linux-musl-arm-targz-checksum-main] | [![][linux-musl-arm-badge-8.0.1XX-preview7]][linux-musl-arm-version-8.0.1XX-preview7]<br>[tar.gz][linux-musl-arm-targz-8.0.1XX-preview7] - [Checksum][linux-musl-arm-targz-checksum-8.0.1XX-preview7] | [![][linux-musl-arm-badge-7.0.4XX]][linux-musl-arm-version-7.0.4XX]<br>[tar.gz][linux-musl-arm-targz-7.0.4XX] - [Checksum][linux-musl-arm-targz-checksum-7.0.4XX] |
| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-main]][linux-musl-arm64-version-main]<br>[tar.gz][linux-musl-arm64-targz-main] - [Checksum][linux-musl-arm64-targz-checksum-main] | [![][linux-musl-arm64-badge-8.0.1XX-preview7]][linux-musl-arm64-version-8.0.1XX-preview7]<br>[tar.gz][linux-musl-arm64-targz-8.0.1XX-preview7] - [Checksum][linux-musl-arm64-targz-checksum-8.0.1XX-preview7] | [![][linux-musl-arm64-badge-7.0.4XX]][linux-musl-arm64-version-7.0.4XX]<br>[tar.gz][linux-musl-arm64-targz-7.0.4XX] - [Checksum][linux-musl-arm64-targz-checksum-7.0.4XX] |
| **Windows arm64** | [![][win-arm64-badge-main]][win-arm64-version-main]<br>[Installer][win-arm64-installer-main] - [Checksum][win-arm64-installer-checksum-main]<br>[zip][win-arm64-zip-main] | [![][win-arm64-badge-8.0.1XX]][win-arm64-version-8.0.1XX]<br>[Installer][win-arm64-installer-8.0.1XX] - [Checksum][win-arm64-installer-checksum-8.0.1XX]<br>[zip][win-arm64-zip-8.0.1XX] | [![][win-arm64-badge-7.0.4XX]][win-arm64-version-7.0.4XX]<br>[Installer][win-arm64-installer-7.0.4XX] - [Checksum][win-arm64-installer-checksum-7.0.4XX]<br>[zip][win-arm64-zip-7.0.4XX] |
| **macOS x64** | [![][osx-x64-badge-main]][osx-x64-version-main]<br>[Installer][osx-x64-installer-main] - [Checksum][osx-x64-installer-checksum-main]<br>[tar.gz][osx-x64-targz-main] - [Checksum][osx-x64-targz-checksum-main] | [![][osx-x64-badge-8.0.1XX]][osx-x64-version-8.0.1XX]<br>[Installer][osx-x64-installer-8.0.1XX] - [Checksum][osx-x64-installer-checksum-8.0.1XX]<br>[tar.gz][osx-x64-targz-8.0.1XX] - [Checksum][osx-x64-targz-checksum-8.0.1XX] | [![][osx-x64-badge-7.0.4XX]][osx-x64-version-7.0.4XX]<br>[Installer][osx-x64-installer-7.0.4XX] - [Checksum][osx-x64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-x64-targz-7.0.4XX] - [Checksum][osx-x64-targz-checksum-7.0.4XX] |
| **macOS arm64** | [![][osx-arm64-badge-main]][osx-arm64-version-main]<br>[Installer][osx-arm64-installer-main] - [Checksum][osx-arm64-installer-checksum-main]<br>[tar.gz][osx-arm64-targz-main] - [Checksum][osx-arm64-targz-checksum-main] | [![][osx-arm64-badge-8.0.1XX]][osx-arm64-version-8.0.1XX]<br>[Installer][osx-arm64-installer-8.0.1XX] - [Checksum][osx-arm64-installer-checksum-8.0.1XX]<br>[tar.gz][osx-arm64-targz-8.0.1XX] - [Checksum][osx-arm64-targz-checksum-8.0.1XX] | [![][osx-arm64-badge-7.0.4XX]][osx-arm64-version-7.0.4XX]<br>[Installer][osx-arm64-installer-7.0.4XX] - [Checksum][osx-arm64-installer-checksum-7.0.4XX]<br>[tar.gz][osx-arm64-targz-7.0.4XX] - [Checksum][osx-arm64-targz-checksum-7.0.4XX] |
| **Linux x64** | [![][linux-badge-main]][linux-version-main]<br>[DEB Installer][linux-DEB-installer-main] - [Checksum][linux-DEB-installer-checksum-main]<br>[RPM Installer][linux-RPM-installer-main] - [Checksum][linux-RPM-installer-checksum-main]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-main] - [Checksum][linux-targz-checksum-main] | [![][linux-badge-8.0.1XX]][linux-version-8.0.1XX]<br>[DEB Installer][linux-DEB-installer-8.0.1XX] - [Checksum][linux-DEB-installer-checksum-8.0.1XX]<br>[RPM Installer][linux-RPM-installer-8.0.1XX] - [Checksum][linux-RPM-installer-checksum-8.0.1XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-8.0.1XX] - [Checksum][linux-targz-checksum-8.0.1XX] | [![][linux-badge-7.0.4XX]][linux-version-7.0.4XX]<br>[DEB Installer][linux-DEB-installer-7.0.4XX] - [Checksum][linux-DEB-installer-checksum-7.0.4XX]<br>[RPM Installer][linux-RPM-installer-7.0.4XX] - [Checksum][linux-RPM-installer-checksum-7.0.4XX]<br>_see installer note below_<sup>1</sup><br>[tar.gz][linux-targz-7.0.4XX] - [Checksum][linux-targz-checksum-7.0.4XX] |
| **Linux arm** | [![][linux-arm-badge-main]][linux-arm-version-main]<br>[tar.gz][linux-arm-targz-main] - [Checksum][linux-arm-targz-checksum-main] | [![][linux-arm-badge-8.0.1XX]][linux-arm-version-8.0.1XX]<br>[tar.gz][linux-arm-targz-8.0.1XX] - [Checksum][linux-arm-targz-checksum-8.0.1XX] | [![][linux-arm-badge-7.0.4XX]][linux-arm-version-7.0.4XX]<br>[tar.gz][linux-arm-targz-7.0.4XX] - [Checksum][linux-arm-targz-checksum-7.0.4XX] |
| **Linux arm64** | [![][linux-arm64-badge-main]][linux-arm64-version-main]<br>[tar.gz][linux-arm64-targz-main] - [Checksum][linux-arm64-targz-checksum-main] | [![][linux-arm64-badge-8.0.1XX]][linux-arm64-version-8.0.1XX]<br>[tar.gz][linux-arm64-targz-8.0.1XX] - [Checksum][linux-arm64-targz-checksum-8.0.1XX] | [![][linux-arm64-badge-7.0.4XX]][linux-arm64-version-7.0.4XX]<br>[tar.gz][linux-arm64-targz-7.0.4XX] - [Checksum][linux-arm64-targz-checksum-7.0.4XX] |
| **Linux-musl-x64** | [![][linux-musl-x64-badge-main]][linux-musl-x64-version-main]<br>[tar.gz][linux-musl-x64-targz-main] - [Checksum][linux-musl-x64-targz-checksum-main] | [![][linux-musl-x64-badge-8.0.1XX]][linux-musl-x64-version-8.0.1XX]<br>[tar.gz][linux-musl-x64-targz-8.0.1XX] - [Checksum][linux-musl-x64-targz-checksum-8.0.1XX] | [![][linux-musl-x64-badge-7.0.4XX]][linux-musl-x64-version-7.0.4XX]<br>[tar.gz][linux-musl-x64-targz-7.0.4XX] - [Checksum][linux-musl-x64-targz-checksum-7.0.4XX] |
| **Linux-musl-arm** | [![][linux-musl-arm-badge-main]][linux-musl-arm-version-main]<br>[tar.gz][linux-musl-arm-targz-main] - [Checksum][linux-musl-arm-targz-checksum-main] | [![][linux-musl-arm-badge-8.0.1XX]][linux-musl-arm-version-8.0.1XX]<br>[tar.gz][linux-musl-arm-targz-8.0.1XX] - [Checksum][linux-musl-arm-targz-checksum-8.0.1XX] | [![][linux-musl-arm-badge-7.0.4XX]][linux-musl-arm-version-7.0.4XX]<br>[tar.gz][linux-musl-arm-targz-7.0.4XX] - [Checksum][linux-musl-arm-targz-checksum-7.0.4XX] |
| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-main]][linux-musl-arm64-version-main]<br>[tar.gz][linux-musl-arm64-targz-main] - [Checksum][linux-musl-arm64-targz-checksum-main] | [![][linux-musl-arm64-badge-8.0.1XX]][linux-musl-arm64-version-8.0.1XX]<br>[tar.gz][linux-musl-arm64-targz-8.0.1XX] - [Checksum][linux-musl-arm64-targz-checksum-8.0.1XX] | [![][linux-musl-arm64-badge-7.0.4XX]][linux-musl-arm64-version-7.0.4XX]<br>[tar.gz][linux-musl-arm64-targz-7.0.4XX] - [Checksum][linux-musl-arm64-targz-checksum-7.0.4XX] |
| **RHEL 6** | **N/A** | **N/A** | **N/A** |
Reference notes:
@ -184,19 +194,19 @@ Reference notes:
.NET Core SDK 2.x downloads can be found at [.NET Core SDK 2.x Installers and Binaries](Downloads2.x.md) but they are [out of support](https://dotnet.microsoft.com/platform/support/policy/dotnet-core).
[win-x64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-x64.txt
[win-x64-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.exe
[win-x64-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.exe.sha
[win-x64-zip-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip.sha
[win-x64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-win-x64.txt
[win-x64-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.exe
[win-x64-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.exe.sha
[win-x64-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x64.zip.sha
[win-x64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-win-x64.txt
[win-x64-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x64.exe
[win-x64-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x64.exe.sha
[win-x64-zip-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x64.zip.sha
[win-x64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-x64.txt
[win-x64-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.exe
[win-x64-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.exe.sha
[win-x64-zip-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip.sha
[win-x64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/win_x64_Release_version_badge.svg?no-cache
[win-x64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-win-x64.txt
@ -205,19 +215,19 @@ Reference notes:
[win-x64-zip-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-x64.zip
[win-x64-zip-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-x64.zip.sha
[win-x86-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-x86.txt
[win-x86-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.exe
[win-x86-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.exe.sha
[win-x86-zip-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.zip.sha
[win-x86-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-win-x86.txt
[win-x86-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.exe
[win-x86-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.exe.sha
[win-x86-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-x86.zip.sha
[win-x86-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-win-x86.txt
[win-x86-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x86.exe
[win-x86-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x86.exe.sha
[win-x86-zip-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-x86.zip.sha
[win-x86-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-x86.txt
[win-x86-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.exe
[win-x86-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.exe.sha
[win-x86-zip-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x86.zip.sha
[win-x86-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/win_x86_Release_version_badge.svg?no-cache
[win-x86-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-win-x86.txt
@ -226,19 +236,19 @@ Reference notes:
[win-x86-zip-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-x86.zip
[win-x86-zip-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-x86.zip.sha
[osx-x64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-osx-x64.txt
[osx-x64-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg
[osx-x64-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg.sha
[osx-x64-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-x64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-osx-x64.txt
[osx-x64-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.pkg
[osx-x64-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.pkg.sha
[osx-x64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-x64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-osx-x64.txt
[osx-x64-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-x64.pkg
[osx-x64-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-x64.pkg.sha
[osx-x64-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-x64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-osx-x64.txt
[osx-x64-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg
[osx-x64-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg.sha
[osx-x64-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-x64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/osx_x64_Release_version_badge.svg?no-cache
[osx-x64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-osx-x64.txt
@ -247,19 +257,19 @@ Reference notes:
[osx-x64-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-osx-x64.tar.gz
[osx-x64-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-osx-x64.pkg.tar.gz.sha
[osx-arm64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-osx-arm64.txt
[osx-arm64-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg
[osx-arm64-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.sha
[osx-arm64-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[osx-arm64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-osx-arm64.txt
[osx-arm64-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.pkg
[osx-arm64-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.sha
[osx-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[osx-arm64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-osx-arm64.txt
[osx-arm64-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-arm64.pkg
[osx-arm64-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-arm64.pkg.sha
[osx-arm64-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[osx-arm64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-osx-arm64.txt
[osx-arm64-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg
[osx-arm64-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.sha
[osx-arm64-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[osx-arm64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/osx_arm64_Release_version_badge.svg?no-cache
[osx-arm64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-osx-arm64.txt
@ -268,23 +278,23 @@ Reference notes:
[osx-arm64-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-osx-arm64.tar.gz
[osx-arm64-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
[linux-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-x64.txt
[linux-DEB-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.deb
[linux-DEB-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.deb.sha
[linux-RPM-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.rpm
[linux-RPM-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.rpm.sha
[linux-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-x64.txt
[linux-DEB-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-x64.deb
[linux-DEB-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-x64.deb.sha
[linux-RPM-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-x64.rpm
[linux-RPM-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-x64.rpm.sha
[linux-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-x64.txt
[linux-DEB-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-x64.deb
[linux-DEB-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-x64.deb.sha
[linux-RPM-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-x64.rpm
[linux-RPM-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-x64.rpm.sha
[linux-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-x64.txt
[linux-DEB-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.deb
[linux-DEB-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.deb.sha
[linux-RPM-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.rpm
[linux-RPM-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-x64.rpm.sha
[linux-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_x64_Release_version_badge.svg?no-cache
[linux-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-x64.txt
@ -295,124 +305,124 @@ Reference notes:
[linux-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-x64.tar.gz
[linux-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-x64.tar.gz.sha
[linux-arm-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-arm.txt
[linux-arm-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-arm.txt
[linux-arm-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-arm.txt
[linux-arm-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-arm.txt
[linux-arm-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_arm_Release_version_badge.svg?no-cache
[linux-arm-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-arm.txt
[linux-arm-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-arm.tar.gz
[linux-arm-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-arm.tar.gz.sha
[linux-arm64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-arm64.txt
[linux-arm64-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[linux-arm64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-arm64.txt
[linux-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[linux-arm64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-arm64.txt
[linux-arm64-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[linux-arm64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-arm64.txt
[linux-arm64-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[linux-arm64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_arm64_Release_version_badge.svg?no-cache
[linux-arm64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-arm64.txt
[linux-arm64-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-arm64.tar.gz
[linux-arm64-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-arm64.tar.gz.sha
[rhel-6-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-rhel.6-x64.txt
[rhel-6-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[rhel-6-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-rhel.6-x64.txt
[rhel-6-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[rhel-6-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-rhel.6-x64.txt
[rhel-6-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[rhel-6-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-rhel.6-x64.txt
[rhel-6-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[rhel-6-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/rhel.6_x64_Release_version_badge.svg?no-cache
[rhel-6-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-rhel.6-x64.txt
[rhel-6-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-rhel.6-x64.tar.gz
[rhel-6-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-rhel.6-x64.tar.gz.sha
[linux-musl-x64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-x64.txt
[linux-musl-x64-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-x64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-musl-x64.txt
[linux-musl-x64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-x64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-musl-x64.txt
[linux-musl-x64-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-x64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-x64.txt
[linux-musl-x64-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-x64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_musl_x64_Release_version_badge.svg?no-cache
[linux-musl-x64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-musl-x64.txt
[linux-musl-x64-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-x64.tar.gz
[linux-musl-x64-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-x64.tar.gz.sha
[linux-musl-arm-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-arm.txt
[linux-musl-arm-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-musl-arm.txt
[linux-musl-arm-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-musl-arm.txt
[linux-musl-arm-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-arm.txt
[linux-musl-arm-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_musl_arm_Release_version_badge.svg?no-cache
[linux-musl-arm-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-musl-arm.txt
[linux-musl-arm-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-arm.tar.gz
[linux-musl-arm-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-arm.tar.gz.sha
[linux-musl-arm64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-arm64.txt
[linux-musl-arm64-targz-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[linux-musl-arm64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-linux-musl-arm64.txt
[linux-musl-arm64-targz-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[linux-musl-arm64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-linux-musl-arm64.txt
[linux-musl-arm64-targz-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[linux-musl-arm64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-linux-musl-arm64.txt
[linux-musl-arm64-targz-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[linux-musl-arm64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/linux_musl_arm64_Release_version_badge.svg?no-cache
[linux-musl-arm64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-linux-musl-arm64.txt
[linux-musl-arm64-targz-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz
[linux-musl-arm64-targz-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-linux-musl-arm64.tar.gz.sha
[win-arm-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-arm.txt
[win-arm-zip-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm.zip.sha
[win-arm-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-win-arm.txt
[win-arm-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm.zip.sha
[win-arm-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-win-arm.txt
[win-arm-zip-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm.zip.sha
[win-arm-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-arm.txt
[win-arm-zip-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm.zip.sha
[win-arm-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/win_arm_Release_version_badge.svg?no-cache
[win-arm-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-win-arm.txt
[win-arm-zip-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-arm.zip
[win-arm-zip-checksum-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/dotnet-sdk-win-arm.zip.sha
[win-arm64-badge-main]: https://aka.ms/dotnet/8.0.1xx/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-main]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-arm64.txt
[win-arm64-installer-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.exe
[win-arm64-installer-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.exe.sha
[win-arm64-zip-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.zip
[win-arm64-zip-checksum-main]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.zip.sha
[win-arm64-badge-main]: https://aka.ms/dotnet/9.0.1xx/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-main]: https://aka.ms/dotnet/9.0.1xx/daily/productCommit-win-arm64.txt
[win-arm64-installer-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.exe
[win-arm64-installer-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.exe.sha
[win-arm64-zip-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.zip
[win-arm64-zip-checksum-main]: https://aka.ms/dotnet/9.0.1xx/daily/dotnet-sdk-win-arm64.zip.sha
[win-arm64-badge-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/productCommit-win-arm64.txt
[win-arm64-installer-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm64.exe
[win-arm64-installer-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm64.exe.sha
[win-arm64-zip-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm64.zip
[win-arm64-zip-checksum-8.0.1XX-preview7]: https://aka.ms/dotnet/8.0.1xx-preview7/daily/dotnet-sdk-win-arm64.zip.sha
[win-arm64-badge-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/productCommit-win-arm64.txt
[win-arm64-installer-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.exe
[win-arm64-installer-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.exe.sha
[win-arm64-zip-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.zip
[win-arm64-zip-checksum-8.0.1XX]: https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-arm64.zip.sha
[win-arm64-badge-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/win_arm64_Release_version_badge.svg?no-cache
[win-arm64-version-7.0.4XX]: https://aka.ms/dotnet/7.0.4xx/daily/productCommit-win-arm64.txt

View file

@ -106,22 +106,22 @@
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>0385265f4d0b6413d64aea0223172366a9b9858c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.5.0" Version="1.1.0-rc.23415.2">
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.5.0" Version="1.1.0-rc.23417.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>56167d00449a4f6dbdc880f7abe7d3097b9b6df8</Sha>
<Sha>c2c77959527a597caf3d0351ea0d25c085fbb32c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.6.0" Version="1.1.0-rc.23415.2">
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.6.0" Version="1.1.0-rc.23417.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>56167d00449a4f6dbdc880f7abe7d3097b9b6df8</Sha>
<Sha>c2c77959527a597caf3d0351ea0d25c085fbb32c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.7.0" Version="1.1.0-rc.23415.2">
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.7.0" Version="1.1.0-rc.23417.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>56167d00449a4f6dbdc880f7abe7d3097b9b6df8</Sha>
<Sha>c2c77959527a597caf3d0351ea0d25c085fbb32c</Sha>
<SourceBuild RepoName="test-templates" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.8.0" Version="1.1.0-rc.23415.2">
<Dependency Name="Microsoft.DotNet.Test.ProjectTemplates.8.0" Version="1.1.0-rc.23417.1">
<Uri>https://github.com/dotnet/test-templates</Uri>
<Sha>56167d00449a4f6dbdc880f7abe7d3097b9b6df8</Sha>
<Sha>c2c77959527a597caf3d0351ea0d25c085fbb32c</Sha>
</Dependency>
<!-- For coherency purposes, these versions should be gated by the versions of winforms and wpf routed via windowsdesktop -->
<Dependency Name="Microsoft.Dotnet.WinForms.ProjectTemplates" Version="8.0.0-rc.1.23411.1" CoherentParentDependency="Microsoft.WindowsDesktop.App.Runtime.win-x64">
@ -206,40 +206,45 @@
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="8.0.0-beta.23415.4">
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="8.0.0-beta.23428.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>46ff142f43e887d5f9a4d87ef39d72166f61db8d</Sha>
<Sha>3d92d0bfd8c9006f5fe1687e465dc4f8aa068b00</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.CMake.Sdk" Version="8.0.0-beta.23415.4">
<Dependency Name="Microsoft.DotNet.CMake.Sdk" Version="8.0.0-beta.23428.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>46ff142f43e887d5f9a4d87ef39d72166f61db8d</Sha>
<Sha>3d92d0bfd8c9006f5fe1687e465dc4f8aa068b00</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="8.0.0-beta.23415.4">
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="8.0.0-beta.23428.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>46ff142f43e887d5f9a4d87ef39d72166f61db8d</Sha>
<Sha>3d92d0bfd8c9006f5fe1687e465dc4f8aa068b00</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.23374.1">
<Dependency Name="Microsoft.DotNet.Darc" Version="1.1.0-beta.23428.3">
<Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>47ed0ea4d789d359d3749707374d7a5edd84eb19</Sha>
<Sha>fb0d3d39f7586591abae5c476f0b684998dc358c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.23374.1">
<Dependency Name="Microsoft.DotNet.DarcLib" Version="1.1.0-beta.23428.3">
<Uri>https://github.com/dotnet/arcade-services</Uri>
<Sha>47ed0ea4d789d359d3749707374d7a5edd84eb19</Sha>
<Sha>fb0d3d39f7586591abae5c476f0b684998dc358c</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="8.0.0-alpha.1.22557.12">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>af841c8b33cecc92d74222298f1e45bf7bf3d90a</Sha>
</Dependency>
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="8.0.0-alpha.1.23414.1">
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="8.0.0-alpha.1.23428.2">
<Uri>https://github.com/dotnet/source-build-reference-packages</Uri>
<Sha>45f5554ac6813e1e155c47fd80ec146c684f65e8</Sha>
<Sha>26ce96327dd346534926c4551f8b8d62a6fc724f</Sha>
<SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="1.0.0-beta.23415.1" CoherentParentDependency="Microsoft.DotNet.Arcade.Sdk">
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="1.0.0-beta.23423.1" CoherentParentDependency="Microsoft.DotNet.Arcade.Sdk">
<Uri>https://github.com/dotnet/xliff-tasks</Uri>
<Sha>649a1e75101b701d753ee41efbe9038f9b23a0db</Sha>
<Sha>ed9a83526483c094fb51e7000b6f816ce6cb0325</Sha>
<SourceBuild RepoName="xliff-tasks" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.ScenarioTests.SdkTemplateTests" Version="8.0.0-preview.23424.2">
<Uri>https://github.com/dotnet/scenario-tests</Uri>
<Sha>8af694a5e3986a27ccfee1a638ba311c7e9bc55d</Sha>
<SourceBuild RepoName="scenario-tests" ManagedOnly="true" />
</Dependency>
</ToolsetDependencies>
</Dependencies>

View file

@ -25,8 +25,8 @@
<VersionFeature21>30</VersionFeature21>
<VersionFeature31>32</VersionFeature31>
<VersionFeature50>17</VersionFeature50>
<VersionFeature60>20</VersionFeature60>
<VersionFeature70>9</VersionFeature70>
<VersionFeature60>21</VersionFeature60>
<VersionFeature70>10</VersionFeature70>
<!-- Should be kept in sync with VersionFeature70. It should match the version of Microsoft.NET.ILLink.Tasks
referenced by the same 7.0 SDK that references the 7.0.VersionFeature70 runtime pack. -->
<_NET70ILLinkPackVersion>7.0.100-1.23211.1</_NET70ILLinkPackVersion>
@ -39,11 +39,11 @@
</PropertyGroup>
<PropertyGroup>
<!-- Dependency from https://github.com/dotnet/arcade -->
<MicrosoftDotNetBuildTasksInstallersPackageVersion>8.0.0-beta.23415.4</MicrosoftDotNetBuildTasksInstallersPackageVersion>
<MicrosoftDotNetBuildTasksInstallersPackageVersion>8.0.0-beta.23428.2</MicrosoftDotNetBuildTasksInstallersPackageVersion>
</PropertyGroup>
<PropertyGroup>
<!-- Dependency from https://github.com/dotnet/arcade-services -->
<MicrosoftDotNetDarcLibVersion>1.1.0-beta.23374.1</MicrosoftDotNetDarcLibVersion>
<MicrosoftDotNetDarcLibVersion>1.1.0-beta.23428.3</MicrosoftDotNetDarcLibVersion>
</PropertyGroup>
<PropertyGroup>
<!-- Dependency from https://github.com/dotnet/winforms -->
@ -60,10 +60,10 @@
<MicrosoftDotNetTestProjectTemplates30PackageVersion>1.0.2-beta4.22406.1</MicrosoftDotNetTestProjectTemplates30PackageVersion>
<!-- Supported versions -->
<MicrosoftDotNetTestProjectTemplates31PackageVersion>1.1.0-rc.22558.1</MicrosoftDotNetTestProjectTemplates31PackageVersion>
<MicrosoftDotNetTestProjectTemplates50PackageVersion>1.1.0-rc.23415.2</MicrosoftDotNetTestProjectTemplates50PackageVersion>
<MicrosoftDotNetTestProjectTemplates60PackageVersion>1.1.0-rc.23415.2</MicrosoftDotNetTestProjectTemplates60PackageVersion>
<MicrosoftDotNetTestProjectTemplates70PackageVersion>1.1.0-rc.23415.2</MicrosoftDotNetTestProjectTemplates70PackageVersion>
<MicrosoftDotNetTestProjectTemplates80PackageVersion>1.1.0-rc.23415.2</MicrosoftDotNetTestProjectTemplates80PackageVersion>
<MicrosoftDotNetTestProjectTemplates50PackageVersion>1.1.0-rc.23417.1</MicrosoftDotNetTestProjectTemplates50PackageVersion>
<MicrosoftDotNetTestProjectTemplates60PackageVersion>1.1.0-rc.23417.1</MicrosoftDotNetTestProjectTemplates60PackageVersion>
<MicrosoftDotNetTestProjectTemplates70PackageVersion>1.1.0-rc.23417.1</MicrosoftDotNetTestProjectTemplates70PackageVersion>
<MicrosoftDotNetTestProjectTemplates80PackageVersion>1.1.0-rc.23417.1</MicrosoftDotNetTestProjectTemplates80PackageVersion>
</PropertyGroup>
<PropertyGroup>
<!-- NUnit3.DotNetNew.Template versions do not 'flow in' -->
@ -233,6 +233,7 @@
<DotnetDebToolVersion>2.0.0</DotnetDebToolVersion>
<MicrosoftNETTestSdkVersion>17.8.0-preview-23407-02</MicrosoftNETTestSdkVersion>
<MicrosoftExtensionsLoggingConsoleVersion>8.0.0-alpha.1.22557.12</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion>8.0.0-preview.23424.2</MicrosoftDotNetScenarioTestsSdkTemplateTestsVersion>
</PropertyGroup>
<!-- Workload manifest package versions -->
<PropertyGroup>

View file

@ -63,7 +63,7 @@ if [ -z "$CLR_CC" ]; then
# Set default versions
if [ -z "$majorVersion" ]; then
# note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero.
if [ "$compiler" = "clang" ]; then versions="16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5"
if [ "$compiler" = "clang" ]; then versions="17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5"
elif [ "$compiler" = "gcc" ]; then versions="13 12 11 10 9 8 7 6 5 4.9"; fi
for version in $versions; do

View file

@ -25,7 +25,7 @@ function Install-VersionTools-Cli {
Write-Host "Installing the package '$CliToolName' with a version of '$version' ..."
$feed = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json"
$argumentList = @("tool", "install", "--local", "$CliToolName", "--add-source $feed", "--no-cache", "--version $Version")
$argumentList = @("tool", "install", "--local", "$CliToolName", "--add-source $feed", "--no-cache", "--version $Version", "--create-manifest-if-needed")
Start-Process "$dotnet" -Verbose -ArgumentList $argumentList -NoNewWindow -Wait
}

View file

@ -105,6 +105,11 @@ jobs:
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
checkDownloadedFiles: true
- powershell: eng/common/sdl/trim-assets-version.ps1
-InputPath $(Build.ArtifactStagingDirectory)\artifacts
displayName: Trim the version from the NuGet packages
continueOnError: ${{ parameters.sdlContinueOnError }}
- powershell: eng/common/sdl/extract-artifact-packages.ps1
-InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
-ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts

View file

@ -70,7 +70,7 @@ jobs:
- template: /eng/common/templates/variables/pool-providers.yml
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: AzureDevOps-Artifact-Feeds-Pats
- ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['System.TeamProject'], 'internal'), not(startswith(parameters.vmrBranch, 'internal/release/'))) }}:
- ${{ if and(not(parameters.isBuiltFromVmr), eq(variables['System.TeamProject'], 'internal'), not(startswith(parameters.vmrBranch, 'internal/release/')), not(eq(variables['Build.Reason'], 'PullRequest'))) }}:
- group: DotNetBot-GitHub
- ${{ else }}:
- name: BotAccount-dotnet-bot-repo-PAT

View file

@ -87,28 +87,28 @@ stages:
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
# CI - Stage 1 x64 legs ------------------------------------
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline
buildName: CentOSStream8_Offline_MsftSdk
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
vmrBranch: ${{ variables.VmrBranch }}
architecture: x64
pool:
name: ${{ variables.defaultPoolName }}
demands: ${{ variables.defaultPoolDemands }}
container: ${{ parameters.centOSStream8Container }}
buildFromArchive: true # ✅
enablePoison: false # 🚫
excludeOmniSharpTests: true # ✅
runOnline: false # 🚫
useMonoRuntime: false # 🚫
withPreviousSDK: false # 🚫
- template: ../jobs/vmr-build.yml
parameters:
# Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline

View file

@ -32,6 +32,7 @@ steps:
./eng/vmr-sync.sh
--vmr ${{ parameters.vmrPath }}
--tmp $(Agent.TempDirectory)
--azdev-pat '$(System.AccessToken)'
--branch ${{ parameters.vmrBranch }}
--repository "installer:${{ parameters.targetRef }}"
--recursive

View file

@ -30,7 +30,7 @@ resources:
- repository: vmr
type: git
name: dotnet-dotnet
ref: $(VmrBranch)
ref: ${{ variables.VmrBranch }}
stages:
# You can temporarily disable the VMR Build stage by changing the default of disableVmrBuild

View file

@ -58,6 +58,9 @@
### Optional. Template for the header of VMRs THIRD-PARTY-NOTICES file.
### Defaults to src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt
###
### --azdev-pat
### Optional. Azure DevOps PAT to use for cloning private repositories.
###
### -v, --vmr, --vmr-dir PATH
### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
@ -102,6 +105,7 @@ recursive=false
verbosity=verbose
readme_template="$installer_dir/src/VirtualMonoRepo/README.template.md"
tpn_template="$installer_dir/src/VirtualMonoRepo/THIRD-PARTY-NOTICES.template.txt"
azdev_pat=''
# If installer is a repo, we're in an installer and not in the dotnet/dotnet repo
if [[ -d "$installer_dir/.git" ]]; then
@ -142,6 +146,10 @@ while [[ $# -gt 0 ]]; do
tpn_template=$2
shift
;;
--azdev-pat)
azdev_pat=$2
shift
;;
-d|--debug)
verbosity=debug
;;
@ -245,11 +253,16 @@ if [[ -n "$additional_remotes" ]]; then
additional_remotes="--additional-remotes $additional_remotes"
fi
if [[ -n "$azdev_pat" ]]; then
azdev_pat="--azdev-pat $azdev_pat"
fi
# Synchronize the VMR
"$dotnet" darc vmr update \
--vmr "$vmr_dir" \
--tmp "$tmp_dir" \
$azdev_pat \
--$verbosity \
$recursive_arg \
--readme-template "$readme_template" \

View file

@ -11,7 +11,7 @@
"cmake": "3.21.0"
},
"msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23415.4",
"Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.23415.4"
"Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23428.2",
"Microsoft.DotNet.CMake.Sdk": "8.0.0-beta.23428.2"
}
}

View file

@ -163,36 +163,12 @@
<Message Importance="High" Text="Packaged smoke-test prereqs in '$(SmokeTestPrereqsTarballName)'" />
</Target>
<UsingTask AssemblyFile="$(XPlatSourceBuildTasksAssembly)" TaskName="UploadToAzure" />
<Target Name="PublishPrebuiltReportData">
<Error Text="RelativeBlobPath must be set to a non-empty string." Condition="'$(RelativeBlobPath)' == ''" />
<Error Text="ContainerName must be set to a non-empty string." Condition="'$(ContainerName)' == ''" />
<Error Text="AzureAccountName must be set to a non-empty string." Condition="'$(AzureAccountName)' == ''" />
<Error Text="AzureAccessToken must be set to a non-empty string." Condition="'$(AzureAccessToken)' == ''" />
<ItemGroup>
<ItemsToPublish Include="$(PackageReportDir)*.xml" />
<ItemsToPublish Include="$(PackageReportDir)*.csv" />
<ItemsToPublish>
<RelativeBlobPath>$(RelativeBlobPath)/%(Filename)%(Extension)</RelativeBlobPath>
</ItemsToPublish>
</ItemGroup>
<Message Text="Uploading files to '$(AzureAccountName)' blob storage at $(ContainerName)/$(RelativeBlobPath)" />
<UploadToAzure AccountName="$(AzureAccountName)"
AccountKey="$(AzureAccessToken)"
ContainerName="$(ContainerName)"
Items="@(ItemsToPublish)"
Overwrite="true" />
</Target>
<Target Name="CreatePrebuiltsTarball"
AfterTargets="Build"
DependsOnTargets="
CheckIfPrebuiltsExistToPack;
CreatePrebuiltsTarballIfPrebuiltsExist"/>
CreatePrebuiltsTarballIfPrebuiltsExist;
ErrorOnPrebuilts"/>
<Target Name="CheckIfPrebuiltsExistToPack">
<!-- Directory existence doesn't mean there are files inside. Use a pattern to find files. -->
@ -215,4 +191,9 @@
<Message Text="Tarball '$(TarballFilePath)' was successfully created from '$(TarballWorkingDir)'" Importance="High" />
</Target>
<Target Name="ErrorOnPrebuilts"
Condition="'@(PrebuiltFile->Count())' != '0' AND '$(SkipErrorOnPrebuilts)' != 'true'">
<Error Text="@(PrebuiltFile->Count()) Prebuilts Exist" />
</Target>
</Project>

View file

@ -1,61 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Build.Utilities;
using System.Text.RegularExpressions;
namespace Microsoft.DotNet.Build.Tasks
{
public abstract class AzureConnectionStringBuildTask : Task
{
/// <summary>
/// Azure Storage account connection string. Supersedes Account Key / Name.
/// Will cause errors if both are set.
/// </summary>
public string ConnectionString { get; set; }
/// <summary>
/// The Azure account key used when creating the connection string.
/// When we fully deprecate these, can just make them get; only.
/// </summary>
public string AccountKey { get; set; }
/// <summary>
/// The Azure account name used when creating the connection string.
/// When we fully deprecate these, can just make them get; only.
/// </summary>
public string AccountName { get; set; }
public void ParseConnectionString()
{
if (!string.IsNullOrEmpty(ConnectionString))
{
if (!(string.IsNullOrEmpty(AccountKey) && string.IsNullOrEmpty(AccountName)))
{
Log.LogError("If the ConnectionString property is set, you must not provide AccountKey / AccountName. These values will be deprecated in the future.");
}
else
{
Regex storageConnectionStringRegex = new Regex("AccountName=(?<name>.+?);AccountKey=(?<key>.+?);");
MatchCollection matches = storageConnectionStringRegex.Matches(ConnectionString);
if (matches.Count > 0)
{
// When we deprecate this format, we'll want to demote these to private
AccountName = matches[0].Groups["name"].Value;
AccountKey = matches[0].Groups["key"].Value;
}
else
{
Log.LogError("Error parsing connection string. Please review its value.");
}
}
}
else if (string.IsNullOrEmpty(AccountKey) || string.IsNullOrEmpty(AccountName))
{
Log.LogError("Error, must provide either ConnectionString or AccountName with AccountKey");
}
}
}
}

View file

@ -1,461 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Microsoft.DotNet.Build.Tasks
{
public static class AzureHelper
{
/// <summary>
/// The storage api version.
/// </summary>
public static readonly string StorageApiVersion = "2015-04-05";
public const string DateHeaderString = "x-ms-date";
public const string VersionHeaderString = "x-ms-version";
public const string AuthorizationHeaderString = "Authorization";
public const string CacheControlString = "x-ms-blob-cache-control";
public const string ContentTypeString = "x-ms-blob-content-type";
public enum SasAccessType
{
Read,
Write,
};
public static string AuthorizationHeader(
string storageAccount,
string storageKey,
string method,
DateTime now,
HttpRequestMessage request,
string ifMatch = "",
string contentMD5 = "",
string size = "",
string contentType = "")
{
string stringToSign = string.Format(
"{0}\n\n\n{1}\n{5}\n{6}\n\n\n{2}\n\n\n\n{3}{4}",
method,
(size == string.Empty) ? string.Empty : size,
ifMatch,
GetCanonicalizedHeaders(request),
GetCanonicalizedResource(request.RequestUri, storageAccount),
contentMD5,
contentType);
byte[] signatureBytes = Encoding.UTF8.GetBytes(stringToSign);
string authorizationHeader;
using (HMACSHA256 hmacsha256 = new HMACSHA256(Convert.FromBase64String(storageKey)))
{
authorizationHeader = "SharedKey " + storageAccount + ":"
+ Convert.ToBase64String(hmacsha256.ComputeHash(signatureBytes));
}
return authorizationHeader;
}
public static string CreateContainerSasToken(
string accountName,
string containerName,
string key,
SasAccessType accessType,
int validityTimeInDays)
{
string signedPermissions = string.Empty;
switch (accessType)
{
case SasAccessType.Read:
signedPermissions = "r";
break;
case SasAccessType.Write:
signedPermissions = "wdl";
break;
default:
throw new ArgumentOutOfRangeException(nameof(accessType), accessType, "Unrecognized value");
}
string signedStart = DateTime.UtcNow.ToString("O");
string signedExpiry = DateTime.UtcNow.AddDays(validityTimeInDays).ToString("O");
string canonicalizedResource = "/blob/" + accountName + "/" + containerName;
string signedIdentifier = string.Empty;
string signedVersion = StorageApiVersion;
string stringToSign = ConstructServiceStringToSign(
signedPermissions,
signedVersion,
signedExpiry,
canonicalizedResource,
signedIdentifier,
signedStart);
byte[] signatureBytes = Encoding.UTF8.GetBytes(stringToSign);
string signature;
using (HMACSHA256 hmacSha256 = new HMACSHA256(Convert.FromBase64String(key)))
{
signature = Convert.ToBase64String(hmacSha256.ComputeHash(signatureBytes));
}
string sasToken = string.Format(
"?sv={0}&sr={1}&sig={2}&st={3}&se={4}&sp={5}",
WebUtility.UrlEncode(signedVersion),
WebUtility.UrlEncode("c"),
WebUtility.UrlEncode(signature),
WebUtility.UrlEncode(signedStart),
WebUtility.UrlEncode(signedExpiry),
WebUtility.UrlEncode(signedPermissions));
return sasToken;
}
public static string GetCanonicalizedHeaders(HttpRequestMessage request)
{
StringBuilder sb = new StringBuilder();
List<string> headerNameList = (from headerName in request.Headers
where
headerName.Key.ToLowerInvariant()
.StartsWith("x-ms-", StringComparison.Ordinal)
select headerName.Key.ToLowerInvariant()).ToList();
headerNameList.Sort();
foreach (string headerName in headerNameList)
{
StringBuilder builder = new StringBuilder(headerName);
string separator = ":";
foreach (string headerValue in GetHeaderValues(request.Headers, headerName))
{
string trimmedValue = headerValue.Replace("\r\n", string.Empty);
builder.Append(separator);
builder.Append(trimmedValue);
separator = ",";
}
sb.Append(builder);
sb.Append("\n");
}
return sb.ToString();
}
public static string GetCanonicalizedResource(Uri address, string accountName)
{
StringBuilder str = new StringBuilder();
StringBuilder builder = new StringBuilder("/");
builder.Append(accountName);
builder.Append(address.AbsolutePath);
str.Append(builder);
Dictionary<string, HashSet<string>> queryKeyValues = ExtractQueryKeyValues(address);
Dictionary<string, HashSet<string>> dictionary = GetCommaSeparatedList(queryKeyValues);
foreach (KeyValuePair<string, HashSet<string>> pair in dictionary.OrderBy(p => p.Key))
{
StringBuilder stringBuilder = new StringBuilder(string.Empty);
stringBuilder.Append(pair.Key + ":");
string commaList = string.Join(",", pair.Value);
stringBuilder.Append(commaList);
str.Append("\n");
str.Append(stringBuilder);
}
return str.ToString();
}
public static List<string> GetHeaderValues(HttpRequestHeaders headers, string headerName)
{
List<string> list = new List<string>();
IEnumerable<string> values;
headers.TryGetValues(headerName, out values);
if (values != null)
{
list.Add((values.FirstOrDefault() ?? string.Empty).TrimStart(null));
}
return list;
}
private static bool IsWithinRetryRange(HttpStatusCode statusCode)
{
// Retry on http client and server error codes (4xx - 5xx) as well as redirect
var rawStatus = (int)statusCode;
if (rawStatus == 302)
return true;
else if (rawStatus >= 400 && rawStatus <= 599)
return true;
else
return false;
}
public static async Task<HttpResponseMessage> RequestWithRetry(TaskLoggingHelper loggingHelper, HttpClient client,
Func<HttpRequestMessage> createRequest, Func<HttpResponseMessage, bool> validationCallback = null, int retryCount = 5,
int retryDelaySeconds = 5)
{
if (loggingHelper == null)
throw new ArgumentNullException(nameof(loggingHelper));
if (client == null)
throw new ArgumentNullException(nameof(client));
if (createRequest == null)
throw new ArgumentNullException(nameof(createRequest));
if (retryCount < 1)
throw new ArgumentException(nameof(retryCount));
if (retryDelaySeconds < 1)
throw new ArgumentException(nameof(retryDelaySeconds));
int retries = 0;
HttpResponseMessage response = null;
// add a bit of randomness to the retry delay
var rng = new Random();
while (retries < retryCount)
{
if (retries > 0)
{
if (response != null)
{
response.Dispose();
response = null;
}
int delay = retryDelaySeconds * retries * rng.Next(1, 5);
loggingHelper.LogMessage(MessageImportance.Low, "Waiting {0} seconds before retry", delay);
await System.Threading.Tasks.Task.Delay(delay * 1000);
}
try
{
using (var request = createRequest())
response = await client.SendAsync(request);
}
catch (Exception e)
{
loggingHelper.LogWarningFromException(e, true);
// if this is the final iteration let the exception bubble up
if (retries + 1 == retryCount)
throw;
}
// response can be null if we fail to send the request
if (response != null)
{
if (validationCallback == null)
{
// check if the response code is within the range of failures
if (!IsWithinRetryRange(response.StatusCode))
{
return response;
}
}
else
{
bool isSuccess = validationCallback(response);
if (!isSuccess)
{
loggingHelper.LogMessage("Validation callback returned retry for status code {0}", response.StatusCode);
}
else
{
loggingHelper.LogMessage("Validation callback returned success for status code {0}", response.StatusCode);
return response;
}
}
}
++retries;
}
// retry count exceeded
loggingHelper.LogWarning("Retry count {0} exceeded", retryCount);
// set some default values in case response is null
var statusCode = "None";
var contentStr = "Null";
if (response != null)
{
statusCode = response.StatusCode.ToString();
contentStr = await response.Content.ReadAsStringAsync();
response.Dispose();
}
throw new HttpRequestException($"Request {createRequest().RequestUri} failed with status {statusCode}. Response : {contentStr}");
}
private static string ConstructServiceStringToSign(
string signedPermissions,
string signedVersion,
string signedExpiry,
string canonicalizedResource,
string signedIdentifier,
string signedStart,
string signedIP = "",
string signedProtocol = "",
string rscc = "",
string rscd = "",
string rsce = "",
string rscl = "",
string rsct = "")
{
// constructing string to sign based on spec in https://msdn.microsoft.com/en-us/library/azure/dn140255.aspx
var stringToSign = string.Join(
"\n",
signedPermissions,
signedStart,
signedExpiry,
canonicalizedResource,
signedIdentifier,
signedIP,
signedProtocol,
signedVersion,
rscc,
rscd,
rsce,
rscl,
rsct);
return stringToSign;
}
private static Dictionary<string, HashSet<string>> ExtractQueryKeyValues(Uri address)
{
Dictionary<string, HashSet<string>> values = new Dictionary<string, HashSet<string>>();
//Decode this to allow the regex to pull out the correct groups for signing
address = new Uri(WebUtility.UrlDecode(address.ToString()));
Regex newreg = new Regex(@"(?:\?|&)([^=]+)=([^&]+)");
MatchCollection matches = newreg.Matches(address.Query);
foreach (Match match in matches)
{
string key, value;
if (!string.IsNullOrEmpty(match.Groups[1].Value))
{
key = match.Groups[1].Value;
value = match.Groups[2].Value;
}
else
{
key = match.Groups[3].Value;
value = match.Groups[4].Value;
}
HashSet<string> setOfValues;
if (values.TryGetValue(key, out setOfValues))
{
setOfValues.Add(value);
}
else
{
HashSet<string> newSet = new HashSet<string> { value };
values.Add(key, newSet);
}
}
return values;
}
private static Dictionary<string, HashSet<string>> GetCommaSeparatedList(
Dictionary<string, HashSet<string>> queryKeyValues)
{
Dictionary<string, HashSet<string>> dictionary = new Dictionary<string, HashSet<string>>();
foreach (string queryKeys in queryKeyValues.Keys)
{
HashSet<string> setOfValues;
queryKeyValues.TryGetValue(queryKeys, out setOfValues);
List<string> list = new List<string>();
list.AddRange(setOfValues);
list.Sort();
string commaSeparatedValues = string.Join(",", list);
string key = queryKeys.ToLowerInvariant();
HashSet<string> setOfValues2;
if (dictionary.TryGetValue(key, out setOfValues2))
{
setOfValues2.Add(commaSeparatedValues);
}
else
{
HashSet<string> newSet = new HashSet<string> { commaSeparatedValues };
dictionary.Add(key, newSet);
}
}
return dictionary;
}
public static Func<HttpRequestMessage> RequestMessage(string method, string url, string accountName, string accountKey, List<Tuple<string, string>> additionalHeaders = null, string body = null)
{
Func<HttpRequestMessage> requestFunc = () =>
{
HttpMethod httpMethod = HttpMethod.Get;
if (method == "PUT")
{
httpMethod = HttpMethod.Put;
}
else if (method == "DELETE")
{
httpMethod = HttpMethod.Delete;
}
DateTime dateTime = DateTime.UtcNow;
var request = new HttpRequestMessage(httpMethod, url);
request.Headers.Add(AzureHelper.DateHeaderString, dateTime.ToString("R", CultureInfo.InvariantCulture));
request.Headers.Add(AzureHelper.VersionHeaderString, AzureHelper.StorageApiVersion);
if (additionalHeaders != null)
{
foreach (Tuple<string, string> additionalHeader in additionalHeaders)
{
request.Headers.Add(additionalHeader.Item1, additionalHeader.Item2);
}
}
if (body != null)
{
request.Content = new StringContent(body);
request.Headers.Add(AzureHelper.AuthorizationHeaderString, AzureHelper.AuthorizationHeader(
accountName,
accountKey,
method,
dateTime,
request,
"",
"",
request.Content.Headers.ContentLength.ToString(),
request.Content.Headers.ContentType.ToString()));
}
else
{
request.Headers.Add(AzureHelper.AuthorizationHeaderString, AzureHelper.AuthorizationHeader(
accountName,
accountKey,
method,
dateTime,
request));
}
return request;
};
return requestFunc;
}
public static string GetRootRestUrl(string accountName)
{
return $"https://{accountName}.blob.core.windows.net";
}
public static string GetContainerRestUrl(string accountName, string containerName)
{
return $"{GetRootRestUrl(accountName)}/{containerName}";
}
public static string GetBlobRestUrl(string accountName, string containerName, string blob)
{
return $"{GetContainerRestUrl(accountName, containerName)}/{blob}";
}
}
}

View file

@ -1,285 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Task = System.Threading.Tasks.Task;
namespace Microsoft.DotNet.Build.Tasks
{
public class UploadClient
{
private TaskLoggingHelper log;
public UploadClient(TaskLoggingHelper loggingHelper)
{
log = loggingHelper;
}
public string EncodeBlockIds(int numberOfBlocks, int lengthOfId)
{
string numberOfBlocksString = numberOfBlocks.ToString("D" + lengthOfId);
if (Encoding.UTF8.GetByteCount(numberOfBlocksString) <= 64)
{
byte[] bytes = Encoding.UTF8.GetBytes(numberOfBlocksString);
return Convert.ToBase64String(bytes);
}
else
{
throw new Exception("Task failed - Could not encode block id.");
}
}
public async Task UploadBlockBlobAsync(
CancellationToken ct,
string AccountName,
string AccountKey,
string ContainerName,
string filePath,
string destinationBlob,
string contentType,
int uploadTimeout,
string leaseId = "")
{
string resourceUrl = AzureHelper.GetContainerRestUrl(AccountName, ContainerName);
string fileName = destinationBlob;
fileName = fileName.Replace("\\", "/");
string blobUploadUrl = resourceUrl + "/" + fileName;
int size = (int)new FileInfo(filePath).Length;
int blockSize = 4 * 1024 * 1024; //4MB max size of a block blob
int bytesLeft = size;
List<string> blockIds = new List<string>();
int numberOfBlocks = (size / blockSize) + 1;
int countForId = 0;
using (FileStream fileStreamTofilePath = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
int offset = 0;
while (bytesLeft > 0)
{
int nextBytesToRead = (bytesLeft < blockSize) ? bytesLeft : blockSize;
byte[] fileBytes = new byte[blockSize];
int read = fileStreamTofilePath.Read(fileBytes, 0, nextBytesToRead);
if (nextBytesToRead != read)
{
throw new Exception(string.Format(
"Number of bytes read ({0}) from file {1} isn't equal to the number of bytes expected ({2}) .",
read, fileName, nextBytesToRead));
}
string blockId = EncodeBlockIds(countForId, numberOfBlocks.ToString().Length);
blockIds.Add(blockId);
string blockUploadUrl = blobUploadUrl + "?comp=block&blockid=" + WebUtility.UrlEncode(blockId);
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Clear();
// In random occassions the request fails if the network is slow and it takes more than 100 seconds to upload 4MB.
client.Timeout = TimeSpan.FromMinutes(uploadTimeout);
Func<HttpRequestMessage> createRequest = () =>
{
DateTime dt = DateTime.UtcNow;
var req = new HttpRequestMessage(HttpMethod.Put, blockUploadUrl);
req.Headers.Add(
AzureHelper.DateHeaderString,
dt.ToString("R", CultureInfo.InvariantCulture));
req.Headers.Add(AzureHelper.VersionHeaderString, AzureHelper.StorageApiVersion);
if (!string.IsNullOrWhiteSpace(leaseId))
{
log.LogMessage($"Sending request: {leaseId} {blockUploadUrl}");
req.Headers.Add("x-ms-lease-id", leaseId);
}
req.Headers.Add(
AzureHelper.AuthorizationHeaderString,
AzureHelper.AuthorizationHeader(
AccountName,
AccountKey,
"PUT",
dt,
req,
string.Empty,
string.Empty,
nextBytesToRead.ToString(),
string.Empty));
Stream postStream = new MemoryStream();
postStream.Write(fileBytes, 0, nextBytesToRead);
postStream.Seek(0, SeekOrigin.Begin);
req.Content = new StreamContent(postStream);
return req;
};
log.LogMessage(MessageImportance.Low, "Sending request to upload part {0} of file {1}", countForId, fileName);
using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(log, client, createRequest))
{
log.LogMessage(
MessageImportance.Low,
"Received response to upload part {0} of file {1}: Status Code:{2} Status Desc: {3}",
countForId,
fileName,
response.StatusCode,
await response.Content.ReadAsStringAsync());
}
}
offset += read;
bytesLeft -= nextBytesToRead;
countForId += 1;
}
}
string blockListUploadUrl = blobUploadUrl + "?comp=blocklist";
using (HttpClient client = new HttpClient())
{
Func<HttpRequestMessage> createRequest = () =>
{
DateTime dt1 = DateTime.UtcNow;
var req = new HttpRequestMessage(HttpMethod.Put, blockListUploadUrl);
req.Headers.Add(AzureHelper.DateHeaderString, dt1.ToString("R", CultureInfo.InvariantCulture));
req.Headers.Add(AzureHelper.VersionHeaderString, AzureHelper.StorageApiVersion);
if (string.IsNullOrEmpty(contentType))
{
contentType = DetermineContentTypeBasedOnFileExtension(filePath);
}
if (!string.IsNullOrEmpty(contentType))
{
req.Headers.Add(AzureHelper.ContentTypeString, contentType);
}
string cacheControl = DetermineCacheControlBasedOnFileExtension(filePath);
if (!string.IsNullOrEmpty(cacheControl))
{
req.Headers.Add(AzureHelper.CacheControlString, cacheControl);
}
var body = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?><BlockList>");
foreach (object item in blockIds)
body.AppendFormat("<Latest>{0}</Latest>", item);
body.Append("</BlockList>");
byte[] bodyData = Encoding.UTF8.GetBytes(body.ToString());
if (!string.IsNullOrWhiteSpace(leaseId))
{
log.LogMessage($"Sending list request: {leaseId} {blockListUploadUrl}");
req.Headers.Add("x-ms-lease-id", leaseId);
}
req.Headers.Add(
AzureHelper.AuthorizationHeaderString,
AzureHelper.AuthorizationHeader(
AccountName,
AccountKey,
"PUT",
dt1,
req,
string.Empty,
string.Empty,
bodyData.Length.ToString(),
string.Empty));
Stream postStream = new MemoryStream();
postStream.Write(bodyData, 0, bodyData.Length);
postStream.Seek(0, SeekOrigin.Begin);
req.Content = new StreamContent(postStream);
return req;
};
using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(log, client, createRequest))
{
log.LogMessage(
MessageImportance.Low,
"Received response to combine block list for file {0}: Status Code:{1} Status Desc: {2}",
fileName,
response.StatusCode,
await response.Content.ReadAsStringAsync());
}
}
}
public async Task<bool> FileEqualsExistingBlobAsync(
string accountName,
string accountKey,
string containerName,
string filePath,
string destinationBlob,
int uploadTimeout)
{
using (var client = new HttpClient
{
Timeout = TimeSpan.FromMinutes(uploadTimeout)
})
{
log.LogMessage(
MessageImportance.Low,
$"Downloading blob {destinationBlob} to check if identical.");
string blobUrl = AzureHelper.GetBlobRestUrl(accountName, containerName, destinationBlob);
var createRequest = AzureHelper.RequestMessage("GET", blobUrl, accountName, accountKey);
using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(
log,
client,
createRequest))
{
if (!response.IsSuccessStatusCode)
{
throw new HttpRequestException(
$"Failed to retrieve existing blob {destinationBlob}, " +
$"status code {response.StatusCode}.");
}
byte[] existingBytes = await response.Content.ReadAsByteArrayAsync();
byte[] localBytes = File.ReadAllBytes(filePath);
bool equal = localBytes.SequenceEqual(existingBytes);
if (equal)
{
log.LogMessage(
MessageImportance.Normal,
"Item exists in blob storage, and is verified to be identical. " +
$"File: '{filePath}' Blob: '{destinationBlob}'");
}
return equal;
}
}
}
private string DetermineContentTypeBasedOnFileExtension(string filename)
{
if (Path.GetExtension(filename) == ".svg")
{
return "image/svg+xml";
}
else if (Path.GetExtension(filename) == ".version")
{
return "text/plain";
}
return string.Empty;
}
private string DetermineCacheControlBasedOnFileExtension(string filename)
{
if (Path.GetExtension(filename) == ".svg")
{
return "No-Cache";
}
return string.Empty;
}
}
}

View file

@ -1,208 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using ThreadingTask = System.Threading.Tasks.Task;
namespace Microsoft.DotNet.Build.Tasks
{
public class UploadToAzure : AzureConnectionStringBuildTask, ICancelableTask
{
private static readonly CancellationTokenSource TokenSource = new CancellationTokenSource();
private static readonly CancellationToken CancellationToken = TokenSource.Token;
/// <summary>
/// The name of the container to access. The specified name must be in the correct format, see the
/// following page for more info. https://msdn.microsoft.com/en-us/library/azure/dd135715.aspx
/// </summary>
[Required]
public string ContainerName { get; set; }
/// <summary>
/// An item group of files to upload. Each item must have metadata RelativeBlobPath
/// that specifies the path relative to ContainerName where the item will be uploaded.
/// </summary>
[Required]
public ITaskItem[] Items { get; set; }
/// <summary>
/// Indicates if the destination blob should be overwritten if it already exists. The default if false.
/// </summary>
public bool Overwrite { get; set; } = false;
/// <summary>
/// Enables idempotency when Overwrite is false.
///
/// false: (default) Attempting to upload an item that already exists fails.
///
/// true: When an item already exists, download the existing blob to check if it's
/// byte-for-byte identical to the one being uploaded. If so, pass. If not, fail.
/// </summary>
public bool PassIfExistingItemIdentical { get; set; }
/// <summary>
/// Specifies the maximum number of clients to concurrently upload blobs to azure
/// </summary>
public int MaxClients { get; set; } = 8;
public int UploadTimeoutInMinutes { get; set; } = 5;
public void Cancel()
{
TokenSource.Cancel();
}
public override bool Execute()
{
return ExecuteAsync(CancellationToken).GetAwaiter().GetResult();
}
public async Task<bool> ExecuteAsync(CancellationToken ct)
{
ParseConnectionString();
// If the connection string AND AccountKey & AccountName are provided, error out.
if (Log.HasLoggedErrors)
{
return false;
}
Log.LogMessage(
MessageImportance.Normal,
"Begin uploading blobs to Azure account {0} in container {1}.",
AccountName,
ContainerName);
if (Items.Length == 0)
{
Log.LogError("No items were provided for upload.");
return false;
}
// first check what blobs are present
string checkListUrl = $"{AzureHelper.GetContainerRestUrl(AccountName, ContainerName)}?restype=container&comp=list";
HashSet<string> blobsPresent = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
try
{
using (HttpClient client = new HttpClient())
{
var createRequest = AzureHelper.RequestMessage("GET", checkListUrl, AccountName, AccountKey);
Log.LogMessage(MessageImportance.Low, "Sending request to check whether Container blobs exist");
using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(Log, client, createRequest))
{
var doc = new XmlDocument();
doc.LoadXml(await response.Content.ReadAsStringAsync());
XmlNodeList nodes = doc.DocumentElement.GetElementsByTagName("Blob");
foreach (XmlNode node in nodes)
{
blobsPresent.Add(node["Name"].InnerText);
}
Log.LogMessage(MessageImportance.Low, "Received response to check whether Container blobs exist");
}
}
using (var clientThrottle = new SemaphoreSlim(this.MaxClients, this.MaxClients))
{
await ThreadingTask.WhenAll(Items.Select(item => UploadAsync(ct, item, blobsPresent, clientThrottle)));
}
Log.LogMessage(MessageImportance.Normal, "Upload to Azure is complete, a total of {0} items were uploaded.", Items.Length);
}
catch (Exception e)
{
Log.LogErrorFromException(e, true);
}
return !Log.HasLoggedErrors;
}
private async ThreadingTask UploadAsync(CancellationToken ct, ITaskItem item, HashSet<string> blobsPresent, SemaphoreSlim clientThrottle)
{
if (ct.IsCancellationRequested)
{
Log.LogError("Task UploadToAzure cancelled");
ct.ThrowIfCancellationRequested();
}
string relativeBlobPath = item.GetMetadata("RelativeBlobPath");
if (string.IsNullOrEmpty(relativeBlobPath))
throw new Exception(string.Format("Metadata 'RelativeBlobPath' is missing for item '{0}'.", item.ItemSpec));
if (!File.Exists(item.ItemSpec))
throw new Exception(string.Format("The file '{0}' does not exist.", item.ItemSpec));
UploadClient uploadClient = new UploadClient(Log);
if (!Overwrite && blobsPresent.Contains(relativeBlobPath))
{
if (PassIfExistingItemIdentical &&
await ItemEqualsExistingBlobAsync(item, relativeBlobPath, uploadClient, clientThrottle))
{
return;
}
throw new Exception(string.Format("The blob '{0}' already exists.", relativeBlobPath));
}
string contentType = item.GetMetadata("ContentType");
await clientThrottle.WaitAsync();
try
{
Log.LogMessage("Uploading {0} to {1}.", item.ItemSpec, ContainerName);
await
uploadClient.UploadBlockBlobAsync(
ct,
AccountName,
AccountKey,
ContainerName,
item.ItemSpec,
relativeBlobPath,
contentType,
UploadTimeoutInMinutes);
}
finally
{
clientThrottle.Release();
}
}
private async Task<bool> ItemEqualsExistingBlobAsync(
ITaskItem item,
string relativeBlobPath,
UploadClient client,
SemaphoreSlim clientThrottle)
{
await clientThrottle.WaitAsync();
try
{
return await client.FileEqualsExistingBlobAsync(
AccountName,
AccountKey,
ContainerName,
item.ItemSpec,
relativeBlobPath,
UploadTimeoutInMinutes);
}
finally
{
clientThrottle.Release();
}
}
}
}

View file

@ -628,25 +628,24 @@
DataFile="$(PackageReportDataFile)"
ProjectAssetsJsonArchiveFile="$(ProjectAssetsJsonArchiveFile)" />
<!-- Copy all restored packages to resulting prebuilt folder -->
<!-- Copy packages detected as prebuilts to the artifacts prebuilt folder -->
<ItemGroup>
<UsedPrebuiltPackageFiles Include="@(AllRestoredPackageFiles)" />
<AllowedPackageFiles Include="@(TarballPrebuiltPackageFile)" />
<AllowedPackageFiles Include="@(SourceBuiltPackageFiles)" />
<AllowedPackageFiles Include="@(ReferencePackageFiles)" />
<AllowedPackageFiles>
<LCFilename>$([System.String]::Copy(%(Filename)).ToLower())</LCFilename>
</AllowedPackageFiles>
<PrebuiltPackageFiles Include="@(AllRestoredPackageFiles)" >
<LCFilename>$([System.String]::Copy(%(Filename)).ToLower())</LCFilename>
</PrebuiltPackageFiles>
<PrebuiltPackageFiles Remove="@(AllowedPackageFiles)" MatchOnMetadata="LCFilename" />
</ItemGroup>
<Copy
SourceFiles="@(UsedPrebuiltPackageFiles)"
SourceFiles="@(PrebuiltPackageFiles)"
DestinationFolder="$(ResultingPrebuiltPackagesDir)" />
<!-- Remove packages that are known to be built -->
<ItemGroup>
<BuiltPackageFiles Include="@(TarballPrebuiltPackageFile)" />
<BuiltPackageFiles Include="@(SourceBuiltPackageFiles)" />
<BuiltPackageFiles Include="@(ReferencePackageFiles)" />
<BuiltPackageFiles>
<LCFilename>$([System.String]::Copy(%(Filename)).ToLower())</LCFilename>
</BuiltPackageFiles>
</ItemGroup>
<Delete Files="@(BuiltPackageFiles->'$(ResultingPrebuiltPackagesDir)%(LCFilename)%(Extension)')" />
<WriteLinesToFile File="$(RepoCompletedSemaphorePath)WritePrebuiltUsageData.complete" Overwrite="true" />
</Target>

View file

@ -25,7 +25,7 @@ public class OmniSharpTests : SmokeTests
public OmniSharpTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
[SkippableTheory(Config.ExcludeOmniSharpEnv, skipOnTrue: true)]
[SkippableTheory(Config.ExcludeOmniSharpEnv, skipOnTrueEnv: true, skipArchitectures: new[] { "ppc64le", "s390x" })]
[InlineData(DotNetTemplate.BlazorWasm)]
[InlineData(DotNetTemplate.ClassLib)]
[InlineData(DotNetTemplate.Console)]

View file

@ -13,7 +13,7 @@ namespace Microsoft.DotNet.SourceBuild.SmokeTests
{
public PoisonTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
[SkippableFact(Config.PoisonReportPathEnv, skipOnNullOrWhiteSpace: true)]
[SkippableFact(Config.PoisonReportPathEnv, skipOnNullOrWhiteSpaceEnv: true)]
public void VerifyUsage()
{
if (!File.Exists(Config.PoisonReportPath))

View file

@ -31,7 +31,7 @@ public class SdkContentTests : SmokeTests
/// This makes the baseline durable between releases. This does mean however, entries
/// in the baseline may appear identical if the diff is version specific.
/// </Summary>
[SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpace: true)]
[SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
public void CompareMsftToSbFileList()
{
const string msftFileListingFileName = "msftSdkFiles.txt";
@ -44,7 +44,7 @@ public class SdkContentTests : SmokeTests
BaselineHelper.CompareBaselineContents("MsftToSbSdkFiles.diff", diff, OutputHelper, Config.WarnOnSdkContentDiffs);
}
[SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpace: true)]
[SkippableFact(new[] { Config.MsftSdkTarballPathEnv, Config.SdkTarballPathEnv }, skipOnNullOrWhiteSpaceEnv: true)]
public void CompareMsftToSbAssemblyVersions()
{
Assert.NotNull(Config.MsftSdkTarballPath);

View file

@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Linq;
using Xunit;
namespace Microsoft.DotNet.SourceBuild.SmokeTests;
@ -12,28 +13,36 @@ namespace Microsoft.DotNet.SourceBuild.SmokeTests;
/// </summary>
internal class SkippableFactAttribute : FactAttribute
{
public SkippableFactAttribute(string envName, bool skipOnNullOrWhiteSpace = false, bool skipOnTrue = false) =>
CheckEnvs(skipOnNullOrWhiteSpace, skipOnTrue, (skip) => Skip = skip, envName);
public SkippableFactAttribute(string envName, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, string[] skipArchitectures = null) =>
EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipArchitectures, (skip) => Skip = skip, envName);
public SkippableFactAttribute(string[] envNames, bool skipOnNullOrWhiteSpace = false, bool skipOnTrue = false) =>
CheckEnvs(skipOnNullOrWhiteSpace, skipOnTrue, (skip) => Skip = skip, envNames);
public SkippableFactAttribute(string[] envNames, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, string[] skipArchitectures = null) =>
EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipArchitectures, (skip) => Skip = skip, envNames);
public static void CheckEnvs(bool skipOnNullOrWhiteSpace, bool skipOnTrue, Action<string> setSkip, params string[] envNames)
public static void EvaluateSkips(bool skipOnNullOrWhiteSpaceEnv, bool skipOnTrueEnv, string[] skipArchitectures, Action<string> setSkip, params string[] envNames)
{
foreach (string envName in envNames)
{
string? envValue = Environment.GetEnvironmentVariable(envName);
if (skipOnNullOrWhiteSpace && string.IsNullOrWhiteSpace(envValue))
if (skipOnNullOrWhiteSpaceEnv && string.IsNullOrWhiteSpace(envValue))
{
setSkip($"Skipping because `{envName}` is null or whitespace");
break;
}
else if (skipOnTrue && bool.TryParse(envValue, out bool boolValue) && boolValue)
else if (skipOnTrueEnv && bool.TryParse(envValue, out bool boolValue) && boolValue)
{
setSkip($"Skipping because `{envName}` is set to True");
break;
}
}
if (skipArchitectures != null) {
string? arch = Config.TargetArchitecture;
if (skipArchitectures.Contains(arch))
{
setSkip($"Skipping because arch is `{arch}`");
}
}
}
}

View file

@ -11,9 +11,9 @@ namespace Microsoft.DotNet.SourceBuild.SmokeTests;
/// </summary>
internal class SkippableTheoryAttribute : TheoryAttribute
{
public SkippableTheoryAttribute(string envName, bool skipOnNullOrWhiteSpace = false, bool skipOnTrue = false) =>
SkippableFactAttribute.CheckEnvs(skipOnNullOrWhiteSpace, skipOnTrue, (skip) => Skip = skip, envName);
public SkippableTheoryAttribute(string envName, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, string[] skipArchitectures = null) =>
SkippableFactAttribute.EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipArchitectures, (skip) => Skip = skip, envName);
public SkippableTheoryAttribute(string[] envNames, bool skipOnNullOrWhiteSpace = false, bool skipOnTrue = false) =>
SkippableFactAttribute.CheckEnvs(skipOnNullOrWhiteSpace, skipOnTrue, (skip) => Skip = skip, envNames);
public SkippableTheoryAttribute(string[] envNames, bool skipOnNullOrWhiteSpaceEnv = false, bool skipOnTrueEnv = false, string[] skipArchitectures = null) =>
SkippableFactAttribute.EvaluateSkips(skipOnNullOrWhiteSpaceEnv, skipOnTrueEnv, skipArchitectures, (skip) => Skip = skip, envNames);
}

View file

@ -134,6 +134,10 @@
"name": "runtime",
"defaultRemote": "https://github.com/dotnet/runtime"
},
{
"name": "scenario-tests",
"defaultRemote": "https://github.com/dotnet/scenario-tests"
},
{
"name": "sdk",
"defaultRemote": "https://github.com/dotnet/sdk"

View file

@ -368,27 +368,32 @@
with shared metadata DownloadDestination and potentially the encoded key token for the private url.
Then use task batching to send batched itemgroups to the DownloadFile task that have the same
DownloadDestination. -->
<UrisToDownload Include="%(ComponentToDownload.BaseUrl)/%(ComponentToDownload.DownloadFileName)" Condition="'%(ComponentToDownload.ShouldDownload)' == 'true'">
<ShouldDownload>%(ComponentToDownload.ShouldDownload)</ShouldDownload>
<DownloadDestination>%(ComponentToDownload.DownloadDestination)</DownloadDestination>
</UrisToDownload>
<UrisToDownload Include="$([System.String]::Copy('%(ComponentToDownload.BaseUrl)').Replace($(PublicBaseURL), 'https://dotnetbuilds.blob.core.windows.net/public/'))/%(ComponentToDownload.DownloadFileName)" Condition="'%(ComponentToDownload.ShouldDownload)' == 'true'">
</ItemGroup>
<!-- If building in product source build mode, there is no need to attempt the external URIs. These are not desired,
and won't work anyway because the source build file URI doesn't use the same structure as the storage accounts.
For example, the dotnetbuilds uri for 'file:///vmr/dotnet2/artifacts/obj/x64/Release/blob-feed/assets//aspnetcore_base_runtime.version'
would end up 'https://dotnetbuilds.blob.core.windows.net/public//dotnet-runtime-8.0.0-rc.1.23381.3-centos.8-x64.tar.gz'. This is
missing the runtime version number directory. -->
<ItemGroup Condition="'$(DotNetBuildFromSourceFlavor)' != 'Product'">
<UrisToDownload Include="$([System.String]::Copy('%(ComponentToDownload.BaseUrl)').Replace($(PublicBaseURL), 'https://dotnetbuilds.blob.core.windows.net/public/'))/%(ComponentToDownload.DownloadFileName)"
Condition="'%(ComponentToDownload.ShouldDownload)' == 'true'">
<ShouldDownload>%(ComponentToDownload.ShouldDownload)</ShouldDownload>
<DownloadDestination>%(ComponentToDownload.DownloadDestination)</DownloadDestination>
</UrisToDownload>
<UrisToDownload Include="%(ComponentToDownload.PrivateBaseUrl)/%(ComponentToDownload.DownloadFileName)" Condition="'%(ComponentToDownload.ShouldDownload)' == 'true' and '$(DotNetRuntimeSourceFeedKey)' != ''">
<UrisToDownload Include="%(ComponentToDownload.PrivateBaseUrl)/%(ComponentToDownload.DownloadFileName)"
Condition="'%(ComponentToDownload.ShouldDownload)' == 'true' and '$(DotNetRuntimeSourceFeedKey)' != ''">
<ShouldDownload>%(ComponentToDownload.ShouldDownload)</ShouldDownload>
<DownloadDestination>%(ComponentToDownload.DownloadDestination)</DownloadDestination>
<token>$(DotNetRuntimeSourceFeedKey)</token>
</UrisToDownload>
<UrisToDownload Include="$([System.String]::Copy('%(ComponentToDownload.PrivateBaseUrl)').Replace($(InternalBaseURL), 'https://dotnetbuilds.blob.core.windows.net/internal/'))/%(ComponentToDownload.DownloadFileName)" Condition="'%(ComponentToDownload.ShouldDownload)' == 'true' and '$(DotNetRuntimeSourceFeedKey)' != ''">
<ShouldDownload>%(ComponentToDownload.ShouldDownload)</ShouldDownload>
<DownloadDestination>%(ComponentToDownload.DownloadDestination)</DownloadDestination>
<token>$(dotnetbuilds-internal-container-read-token-base64)</token>
</UrisToDownload>
</ItemGroup>
<DownloadFile Condition=" '@(UrisToDownload)' != '' and %(ShouldDownload)"
Uris="@(UrisToDownload)"
DestinationPath="%(DownloadDestination)" />

View file

@ -7,11 +7,11 @@ open TableGenerator.Table
let inputBranches =
[ { GitBranchName = "main"
DisplayName = "main<br>(8.0.x&nbsp;Runtime)"
DisplayName = "main<br>(9.0.x&nbsp;Runtime)"
AkaMsChannel = Some("9.0.1xx/daily") }
{ GitBranchName = "release/8.0.1xx"
DisplayName = "8.0.1xx-rc2<br>(8.0-rc2&nbsp;Runtime)"
AkaMsChannel = Some("8.0.1xx/daily") }
{ GitBranchName = "release/8.0.1xx-preview7"
DisplayName = "8.0.1xx-preview7<br>(8.0-preview7&nbsp;Runtime)"
AkaMsChannel = Some("8.0.1xx-preview7/daily") }
{ GitBranchName = "release/7.0.4xx"
DisplayName = "Release/7.0.4xx<br>(7.0.x&nbsp;Runtime)"
AkaMsChannel = Some("7.0.4xx/daily") }]