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
| Main -> 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
| Main -> 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
| Main -> format branch
| MajorMinor { Major = major; Minor = _minor; Patch = patch } when major >= 6 || (major >= 5 && patch >= 299) -> 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
| Main -> format branch
| MajorMinor { Major = major; Minor = _minor; Patch = patch } when major >= 6 || (major >= 5 && patch >= 299) -> 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
| Main -> 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}]
[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(tableTemplate, 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
osxX64Row
osxArm64Row
linuxDesktopArchRow
linuxArmRow
linuxArm64Row
linuxMuslRowX64
linuxMuslRowArm
linuxMuslRowArm64
rhel6Row
]
let table branches = String.Join(Environment.NewLine, rows |> List.map (fun row -> row branches))