diff --git a/README.md b/README.md
index 444116e48..21a245c38 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,7 @@ With development builds, internal NuGet feeds are necessary for some scenarios (
```
-Please do not directly edit the table below. Use https://github.com/wli3/sdk-readme-table-generator to help you generate it. And make pull request back to the table generator repo.
+Please do not directly edit the table below. Use https://github.com/dotnet/installer/tree/master/tools/sdk-readme-table-generator to help you generate it. Make sure to run the table generator test and make any changes to the generator along with your changes to the table.
| Platform | Master
(6.0.x Runtime) | Release/5.0.2XX
(5.0 Runtime) | 5.0.100 RTM
(5.0 Runtime) | Release/3.1.4XX
(3.1.x Runtime) | Release/3.1.1XX
(3.1.x Runtime) |
| :--------- | :----------: | :----------: | :----------: | :----------: | :----------: |
diff --git a/tools/sdk-readme-table-generator/README.md b/tools/sdk-readme-table-generator/README.md
new file mode 100644
index 000000000..28f53a88d
Binary files /dev/null and b/tools/sdk-readme-table-generator/README.md differ
diff --git a/tools/sdk-readme-table-generator/TableGenerator.Tests/DomainTests.fs b/tools/sdk-readme-table-generator/TableGenerator.Tests/DomainTests.fs
new file mode 100644
index 000000000..fe2981fa8
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator.Tests/DomainTests.fs
@@ -0,0 +1,563 @@
+module TableGenerator.Tests.DomainTests
+
+open TableGenerator.Shared
+open TableGenerator.Reference
+open TableGenerator.Table
+open TableGenerator.App
+
+open FsUnit
+open Xunit
+open System
+
+[]
+let ``it can Shorten master branch Name``() =
+ let branch =
+ { GitBranchName = "master"
+ DisplayName = "Master
(5.0.x Runtime)"
+ AkaMsChannel = Some("net5/dev") }
+ branchNameShorten branch |> should equal "master"
+
+[]
+let ``it can Shorten releae branch Name``() =
+ let branch =
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None}
+ branchNameShorten branch |> should equal "3.1.1XX"
+
+[]
+let ``it can get major and minor version of a branch``() =
+ let branch =
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None}
+ getMajorMinor branch
+ |> should equal
+ (MajorMinor
+ ({ Major = 3
+ Minor = 1
+ Release = ""}))
+
+[]
+let ``it can get major and minor version of a preview branch``() =
+ let branch =
+ { GitBranchName = "release/5.0.1xx-preview2"
+ DisplayName = "5.0.100 Preview 2
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/preview2") }
+ getMajorMinor branch
+ |> should equal
+ (MajorMinor
+ ({ Major = 5
+ Minor = 0
+ Release = "preview2"}))
+
+[]
+let ``it can get master version of a master branch``() =
+ let branch =
+ { GitBranchName = "master"
+ DisplayName = "Master
(5.0.x Runtime)"
+ AkaMsChannel = None}
+ getMajorMinor branch |> should equal Master
+
+[]
+let ``it can get bad branch version``() =
+ let branch =
+ { GitBranchName = "badbranch"
+ DisplayName = ""
+ AkaMsChannel = None}
+ getMajorMinor branch |> should equal NoVersion
+
+[]
+let ``it can format winx64Reference``() =
+ let branch =
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None}
+ (winX64ReferenceTemplate branch).Value
+ |> should equal
+ """[win-x64-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/win_x64_Release_version_badge.svg
+[win-x64-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[win-x64-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.exe
+[win-x64-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.exe.sha
+[win-x64-zip-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.zip
+[win-x64-zip-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.zip.sha"""
+
+[]
+let ``it can format ReferenceWithAkaMslink``() =
+ let branch =
+ { GitBranchName = "release/5.0.1xx-preview2"
+ DisplayName = "5.0.100 Preview 2
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/preview2") }
+
+ (formatTemplate "win-x64" referenceTemplate branch).Value
+ |> should equal
+ """[win-x64-badge-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/win_x64_Release_version_badge.svg
+[win-x64-version-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/productCommit-win-x64.txt
+[win-x64-installer-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/dotnet-sdk-win-x64.exe
+[win-x64-installer-checksum-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/dotnet-sdk-win-x64.exe.sha
+[win-x64-zip-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/dotnet-sdk-win-x64.zip
+[win-x64-zip-checksum-5.0.1XX-preview2]: https://aka.ms/dotnet/net5/preview2/Sdk/dotnet-sdk-win-x64.zip.sha"""
+
+
+let branches =
+ [ { GitBranchName = "master"
+ DisplayName = "Master
(5.0.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/3.0.1xx"
+ DisplayName = "Release/3.0.1xx
(3.0.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/2.2.2xx"
+ DisplayName = "Release/2.2.2XX
(2.2.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/2.2.1xx"
+ DisplayName = "Release/2.2.1XX
(2.2.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/2.1.6xx"
+ DisplayName = "Release/2.1.6XX
(2.1.x Runtime)"
+ AkaMsChannel = None}
+ { GitBranchName = "release/2.1.5xx"
+ DisplayName = "Release/2.1.5XX
(2.1.x Runtime)"
+ AkaMsChannel = None} ]
+
+[]
+let ``it can generate WindowsX64Row``() =
+ windowsX64Row branches
+ |> should equal
+ "| **Windows x64** | [![][win-x64-badge-master]][win-x64-version-master]
[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]
[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-3.1.1XX]][win-x64-version-3.1.1XX]
[Installer][win-x64-installer-3.1.1XX] - [Checksum][win-x64-installer-checksum-3.1.1XX]
[zip][win-x64-zip-3.1.1XX] - [Checksum][win-x64-zip-checksum-3.1.1XX] | [![][win-x64-badge-3.0.1XX]][win-x64-version-3.0.1XX]
[Installer][win-x64-installer-3.0.1XX] - [Checksum][win-x64-installer-checksum-3.0.1XX]
[zip][win-x64-zip-3.0.1XX] - [Checksum][win-x64-zip-checksum-3.0.1XX] | [![][win-x64-badge-2.2.2XX]][win-x64-version-2.2.2XX]
[Installer][win-x64-installer-2.2.2XX] - [Checksum][win-x64-installer-checksum-2.2.2XX]
[zip][win-x64-zip-2.2.2XX] - [Checksum][win-x64-zip-checksum-2.2.2XX] | [![][win-x64-badge-2.2.1XX]][win-x64-version-2.2.1XX]
[Installer][win-x64-installer-2.2.1XX] - [Checksum][win-x64-installer-checksum-2.2.1XX]
[zip][win-x64-zip-2.2.1XX] - [Checksum][win-x64-zip-checksum-2.2.1XX] | [![][win-x64-badge-2.1.6XX]][win-x64-version-2.1.6XX]
[Installer][win-x64-installer-2.1.6XX] - [Checksum][win-x64-installer-checksum-2.1.6XX]
[zip][win-x64-zip-2.1.6XX] - [Checksum][win-x64-zip-checksum-2.1.6XX] | [![][win-x64-badge-2.1.5XX]][win-x64-version-2.1.5XX]
[Installer][win-x64-installer-2.1.5XX] - [Checksum][win-x64-installer-checksum-2.1.5XX]
[zip][win-x64-zip-2.1.5XX] - [Checksum][win-x64-zip-checksum-2.1.5XX] |"
+
+[]
+let ``it can generate OsxX64Row``() =
+ osxX64Row branches
+ |> should equal
+ "| **macOS x64** | [![][osx-x64-badge-master]][osx-x64-version-master]
[Installer][osx-x64-installer-master] - [Checksum][osx-x64-installer-checksum-master]
[tar.gz][osx-x64-targz-master] - [Checksum][osx-x64-targz-checksum-master] | [![][osx-x64-badge-3.1.1XX]][osx-x64-version-3.1.1XX]
[Installer][osx-x64-installer-3.1.1XX] - [Checksum][osx-x64-installer-checksum-3.1.1XX]
[tar.gz][osx-x64-targz-3.1.1XX] - [Checksum][osx-x64-targz-checksum-3.1.1XX] | [![][osx-x64-badge-3.0.1XX]][osx-x64-version-3.0.1XX]
[Installer][osx-x64-installer-3.0.1XX] - [Checksum][osx-x64-installer-checksum-3.0.1XX]
[tar.gz][osx-x64-targz-3.0.1XX] - [Checksum][osx-x64-targz-checksum-3.0.1XX] | [![][osx-x64-badge-2.2.2XX]][osx-x64-version-2.2.2XX]
[Installer][osx-x64-installer-2.2.2XX] - [Checksum][osx-x64-installer-checksum-2.2.2XX]
[tar.gz][osx-x64-targz-2.2.2XX] - [Checksum][osx-x64-targz-checksum-2.2.2XX] | [![][osx-x64-badge-2.2.1XX]][osx-x64-version-2.2.1XX]
[Installer][osx-x64-installer-2.2.1XX] - [Checksum][osx-x64-installer-checksum-2.2.1XX]
[tar.gz][osx-x64-targz-2.2.1XX] - [Checksum][osx-x64-targz-checksum-2.2.1XX] | [![][osx-x64-badge-2.1.6XX]][osx-x64-version-2.1.6XX]
[Installer][osx-x64-installer-2.1.6XX] - [Checksum][osx-x64-installer-checksum-2.1.6XX]
[tar.gz][osx-x64-targz-2.1.6XX] - [Checksum][osx-x64-targz-checksum-2.1.6XX] | [![][osx-x64-badge-2.1.5XX]][osx-x64-version-2.1.5XX]
[Installer][osx-x64-installer-2.1.5XX] - [Checksum][osx-x64-installer-checksum-2.1.5XX]
[tar.gz][osx-x64-targz-2.1.5XX] - [Checksum][osx-x64-targz-checksum-2.1.5XX] |"
+
+[]
+let ``it can generate linuxArmRow``() =
+ linuxArmRow branches
+ |> should equal
+ "| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]
[tar.gz][linux-arm-targz-master] - [Checksum][linux-arm-targz-checksum-master] | [![][linux-arm-badge-3.1.1XX]][linux-arm-version-3.1.1XX]
[tar.gz][linux-arm-targz-3.1.1XX] - [Checksum][linux-arm-targz-checksum-3.1.1XX] | [![][linux-arm-badge-3.0.1XX]][linux-arm-version-3.0.1XX]
[tar.gz][linux-arm-targz-3.0.1XX] - [Checksum][linux-arm-targz-checksum-3.0.1XX] | [![][linux-arm-badge-2.2.2XX]][linux-arm-version-2.2.2XX]
[tar.gz][linux-arm-targz-2.2.2XX] - [Checksum][linux-arm-targz-checksum-2.2.2XX] | [![][linux-arm-badge-2.2.1XX]][linux-arm-version-2.2.1XX]
[tar.gz][linux-arm-targz-2.2.1XX] - [Checksum][linux-arm-targz-checksum-2.2.1XX] | [![][linux-arm-badge-2.1.6XX]][linux-arm-version-2.1.6XX]
[tar.gz][linux-arm-targz-2.1.6XX] - [Checksum][linux-arm-targz-checksum-2.1.6XX] | [![][linux-arm-badge-2.1.5XX]][linux-arm-version-2.1.5XX]
[tar.gz][linux-arm-targz-2.1.5XX] - [Checksum][linux-arm-targz-checksum-2.1.5XX] |"
+
+[]
+let ``it can generate windowsArm``() =
+ windowsArmRow branches
+ |> should equal
+ "| **Windows arm** | **N/A** | [![][win-arm-badge-3.1.1XX]][win-arm-version-3.1.1XX]
[zip][win-arm-zip-3.1.1XX] - [Checksum][win-arm-zip-checksum-3.1.1XX] | [![][win-arm-badge-3.0.1XX]][win-arm-version-3.0.1XX]
[zip][win-arm-zip-3.0.1XX] - [Checksum][win-arm-zip-checksum-3.0.1XX] | [![][win-arm-badge-2.2.2XX]][win-arm-version-2.2.2XX]
[zip][win-arm-zip-2.2.2XX] - [Checksum][win-arm-zip-checksum-2.2.2XX] | [![][win-arm-badge-2.2.1XX]][win-arm-version-2.2.1XX]
[zip][win-arm-zip-2.2.1XX] - [Checksum][win-arm-zip-checksum-2.2.1XX] | [![][win-arm-badge-2.1.6XX]][win-arm-version-2.1.6XX]
[zip][win-arm-zip-2.1.6XX] - [Checksum][win-arm-zip-checksum-2.1.6XX] | [![][win-arm-badge-2.1.5XX]][win-arm-version-2.1.5XX]
[zip][win-arm-zip-2.1.5XX] - [Checksum][win-arm-zip-checksum-2.1.5XX] |"
+
+
+[]
+let ``it can generate windowsArm with preview branch``() =
+ let inputBranches =
+ [ { GitBranchName = "master"
+ DisplayName = "Master
(5.0.x Runtime)"
+ AkaMsChannel = Some("net5/dev") }
+ { GitBranchName = "release/5.0.1xx-preview4"
+ DisplayName = "5.0.100 Preview 4
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/preview4") }]
+ windowsArmRow inputBranches
+ |> should equal
+ "| **Windows arm** | **N/A** | **N/A** |"
+
+[]
+let ``it can generate windowsArm64``() =
+ windowsArm64Row branches
+ |> should equal
+ "| **Windows arm64** | [![][win-arm64-badge-master]][win-arm64-version-master]
[zip][win-arm64-zip-master] | **N/A** | **N/A** | **N/A** | **N/A** | **N/A** | **N/A** |"
+
+let branches2 =
+ [ { GitBranchName = "master"
+ DisplayName = "Master
(6.0.x Runtime)"
+ AkaMsChannel = Some("net6/dev") }
+ { GitBranchName = "release/5.0.1xx-rtm"
+ DisplayName = "5.0.100 RTM
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/5.0.1xx/daily") }
+ { GitBranchName = "release/3.1.4xx"
+ DisplayName = "Release/3.1.4XX
(3.1.x Runtime)"
+ AkaMsChannel = None }]
+
+[]
+let ``it can generate linuxMuslRowArm``() =
+ linuxMuslRowArm branches2
+ |> should equal
+ "| **Linux-musl-arm** | [![][linux-musl-arm-badge-master]][linux-musl-arm-version-master]
[tar.gz][linux-musl-arm-targz-master] - [Checksum][linux-musl-arm-targz-checksum-master] | **N/A** | **N/A** |"
+
+[]
+let ``it can generate linuxMuslRowArm64``() =
+ linuxMuslRowArm64 branches2
+ |> should equal
+ "| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-master]][linux-musl-arm64-version-master]
[tar.gz][linux-musl-arm64-targz-master] - [Checksum][linux-musl-arm64-targz-checksum-master] | **N/A** | **N/A** |"
+
+
+[]
+let ``it can generate titleRow``() =
+ titleRow branches
+ |> should equal
+ "| Platform | Master
(5.0.x Runtime) | Release/3.1.1XX
(3.1.x Runtime) | Release/3.0.1xx
(3.0.x Runtime) | Release/2.2.2XX
(2.2.x Runtime) | Release/2.2.1XX
(2.2.x Runtime) | Release/2.1.6XX
(2.1.x Runtime) | Release/2.1.5XX
(2.1.x Runtime) |"
+
+[]
+let ``it can generate separator``() =
+ separator branches
+ |> should equal
+ "| :--------- | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: |"
+// pinning tests https://wiki.c2.com/?PinningTests
+
+[]
+let ``pinning tests for readme in master 11/02/2020``() =
+ let inputBranches =
+ [ { GitBranchName = "master"
+ DisplayName = "Master
(6.0.x Runtime)"
+ AkaMsChannel = Some("net6/dev") }
+ { GitBranchName = "release/5.0.1xx-rtm"
+ DisplayName = "5.0.100 RTM
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/5.0.1xx/daily") }
+ { GitBranchName = "release/5.0.1xx-rc2"
+ DisplayName = "5.0.100 RC2
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/rc2") }
+ { GitBranchName = "release/3.1.4xx"
+ DisplayName = "Release/3.1.4XX
(3.1.x Runtime)"
+ AkaMsChannel = None }
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None }]
+
+ wholeTable inputBranches
+ |> should equal
+ """| Platform | Master
(6.0.x Runtime) | 5.0.100 RTM
(5.0 Runtime) | 5.0.100 RC2
(5.0 Runtime) | Release/3.1.4XX
(3.1.x Runtime) | Release/3.1.1XX
(3.1.x Runtime) |
+| :--------- | :----------: | :----------: | :----------: | :----------: | :----------: |
+| **Windows x64** | [![][win-x64-badge-master]][win-x64-version-master]
[Installer][win-x64-installer-master] - [Checksum][win-x64-installer-checksum-master]
[zip][win-x64-zip-master] - [Checksum][win-x64-zip-checksum-master] | [![][win-x64-badge-5.0.1XX-rtm]][win-x64-version-5.0.1XX-rtm]
[Installer][win-x64-installer-5.0.1XX-rtm] - [Checksum][win-x64-installer-checksum-5.0.1XX-rtm]
[zip][win-x64-zip-5.0.1XX-rtm] - [Checksum][win-x64-zip-checksum-5.0.1XX-rtm] | [![][win-x64-badge-5.0.1XX-rc2]][win-x64-version-5.0.1XX-rc2]
[Installer][win-x64-installer-5.0.1XX-rc2] - [Checksum][win-x64-installer-checksum-5.0.1XX-rc2]
[zip][win-x64-zip-5.0.1XX-rc2] - [Checksum][win-x64-zip-checksum-5.0.1XX-rc2] | [![][win-x64-badge-3.1.4XX]][win-x64-version-3.1.4XX]
[Installer][win-x64-installer-3.1.4XX] - [Checksum][win-x64-installer-checksum-3.1.4XX]
[zip][win-x64-zip-3.1.4XX] - [Checksum][win-x64-zip-checksum-3.1.4XX] | [![][win-x64-badge-3.1.1XX]][win-x64-version-3.1.1XX]
[Installer][win-x64-installer-3.1.1XX] - [Checksum][win-x64-installer-checksum-3.1.1XX]
[zip][win-x64-zip-3.1.1XX] - [Checksum][win-x64-zip-checksum-3.1.1XX] |
+| **Windows x86** | [![][win-x86-badge-master]][win-x86-version-master]
[Installer][win-x86-installer-master] - [Checksum][win-x86-installer-checksum-master]
[zip][win-x86-zip-master] - [Checksum][win-x86-zip-checksum-master] | [![][win-x86-badge-5.0.1XX-rtm]][win-x86-version-5.0.1XX-rtm]
[Installer][win-x86-installer-5.0.1XX-rtm] - [Checksum][win-x86-installer-checksum-5.0.1XX-rtm]
[zip][win-x86-zip-5.0.1XX-rtm] - [Checksum][win-x86-zip-checksum-5.0.1XX-rtm] | [![][win-x86-badge-5.0.1XX-rc2]][win-x86-version-5.0.1XX-rc2]
[Installer][win-x86-installer-5.0.1XX-rc2] - [Checksum][win-x86-installer-checksum-5.0.1XX-rc2]
[zip][win-x86-zip-5.0.1XX-rc2] - [Checksum][win-x86-zip-checksum-5.0.1XX-rc2] | [![][win-x86-badge-3.1.4XX]][win-x86-version-3.1.4XX]
[Installer][win-x86-installer-3.1.4XX] - [Checksum][win-x86-installer-checksum-3.1.4XX]
[zip][win-x86-zip-3.1.4XX] - [Checksum][win-x86-zip-checksum-3.1.4XX] | [![][win-x86-badge-3.1.1XX]][win-x86-version-3.1.1XX]
[Installer][win-x86-installer-3.1.1XX] - [Checksum][win-x86-installer-checksum-3.1.1XX]
[zip][win-x86-zip-3.1.1XX] - [Checksum][win-x86-zip-checksum-3.1.1XX] |
+| **Windows arm** | **N/A** | **N/A** | **N/A** | [![][win-arm-badge-3.1.4XX]][win-arm-version-3.1.4XX]
[zip][win-arm-zip-3.1.4XX] - [Checksum][win-arm-zip-checksum-3.1.4XX] | [![][win-arm-badge-3.1.1XX]][win-arm-version-3.1.1XX]
[zip][win-arm-zip-3.1.1XX] - [Checksum][win-arm-zip-checksum-3.1.1XX] |
+| **Windows arm64** | [![][win-arm64-badge-master]][win-arm64-version-master]
[zip][win-arm64-zip-master] | [![][win-arm64-badge-5.0.1XX-rtm]][win-arm64-version-5.0.1XX-rtm]
[Installer][win-arm64-installer-5.0.1XX-rtm] - [Checksum][win-arm64-installer-checksum-5.0.1XX-rtm]
[zip][win-arm64-zip-5.0.1XX-rtm] | [![][win-arm64-badge-5.0.1XX-rc2]][win-arm64-version-5.0.1XX-rc2]
[Installer][win-arm64-installer-5.0.1XX-rc2] - [Checksum][win-arm64-installer-checksum-5.0.1XX-rc2]
[zip][win-arm64-zip-5.0.1XX-rc2] | **N/A** | **N/A** |
+| **Linux x64** | [![][linux-badge-master]][linux-version-master]
[DEB Installer][linux-DEB-installer-master] - [Checksum][linux-DEB-installer-checksum-master]
[RPM Installer][linux-RPM-installer-master] - [Checksum][linux-RPM-installer-checksum-master]
_see installer note below_1
[tar.gz][linux-targz-master] - [Checksum][linux-targz-checksum-master] | [![][linux-badge-5.0.1XX-rtm]][linux-version-5.0.1XX-rtm]
[DEB Installer][linux-DEB-installer-5.0.1XX-rtm] - [Checksum][linux-DEB-installer-checksum-5.0.1XX-rtm]
[RPM Installer][linux-RPM-installer-5.0.1XX-rtm] - [Checksum][linux-RPM-installer-checksum-5.0.1XX-rtm]
_see installer note below_1
[tar.gz][linux-targz-5.0.1XX-rtm] - [Checksum][linux-targz-checksum-5.0.1XX-rtm] | [![][linux-badge-5.0.1XX-rc2]][linux-version-5.0.1XX-rc2]
[DEB Installer][linux-DEB-installer-5.0.1XX-rc2] - [Checksum][linux-DEB-installer-checksum-5.0.1XX-rc2]
[RPM Installer][linux-RPM-installer-5.0.1XX-rc2] - [Checksum][linux-RPM-installer-checksum-5.0.1XX-rc2]
_see installer note below_1
[tar.gz][linux-targz-5.0.1XX-rc2] - [Checksum][linux-targz-checksum-5.0.1XX-rc2] | [![][linux-badge-3.1.4XX]][linux-version-3.1.4XX]
[DEB Installer][linux-DEB-installer-3.1.4XX] - [Checksum][linux-DEB-installer-checksum-3.1.4XX]
[RPM Installer][linux-RPM-installer-3.1.4XX] - [Checksum][linux-RPM-installer-checksum-3.1.4XX]
_see installer note below_1
[tar.gz][linux-targz-3.1.4XX] - [Checksum][linux-targz-checksum-3.1.4XX] | [![][linux-badge-3.1.1XX]][linux-version-3.1.1XX]
[DEB Installer][linux-DEB-installer-3.1.1XX] - [Checksum][linux-DEB-installer-checksum-3.1.1XX]
[RPM Installer][linux-RPM-installer-3.1.1XX] - [Checksum][linux-RPM-installer-checksum-3.1.1XX]
_see installer note below_1
[tar.gz][linux-targz-3.1.1XX] - [Checksum][linux-targz-checksum-3.1.1XX] |
+| **Linux arm** | [![][linux-arm-badge-master]][linux-arm-version-master]
[tar.gz][linux-arm-targz-master] - [Checksum][linux-arm-targz-checksum-master] | [![][linux-arm-badge-5.0.1XX-rtm]][linux-arm-version-5.0.1XX-rtm]
[tar.gz][linux-arm-targz-5.0.1XX-rtm] - [Checksum][linux-arm-targz-checksum-5.0.1XX-rtm] | [![][linux-arm-badge-5.0.1XX-rc2]][linux-arm-version-5.0.1XX-rc2]
[tar.gz][linux-arm-targz-5.0.1XX-rc2] - [Checksum][linux-arm-targz-checksum-5.0.1XX-rc2] | [![][linux-arm-badge-3.1.4XX]][linux-arm-version-3.1.4XX]
[tar.gz][linux-arm-targz-3.1.4XX] - [Checksum][linux-arm-targz-checksum-3.1.4XX] | [![][linux-arm-badge-3.1.1XX]][linux-arm-version-3.1.1XX]
[tar.gz][linux-arm-targz-3.1.1XX] - [Checksum][linux-arm-targz-checksum-3.1.1XX] |
+| **Linux arm64** | [![][linux-arm64-badge-master]][linux-arm64-version-master]
[tar.gz][linux-arm64-targz-master] - [Checksum][linux-arm64-targz-checksum-master] | [![][linux-arm64-badge-5.0.1XX-rtm]][linux-arm64-version-5.0.1XX-rtm]
[tar.gz][linux-arm64-targz-5.0.1XX-rtm] - [Checksum][linux-arm64-targz-checksum-5.0.1XX-rtm] | [![][linux-arm64-badge-5.0.1XX-rc2]][linux-arm64-version-5.0.1XX-rc2]
[tar.gz][linux-arm64-targz-5.0.1XX-rc2] - [Checksum][linux-arm64-targz-checksum-5.0.1XX-rc2] | [![][linux-arm64-badge-3.1.4XX]][linux-arm64-version-3.1.4XX]
[tar.gz][linux-arm64-targz-3.1.4XX] - [Checksum][linux-arm64-targz-checksum-3.1.4XX] | [![][linux-arm64-badge-3.1.1XX]][linux-arm64-version-3.1.1XX]
[tar.gz][linux-arm64-targz-3.1.1XX] - [Checksum][linux-arm64-targz-checksum-3.1.1XX] |
+| **Linux-musl-x64** | [![][linux-musl-x64-badge-master]][linux-musl-x64-version-master]
[tar.gz][linux-musl-x64-targz-master] - [Checksum][linux-musl-x64-targz-checksum-master] | [![][linux-musl-x64-badge-5.0.1XX-rtm]][linux-musl-x64-version-5.0.1XX-rtm]
[tar.gz][linux-musl-x64-targz-5.0.1XX-rtm] - [Checksum][linux-musl-x64-targz-checksum-5.0.1XX-rtm] | [![][linux-musl-x64-badge-5.0.1XX-rc2]][linux-musl-x64-version-5.0.1XX-rc2]
[tar.gz][linux-musl-x64-targz-5.0.1XX-rc2] - [Checksum][linux-musl-x64-targz-checksum-5.0.1XX-rc2] | [![][linux-musl-x64-badge-3.1.4XX]][linux-musl-x64-version-3.1.4XX]
[tar.gz][linux-musl-x64-targz-3.1.4XX] - [Checksum][linux-musl-x64-targz-checksum-3.1.4XX] | [![][linux-musl-x64-badge-3.1.1XX]][linux-musl-x64-version-3.1.1XX]
[tar.gz][linux-musl-x64-targz-3.1.1XX] - [Checksum][linux-musl-x64-targz-checksum-3.1.1XX] |
+| **Linux-musl-arm** | [![][linux-musl-arm-badge-master]][linux-musl-arm-version-master]
[tar.gz][linux-musl-arm-targz-master] - [Checksum][linux-musl-arm-targz-checksum-master] | **N/A** | **N/A** | **N/A** | **N/A** |
+| **Linux-musl-arm64** | [![][linux-musl-arm64-badge-master]][linux-musl-arm64-version-master]
[tar.gz][linux-musl-arm64-targz-master] - [Checksum][linux-musl-arm64-targz-checksum-master] | **N/A** | **N/A** | **N/A** | **N/A** |
+| **RHEL 6** | **N/A** | **N/A** | **N/A** | [![][rhel-6-badge-3.1.4XX]][rhel-6-version-3.1.4XX]
[tar.gz][rhel-6-targz-3.1.4XX] - [Checksum][rhel-6-targz-checksum-3.1.4XX] | [![][rhel-6-badge-3.1.1XX]][rhel-6-version-3.1.1XX]
[tar.gz][rhel-6-targz-3.1.1XX] - [Checksum][rhel-6-targz-checksum-3.1.1XX] |
+| **macOS x64** | [![][osx-x64-badge-master]][osx-x64-version-master]
[Installer][osx-x64-installer-master] - [Checksum][osx-x64-installer-checksum-master]
[tar.gz][osx-x64-targz-master] - [Checksum][osx-x64-targz-checksum-master] | [![][osx-x64-badge-5.0.1XX-rtm]][osx-x64-version-5.0.1XX-rtm]
[Installer][osx-x64-installer-5.0.1XX-rtm] - [Checksum][osx-x64-installer-checksum-5.0.1XX-rtm]
[tar.gz][osx-x64-targz-5.0.1XX-rtm] - [Checksum][osx-x64-targz-checksum-5.0.1XX-rtm] | [![][osx-x64-badge-5.0.1XX-rc2]][osx-x64-version-5.0.1XX-rc2]
[Installer][osx-x64-installer-5.0.1XX-rc2] - [Checksum][osx-x64-installer-checksum-5.0.1XX-rc2]
[tar.gz][osx-x64-targz-5.0.1XX-rc2] - [Checksum][osx-x64-targz-checksum-5.0.1XX-rc2] | [![][osx-x64-badge-3.1.4XX]][osx-x64-version-3.1.4XX]
[Installer][osx-x64-installer-3.1.4XX] - [Checksum][osx-x64-installer-checksum-3.1.4XX]
[tar.gz][osx-x64-targz-3.1.4XX] - [Checksum][osx-x64-targz-checksum-3.1.4XX] | [![][osx-x64-badge-3.1.1XX]][osx-x64-version-3.1.1XX]
[Installer][osx-x64-installer-3.1.1XX] - [Checksum][osx-x64-installer-checksum-3.1.1XX]
[tar.gz][osx-x64-targz-3.1.1XX] - [Checksum][osx-x64-targz-checksum-3.1.1XX] |
+| **macOS arm64** | [![][osx-arm64-badge-master]][osx-arm64-version-master]
[Installer][osx-arm64-installer-master] - [Checksum][osx-arm64-installer-checksum-master]
[tar.gz][osx-arm64-targz-master] - [Checksum][osx-arm64-targz-checksum-master] | **N/A** | **N/A** | **N/A** | **N/A** |
+
+Reference notes:
+> **1**: Our Debian packages are put together slightly differently than the other OS specific installers. Instead of combining everything, we have separate component packages that depend on each other. If you're installing the SDK from the .deb file (via dpkg or similar), then you'll need to install the corresponding dependencies first:
+> * [Host, Host FX Resolver, and Shared Framework](https://github.com/dotnet/runtime#daily-builds)
+> * [ASP.NET Core Shared Framework](https://github.com/aspnet/AspNetCore/blob/master/docs/DailyBuilds.md)
+
+.NET Core SDK 2.x downloads can be found here: [.NET Core SDK 2.x Installers and Binaries](Downloads2.x.md)
+
+[win-x64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/win_x64_Release_version_badge.svg
+[win-x64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-win-x64.txt
+[win-x64-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x64.exe
+[win-x64-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x64.exe.sha
+[win-x64-zip-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x64.zip
+[win-x64-zip-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x64.zip.sha
+
+[win-x64-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/win_x64_Release_version_badge.svg
+[win-x64-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-win-x64.txt
+[win-x64-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x64.exe
+[win-x64-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x64.exe.sha
+[win-x64-zip-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x64.zip
+[win-x64-zip-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x64.zip.sha
+
+[win-x64-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/win_x64_Release_version_badge.svg
+[win-x64-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-win-x64.txt
+[win-x64-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x64.exe
+[win-x64-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x64.exe.sha
+[win-x64-zip-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x64.zip
+[win-x64-zip-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x64.zip.sha
+
+[win-x64-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/win_x64_Release_version_badge.svg
+[win-x64-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[win-x64-installer-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x64.exe
+[win-x64-installer-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x64.exe.sha
+[win-x64-zip-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x64.zip
+[win-x64-zip-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x64.zip.sha
+
+[win-x64-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/win_x64_Release_version_badge.svg
+[win-x64-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[win-x64-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.exe
+[win-x64-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.exe.sha
+[win-x64-zip-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.zip
+[win-x64-zip-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x64.zip.sha
+
+[win-x86-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/win_x86_Release_version_badge.svg
+[win-x86-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-win-x86.txt
+[win-x86-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x86.exe
+[win-x86-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x86.exe.sha
+[win-x86-zip-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x86.zip
+[win-x86-zip-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-x86.zip.sha
+
+[win-x86-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/win_x86_Release_version_badge.svg
+[win-x86-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-win-x86.txt
+[win-x86-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x86.exe
+[win-x86-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x86.exe.sha
+[win-x86-zip-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x86.zip
+[win-x86-zip-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-x86.zip.sha
+
+[win-x86-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/win_x86_Release_version_badge.svg
+[win-x86-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-win-x86.txt
+[win-x86-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x86.exe
+[win-x86-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x86.exe.sha
+[win-x86-zip-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x86.zip
+[win-x86-zip-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-x86.zip.sha
+
+[win-x86-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/win_x86_Release_version_badge.svg
+[win-x86-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[win-x86-installer-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x86.exe
+[win-x86-installer-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x86.exe.sha
+[win-x86-zip-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x86.zip
+[win-x86-zip-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-x86.zip.sha
+
+[win-x86-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/win_x86_Release_version_badge.svg
+[win-x86-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[win-x86-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x86.exe
+[win-x86-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x86.exe.sha
+[win-x86-zip-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x86.zip
+[win-x86-zip-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-x86.zip.sha
+
+[osx-x64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/osx_x64_Release_version_badge.svg
+[osx-x64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-osx-x64.txt
+[osx-x64-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-x64.pkg
+[osx-x64-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-x64.pkg.sha
+[osx-x64-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-x64.tar.gz
+[osx-x64-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-x64.pkg.tar.gz.sha
+
+[osx-x64-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/osx_x64_Release_version_badge.svg
+[osx-x64-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-osx-x64.txt
+[osx-x64-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-osx-x64.pkg
+[osx-x64-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-osx-x64.pkg.sha
+[osx-x64-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-osx-x64.tar.gz
+[osx-x64-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-osx-x64.pkg.tar.gz.sha
+
+[osx-x64-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/osx_x64_Release_version_badge.svg
+[osx-x64-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-osx-x64.txt
+[osx-x64-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-osx-x64.pkg
+[osx-x64-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-osx-x64.pkg.sha
+[osx-x64-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-osx-x64.tar.gz
+[osx-x64-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-osx-x64.pkg.tar.gz.sha
+
+[osx-x64-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/osx_x64_Release_version_badge.svg
+[osx-x64-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[osx-x64-installer-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-osx-x64.pkg
+[osx-x64-installer-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-osx-x64.pkg.sha
+[osx-x64-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-osx-x64.tar.gz
+[osx-x64-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-osx-x64.tar.gz.sha
+
+[osx-x64-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/osx_x64_Release_version_badge.svg
+[osx-x64-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[osx-x64-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-osx-x64.pkg
+[osx-x64-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-osx-x64.pkg.sha
+[osx-x64-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-osx-x64.tar.gz
+[osx-x64-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-osx-x64.tar.gz.sha
+
+[osx-arm64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/osx_arm64_Release_version_badge.svg
+[osx-arm64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-osx-arm64.txt
+[osx-arm64-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-arm64.pkg
+[osx-arm64-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-arm64.pkg.sha
+[osx-arm64-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-arm64.tar.gz
+[osx-arm64-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-osx-arm64.pkg.tar.gz.sha
+
+[linux-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_x64_Release_version_badge.svg
+[linux-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-x64.txt
+[linux-DEB-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-x64.deb
+[linux-DEB-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-x64.deb.sha
+[linux-RPM-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-x64.rpm
+[linux-RPM-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-x64.rpm.sha
+[linux-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-x64.tar.gz
+[linux-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-x64.tar.gz.sha
+
+[linux-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/linux_x64_Release_version_badge.svg
+[linux-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-linux-x64.txt
+[linux-DEB-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-x64.deb
+[linux-DEB-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-x64.deb.sha
+[linux-RPM-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-x64.rpm
+[linux-RPM-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-x64.rpm.sha
+[linux-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-x64.tar.gz
+[linux-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-x64.tar.gz.sha
+
+[linux-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/linux_x64_Release_version_badge.svg
+[linux-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-linux-x64.txt
+[linux-DEB-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-x64.deb
+[linux-DEB-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-x64.deb.sha
+[linux-RPM-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-x64.rpm
+[linux-RPM-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-x64.rpm.sha
+[linux-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-x64.tar.gz
+[linux-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-x64.tar.gz.sha
+
+[linux-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/linux_x64_Release_version_badge.svg
+[linux-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[linux-DEB-installer-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-x64.deb
+[linux-DEB-installer-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-x64.deb.sha
+[linux-RPM-installer-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-x64.rpm
+[linux-RPM-installer-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-x64.rpm.sha
+[linux-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-x64.tar.gz
+[linux-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-x64.tar.gz.sha
+
+[linux-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/linux_x64_Release_version_badge.svg
+[linux-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[linux-DEB-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-x64.deb
+[linux-DEB-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-x64.deb.sha
+[linux-RPM-installer-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-x64.rpm
+[linux-RPM-installer-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-x64.rpm.sha
+[linux-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-x64.tar.gz
+[linux-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-x64.tar.gz.sha
+
+[linux-arm-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_arm_Release_version_badge.svg
+[linux-arm-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-arm.txt
+[linux-arm-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-arm.tar.gz
+[linux-arm-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-arm.tar.gz.sha
+
+[linux-arm-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/linux_arm_Release_version_badge.svg
+[linux-arm-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-linux-arm.txt
+[linux-arm-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-arm.tar.gz
+[linux-arm-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-arm.tar.gz.sha
+
+[linux-arm-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/linux_arm_Release_version_badge.svg
+[linux-arm-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-linux-arm.txt
+[linux-arm-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-arm.tar.gz
+[linux-arm-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-arm.tar.gz.sha
+
+[linux-arm-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/linux_arm_Release_version_badge.svg
+[linux-arm-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[linux-arm-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-arm.tar.gz
+[linux-arm-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-arm.tar.gz.sha
+
+[linux-arm-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/linux_arm_Release_version_badge.svg
+[linux-arm-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[linux-arm-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-arm.tar.gz
+[linux-arm-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-arm.tar.gz.sha
+
+[linux-arm64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_arm64_Release_version_badge.svg
+[linux-arm64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-arm64.txt
+[linux-arm64-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-arm64.tar.gz.sha
+
+[linux-arm64-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/linux_arm64_Release_version_badge.svg
+[linux-arm64-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-linux-arm64.txt
+[linux-arm64-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-arm64.tar.gz.sha
+
+[linux-arm64-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/linux_arm64_Release_version_badge.svg
+[linux-arm64-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-linux-arm64.txt
+[linux-arm64-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-arm64.tar.gz.sha
+
+[linux-arm64-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/linux_arm64_Release_version_badge.svg
+[linux-arm64-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[linux-arm64-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha
+
+[linux-arm64-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/linux_arm64_Release_version_badge.svg
+[linux-arm64-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[linux-arm64-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-arm64.tar.gz
+[linux-arm64-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-arm64.tar.gz.sha
+
+[rhel-6-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/rhel.6_x64_Release_version_badge.svg
+[rhel-6-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-rhel.6-x64.txt
+[rhel-6-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-rhel.6-x64.tar.gz.sha
+
+[rhel-6-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/rhel.6_x64_Release_version_badge.svg
+[rhel-6-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-rhel.6-x64.txt
+[rhel-6-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-rhel.6-x64.tar.gz.sha
+
+[rhel-6-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/rhel.6_x64_Release_version_badge.svg
+[rhel-6-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-rhel.6-x64.txt
+[rhel-6-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-rhel.6-x64.tar.gz.sha
+
+[rhel-6-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/rhel.6_x64_Release_version_badge.svg
+[rhel-6-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[rhel-6-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha
+
+[rhel-6-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/rhel.6_x64_Release_version_badge.svg
+[rhel-6-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[rhel-6-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-rhel.6-x64.tar.gz
+[rhel-6-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-rhel.6-x64.tar.gz.sha
+
+[linux-musl-x64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_musl_x64_Release_version_badge.svg
+[linux-musl-x64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-musl-x64.txt
+[linux-musl-x64-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-x64.tar.gz.sha
+
+[linux-musl-x64-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/linux_musl_x64_Release_version_badge.svg
+[linux-musl-x64-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-linux-musl-x64.txt
+[linux-musl-x64-targz-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-linux-musl-x64.tar.gz.sha
+
+[linux-musl-x64-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/linux_musl_x64_Release_version_badge.svg
+[linux-musl-x64-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-linux-musl-x64.txt
+[linux-musl-x64-targz-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-linux-musl-x64.tar.gz.sha
+
+[linux-musl-x64-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/linux_musl_x64_Release_version_badge.svg
+[linux-musl-x64-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[linux-musl-x64-targz-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha
+
+[linux-musl-x64-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/linux_musl_x64_Release_version_badge.svg
+[linux-musl-x64-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[linux-musl-x64-targz-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-musl-x64.tar.gz
+[linux-musl-x64-targz-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-linux-musl-x64.tar.gz.sha
+
+[linux-musl-arm-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_musl_arm_Release_version_badge.svg
+[linux-musl-arm-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-musl-arm.txt
+[linux-musl-arm-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-arm.tar.gz
+[linux-musl-arm-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-arm.tar.gz.sha
+
+[linux-musl-arm64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/linux_musl_arm64_Release_version_badge.svg
+[linux-musl-arm64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-linux-musl-arm64.txt
+[linux-musl-arm64-targz-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-arm64.tar.gz
+[linux-musl-arm64-targz-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-linux-musl-arm64.tar.gz.sha
+
+[win-arm-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/win_arm_Release_version_badge.svg
+[win-arm-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-win-arm.txt
+[win-arm-zip-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm.zip
+[win-arm-zip-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm.zip.sha
+
+[win-arm-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/win_arm_Release_version_badge.svg
+[win-arm-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-win-arm.txt
+[win-arm-zip-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm.zip
+[win-arm-zip-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm.zip.sha
+
+[win-arm-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/win_arm_Release_version_badge.svg
+[win-arm-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-win-arm.txt
+[win-arm-zip-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm.zip
+[win-arm-zip-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm.zip.sha
+
+[win-arm-badge-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/win_arm_Release_version_badge.svg
+[win-arm-version-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/latest.version
+[win-arm-zip-3.1.4XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-arm.zip
+[win-arm-zip-checksum-3.1.4XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.4xx/dotnet-sdk-latest-win-arm.zip.sha
+
+[win-arm-badge-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/win_arm_Release_version_badge.svg
+[win-arm-version-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/latest.version
+[win-arm-zip-3.1.1XX]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-arm.zip
+[win-arm-zip-checksum-3.1.1XX]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/release/3.1.1xx/dotnet-sdk-latest-win-arm.zip.sha
+
+[win-arm64-badge-master]: https://aka.ms/dotnet/net6/dev/Sdk/win_arm64_Release_version_badge.svg
+[win-arm64-version-master]: https://aka.ms/dotnet/net6/dev/Sdk/productCommit-win-arm64.txt
+[win-arm64-installer-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm64.exe
+[win-arm64-installer-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm64.exe.sha
+[win-arm64-zip-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm64.zip
+[win-arm64-zip-checksum-master]: https://aka.ms/dotnet/net6/dev/Sdk/dotnet-sdk-win-arm64.zip.sha
+
+[win-arm64-badge-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/win_arm64_Release_version_badge.svg
+[win-arm64-version-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/productCommit-win-arm64.txt
+[win-arm64-installer-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm64.exe
+[win-arm64-installer-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm64.exe.sha
+[win-arm64-zip-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm64.zip
+[win-arm64-zip-checksum-5.0.1XX-rtm]: https://aka.ms/dotnet/net5/5.0.1xx/daily/Sdk/dotnet-sdk-win-arm64.zip.sha
+
+[win-arm64-badge-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/win_arm64_Release_version_badge.svg
+[win-arm64-version-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/productCommit-win-arm64.txt
+[win-arm64-installer-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm64.exe
+[win-arm64-installer-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm64.exe.sha
+[win-arm64-zip-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm64.zip
+[win-arm64-zip-checksum-5.0.1XX-rc2]: https://aka.ms/dotnet/net5/rc2/Sdk/dotnet-sdk-win-arm64.zip.sha
+
+[sdk-shas-2.2.1XX]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.2#built-repositories"""
diff --git a/tools/sdk-readme-table-generator/TableGenerator.Tests/TableGenerator.Tests.fsproj b/tools/sdk-readme-table-generator/TableGenerator.Tests/TableGenerator.Tests.fsproj
new file mode 100644
index 000000000..f33878f9b
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator.Tests/TableGenerator.Tests.fsproj
@@ -0,0 +1,17 @@
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tools/sdk-readme-table-generator/TableGenerator.sln b/tools/sdk-readme-table-generator/TableGenerator.sln
new file mode 100644
index 000000000..7e79f61ad
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29610.7
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TableGenerator", "TableGenerator\TableGenerator.fsproj", "{7F07B3CD-2E70-428F-8C7D-46A436211774}"
+EndProject
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "TableGenerator.Tests", "TableGenerator.Tests\TableGenerator.Tests.fsproj", "{4957E781-3178-41A1-BC65-0A00F41B2685}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7F07B3CD-2E70-428F-8C7D-46A436211774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7F07B3CD-2E70-428F-8C7D-46A436211774}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7F07B3CD-2E70-428F-8C7D-46A436211774}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7F07B3CD-2E70-428F-8C7D-46A436211774}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4957E781-3178-41A1-BC65-0A00F41B2685}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4957E781-3178-41A1-BC65-0A00F41B2685}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4957E781-3178-41A1-BC65-0A00F41B2685}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4957E781-3178-41A1-BC65-0A00F41B2685}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {7B5BEADF-7D46-4729-A771-A306FBB2E154}
+ EndGlobalSection
+EndGlobal
diff --git a/tools/sdk-readme-table-generator/TableGenerator/Program.fs b/tools/sdk-readme-table-generator/TableGenerator/Program.fs
new file mode 100644
index 000000000..b35c04efd
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator/Program.fs
@@ -0,0 +1,47 @@
+module TableGenerator.App
+
+open System
+open TableGenerator.Shared
+open TableGenerator.Reference
+open TableGenerator.Table
+
+let inputBranches =
+ [ { GitBranchName = "master"
+ DisplayName = "Master
(6.0.x Runtime)"
+ AkaMsChannel = Some("net6/dev") }
+ { GitBranchName = "release/5.0.2xx"
+ DisplayName = "Release/5.0.2XX
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/5.0.2xx/daily") }
+ { GitBranchName = "release/5.0.1xx-rtm"
+ DisplayName = "5.0.100 RTM
(5.0 Runtime)"
+ AkaMsChannel = Some("net5/5.0.1xx/daily") }
+ { GitBranchName = "release/3.1.4xx"
+ DisplayName = "Release/3.1.4XX
(3.1.x Runtime)"
+ AkaMsChannel = None }
+ { GitBranchName = "release/3.1.1xx"
+ DisplayName = "Release/3.1.1XX
(3.1.x Runtime)"
+ AkaMsChannel = None }]
+
+
+let referentNotes = """Reference notes:
+> **1**: Our Debian packages are put together slightly differently than the other OS specific installers. Instead of combining everything, we have separate component packages that depend on each other. If you're installing the SDK from the .deb file (via dpkg or similar), then you'll need to install the corresponding dependencies first:
+> * [Host, Host FX Resolver, and Shared Framework](https://github.com/dotnet/runtime#daily-builds)
+> * [ASP.NET Core Shared Framework](https://github.com/aspnet/AspNetCore/blob/master/docs/DailyBuilds.md)
+
+.NET Core SDK 2.x downloads can be found here: [.NET Core SDK 2.x Installers and Binaries](Downloads2.x.md)"""
+
+let sdksha2 =
+ "[sdk-shas-2.2.1XX]: https://github.com/dotnet/versions/tree/master/build-info/dotnet/product/cli/release/2.2#built-repositories"
+
+let wholeTable branches =
+ String.Join
+ (Environment.NewLine + Environment.NewLine,
+ [ table branches
+ referentNotes
+ referenceList branches
+ sdksha2 ])
+
+[]
+let main argv =
+ Console.WriteLine(wholeTable inputBranches)
+ 0
diff --git a/tools/sdk-readme-table-generator/TableGenerator/Reference.fs b/tools/sdk-readme-table-generator/TableGenerator/Reference.fs
new file mode 100644
index 000000000..9092a70e7
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator/Reference.fs
@@ -0,0 +1,202 @@
+module TableGenerator.Reference
+
+open System
+open TableGenerator.Shared
+
+let referenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-installer-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.exe
+[{0}-installer-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.exe.sha
+[{0}-zip-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.zip
+[{0}-zip-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.zip.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-installer-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.exe
+[{0}-installer-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.exe.sha
+[{0}-zip-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.zip
+[{0}-zip-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.zip.sha"""
+}
+
+let targzReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz.sha""" }
+
+let linuxArmNoArchitectureReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz.sha""" }
+
+let osxReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-installer-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.pkg
+[{0}-installer-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.pkg.sha
+[{0}-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-installer-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.pkg
+[{0}-installer-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.pkg.sha
+[{0}-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.pkg.tar.gz.sha"""
+}
+
+let linuxReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[linux-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[linux-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[linux-DEB-installer-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-x64.deb
+[linux-DEB-installer-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-x64.deb.sha
+[linux-RPM-installer-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-x64.rpm
+[linux-RPM-installer-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-x64.rpm.sha
+[linux-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[linux-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[linux-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[linux-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[linux-DEB-installer-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-x64.deb
+[linux-DEB-installer-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-x64.deb.sha
+[linux-RPM-installer-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-x64.rpm
+[linux-RPM-installer-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-x64.rpm.sha
+[linux-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[linux-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz.sha"""
+}
+
+let rhel6ReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[rhel-6-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[rhel-6-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[rhel-6-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[rhel-6-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[rhel-6-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[rhel-6-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[rhel-6-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[rhel-6-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz.sha"""
+}
+
+let linuxMuslReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-targz-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.tar.gz.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-targz-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz
+[{0}-targz-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.tar.gz.sha"""
+}
+
+let winMuslReferenceTemplate: ReferenceTemplate = {
+ LegacyTemplate = """[{0}-badge-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/latest.version
+[{0}-zip-{1}]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.zip
+[{0}-zip-checksum-{1}]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/{2}/dotnet-sdk-latest-{0}.zip.sha"""
+
+ AkaMSTemplate = """[{0}-badge-{1}]: https://aka.ms/dotnet/{4}/Sdk/{3}_Release_version_badge.svg
+[{0}-version-{1}]: https://aka.ms/dotnet/{4}/Sdk/productCommit-{0}.txt
+[{0}-zip-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.zip
+[{0}-zip-checksum-{1}]: https://aka.ms/dotnet/{4}/Sdk/dotnet-sdk-{0}.zip.sha"""
+}
+
+let formatTemplate (platform: String) (template: ReferenceTemplate) (branch: Branch): Option =
+ if branch.AkaMsChannel <> None then
+ Some (String.Format(template.AkaMSTemplate,
+ platform, // 0 - win-x64
+ (branchNameShorten branch), // 1 - 5.0.1xx-preview2
+ branch.GitBranchName, // 2 - 5.0.100-preview.2.20169.1
+ (platform.Replace('-', '_')), // 3 - win_64
+ branch.AkaMsChannel.Value)) // 4 - 5.0/preview2
+ else
+ Some (String.Format(template.LegacyTemplate,
+ platform, // 0 - win-64
+ (branchNameShorten branch), // 1 - 5.0.1xx-preview2
+ branch.GitBranchName, // 2 - 5.0.100-preview.2.20169.1
+ (platform.Replace('-', '_')))) // 3 - win_64
+
+let winX64ReferenceTemplate = formatTemplate "win-x64" referenceTemplate
+
+let winX86ReferenceTemplate = formatTemplate "win-x86" referenceTemplate
+
+let osxX64ReferenceTemplate = formatTemplate "osx-x64" osxReferenceTemplate
+
+let osxArm64ReferenceTemplate branch =
+ let format branch = formatTemplate "osx-arm64" osxReferenceTemplate branch
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> None
+
+let linuxX64ReferenceTemplate = formatTemplate "linux-x64" linuxReferenceTemplate
+
+let linuxArmReferenceTemplate = formatTemplate "linux-arm" linuxArmNoArchitectureReferenceTemplate
+
+let linuxArm64ReferenceTemplate = formatTemplate "linux-arm64" linuxArmNoArchitectureReferenceTemplate
+
+let rhel6x64ReferenceTemplate = formatTemplate "rhel.6-x64" rhel6ReferenceTemplate
+
+let linuxMuslx64ReferenceTemplate = formatTemplate "linux-musl-x64" linuxMuslReferenceTemplate
+
+let linuxMuslArmReferenceTemplate branch =
+ let format branch = formatTemplate "linux-musl-arm" linuxMuslReferenceTemplate branch
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> None
+
+let linuxMuslArm64ReferenceTemplate branch =
+ let format branch = formatTemplate "linux-musl-arm64" linuxMuslReferenceTemplate branch
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> None
+
+let winArmMuslReferenceTemplate branch =
+ match getMajorMinor branch with
+ | NoVersion -> None
+ | MajorMinor { Major = major; Minor = minor } when major <= 2 && minor <= 1 -> None
+ | _ -> formatTemplate "win-arm" winMuslReferenceTemplate branch
+
+let winArm64MuslReferenceTemplate branch =
+ match getMajorMinor branch with
+ | NoVersion -> None
+ | MajorMinor { Major = major; Minor = minor } when major < 5 -> None
+ | _ -> formatTemplate "win-arm64" referenceTemplate branch
+
+let templates =
+ [ winX64ReferenceTemplate
+ winX86ReferenceTemplate
+ osxX64ReferenceTemplate
+ osxArm64ReferenceTemplate
+ linuxX64ReferenceTemplate
+ linuxArmReferenceTemplate
+ linuxArm64ReferenceTemplate
+ rhel6x64ReferenceTemplate
+ linuxMuslx64ReferenceTemplate
+ linuxMuslArmReferenceTemplate
+ linuxMuslArm64ReferenceTemplate
+ winArmMuslReferenceTemplate
+ winArm64MuslReferenceTemplate ]
+
+let referenceList branches =
+ String.Join
+ (Environment.NewLine + Environment.NewLine,
+ templates
+ |> List.collect (fun template ->
+ branches
+ |> List.map template
+ |> List.choose id))
diff --git a/tools/sdk-readme-table-generator/TableGenerator/Shared.fs b/tools/sdk-readme-table-generator/TableGenerator/Shared.fs
new file mode 100644
index 000000000..6cbaabc67
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator/Shared.fs
@@ -0,0 +1,42 @@
+module TableGenerator.Shared
+
+open NuGet.Versioning
+open System
+
+type Branch =
+ { GitBranchName: string
+ DisplayName: string
+ AkaMsChannel: string option }
+
+type ReferenceTemplate =
+ { AkaMSTemplate: string
+ LegacyTemplate: string }
+
+let branchNameShorten (branch: Branch): string =
+ branch.GitBranchName.Substring(branch.GitBranchName.IndexOf('/') + 1).Replace("xx", "XX")
+
+type BranchMajorMinorVersion =
+ { Major: int
+ Minor: int
+ Release: string}
+
+type BranchMajorMinorVersionOrMaster =
+ | Master
+ | MajorMinor of BranchMajorMinorVersion
+ | NoVersion
+
+let getMajorMinor (branch: Branch): BranchMajorMinorVersionOrMaster =
+ match branch.GitBranchName = "master" with
+ | true -> Master
+ | _ ->
+ match branch.GitBranchName.IndexOf('/') with
+ | index when index < 0 -> NoVersion
+ | _ ->
+ match NuGetVersion.TryParseStrict
+ (branch.GitBranchName.Substring(branch.GitBranchName.IndexOf('/') + 1).Replace("xx", "99")) with
+ | true, version ->
+ MajorMinor
+ { Major = version.Major
+ Minor = version.Minor
+ Release = version.Release}
+ | _ -> NoVersion
diff --git a/tools/sdk-readme-table-generator/TableGenerator/Table.fs b/tools/sdk-readme-table-generator/TableGenerator/Table.fs
new file mode 100644
index 000000000..52d1c9374
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator/Table.fs
@@ -0,0 +1,144 @@
+module TableGenerator.Table
+
+open System
+open TableGenerator.Shared
+
+let notAvailable = "**N/A**"
+
+let windowsDesktopArchTableTemplate =
+ """[![][{0}-badge-{1}]][{0}-version-{1}]
[Installer][{0}-installer-{1}] - [Checksum][{0}-installer-checksum-{1}]
[zip][{0}-zip-{1}] - [Checksum][{0}-zip-checksum-{1}]"""
+
+let linuxArmTableTemplate =
+ "[![][{0}-badge-{1}]][{0}-version-{1}]
[tar.gz][{0}-targz-{1}] - [Checksum][{0}-targz-checksum-{1}]"
+
+let osxDesktopArchTableTemplate =
+ """[![][{0}-badge-{1}]][{0}-version-{1}]
[Installer][{0}-installer-{1}] - [Checksum][{0}-installer-checksum-{1}]
[tar.gz][{0}-targz-{1}] - [Checksum][{0}-targz-checksum-{1}]"""
+
+let joinListOfArchs (listOfArchs: List): string = "| " + String.Join(" | ", listOfArchs) + " |"
+
+let formRow rowTitle tableTemplateForThisArch branches =
+ let inList =
+ List.concat
+ [ [ rowTitle ]
+ (branches |> List.map tableTemplateForThisArch) ]
+ joinListOfArchs inList
+
+let windowsX64Row branches =
+ let tableTemplateForThisArch branch =
+ String.Format(windowsDesktopArchTableTemplate, "win-x64", branchNameShorten branch)
+ formRow "**Windows x64**" tableTemplateForThisArch branches
+
+let windowsX86Row branches =
+ let tableTemplateForThisArch branch =
+ String.Format(windowsDesktopArchTableTemplate, "win-x86", branchNameShorten branch)
+ formRow "**Windows x86**" tableTemplateForThisArch branches
+
+let osxX64Row branches =
+ let tableTemplateForThisArch branch = String.Format(osxDesktopArchTableTemplate, "osx-x64", branchNameShorten branch)
+ formRow "**macOS x64**" tableTemplateForThisArch branches
+
+let osxArm64Row branches =
+ let format branch = String.Format(osxDesktopArchTableTemplate, "osx-arm64", branchNameShorten branch)
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> notAvailable
+ formRow "**macOS arm64**" tableTemplateForThisArch branches
+
+let linuxDesktopArchRow branches =
+ let tableTemplate =
+ """[![][linux-badge-{0}]][linux-version-{0}]
[DEB Installer][linux-DEB-installer-{0}] - [Checksum][linux-DEB-installer-checksum-{0}]
[RPM Installer][linux-RPM-installer-{0}] - [Checksum][linux-RPM-installer-checksum-{0}]
_see installer note below_1
[tar.gz][linux-targz-{0}] - [Checksum][linux-targz-checksum-{0}]"""
+ let tableTemplateForThisArch branch = String.Format(tableTemplate, branchNameShorten branch)
+ formRow "**Linux x64**" tableTemplateForThisArch branches
+
+let linuxArmRow branches =
+ let tableTemplateForThisArch branch = String.Format(linuxArmTableTemplate, "linux-arm", branchNameShorten branch)
+ formRow "**Linux arm**" tableTemplateForThisArch branches
+
+let linuxArm64Row branches =
+ let tableTemplateForThisArch branch = String.Format(linuxArmTableTemplate, "linux-arm64", branchNameShorten branch)
+ formRow "**Linux arm64**" tableTemplateForThisArch branches
+
+let rhel6Row branches =
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | NoVersion -> notAvailable
+ | Master -> notAvailable
+ | MajorMinor { Major = major; Minor = minor } when major >= 5 -> notAvailable
+ | _ -> String.Format(linuxArmTableTemplate, "rhel-6", branchNameShorten branch)
+ formRow "**RHEL 6**" tableTemplateForThisArch branches
+
+let linuxMuslRowX64 branches =
+ let format branch = String.Format(linuxArmTableTemplate, "linux-musl-x64", branchNameShorten branch)
+ let tableTemplateForThisArch branch = format branch
+ formRow "**Linux-musl-x64**" tableTemplateForThisArch branches
+
+let linuxMuslRowArm branches =
+ let format branch = String.Format(linuxArmTableTemplate, "linux-musl-arm", branchNameShorten branch)
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> notAvailable
+ formRow "**Linux-musl-arm**" tableTemplateForThisArch branches
+
+let linuxMuslRowArm64 branches =
+ let format branch = String.Format(linuxArmTableTemplate, "linux-musl-arm64", branchNameShorten branch)
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | Master -> format branch
+ | MajorMinor { Major = major; Minor = _minor } when major >= 6 -> format branch
+ | _ -> notAvailable
+ formRow "**Linux-musl-arm64**" tableTemplateForThisArch branches
+
+let windowsArmRow branches =
+ let tableTemplate =
+ "[![][win-arm-badge-{0}]][win-arm-version-{0}]
[zip][win-arm-zip-{0}] - [Checksum][win-arm-zip-checksum-{0}]"
+
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | NoVersion -> notAvailable
+ | Master -> notAvailable
+ | MajorMinor { Major = major; Minor = minor } when ( major >= 5) -> notAvailable
+ | _ -> String.Format(tableTemplate, branchNameShorten branch)
+ formRow "**Windows arm**" tableTemplateForThisArch branches
+
+let windowsArm64Row branches =
+ let tableTemplate =
+ "[![][win-arm64-badge-{0}]][win-arm64-version-{0}]
[zip][win-arm64-zip-{0}]"
+
+ let tableInstallerTemplate =
+ """[![][win-arm64-badge-{0}]][win-arm64-version-{0}]
[Installer][win-arm64-installer-{0}] - [Checksum][win-arm64-installer-checksum-{0}]
[zip][win-arm64-zip-{0}]"""
+
+ let tableTemplateForThisArch branch =
+ match getMajorMinor branch with
+ | NoVersion -> notAvailable
+ | MajorMinor { Major = major; Minor = minor; Release = release; } when major <= 3 -> notAvailable
+ | MajorMinor { Major = major; Minor = minor; Release = release; } when major = 5 -> String.Format(tableInstallerTemplate, branchNameShorten branch)
+ | _ -> String.Format(tableTemplate, branchNameShorten branch)
+ formRow "**Windows arm64**" tableTemplateForThisArch branches
+
+let titleRow = formRow "Platform" (fun (b: Branch) -> b.DisplayName)
+
+let separator = formRow ":---------" (fun _ -> ":----------:")
+
+let rows =
+ [ titleRow
+ separator
+ windowsX64Row
+ windowsX86Row
+ windowsArmRow
+ windowsArm64Row
+ linuxDesktopArchRow
+ linuxArmRow
+ linuxArm64Row
+ linuxMuslRowX64
+ linuxMuslRowArm
+ linuxMuslRowArm64
+ rhel6Row
+ osxX64Row
+ osxArm64Row
+ ]
+
+let table branches = String.Join(Environment.NewLine, rows |> List.map (fun row -> row branches))
diff --git a/tools/sdk-readme-table-generator/TableGenerator/TableGenerator.fsproj b/tools/sdk-readme-table-generator/TableGenerator/TableGenerator.fsproj
new file mode 100644
index 000000000..875b6cfcb
--- /dev/null
+++ b/tools/sdk-readme-table-generator/TableGenerator/TableGenerator.fsproj
@@ -0,0 +1,19 @@
+
+
+
+ Exe
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+