mirror of
https://github.com/actions/runner-images.git
synced 2025-12-12 20:26:49 +00:00
54 lines
2.3 KiB
PowerShell
54 lines
2.3 KiB
PowerShell
################################################################################
|
|
## File: Install-Haskell.ps1
|
|
## Desc: Install Haskell for Windows
|
|
################################################################################
|
|
|
|
# install minimal ghcup, utilizing pre-installed msys2 at C:\msys64
|
|
Write-Host 'Installing ghcup...'
|
|
$msysPath = "C:\msys64"
|
|
$ghcupPrefix = "C:\"
|
|
$cabalDir = "C:\cabal"
|
|
|
|
$ghcupDownloadURL = "https://downloads.haskell.org/~ghcup/x86_64-mingw64-ghcup.exe"
|
|
|
|
# If you want to install a specific version of ghcup, uncomment the following lines
|
|
# $ghver = "0.1.19.4"
|
|
# $ghcupDownloadURL = "https://downloads.haskell.org/~ghcup/${ghver}/x86_64-mingw64-ghcup-${ghver}.exe"
|
|
|
|
# Other option is to download ghcup from GitHub releases:
|
|
# https://github.com/haskell/ghcup-hs/releases/latest
|
|
|
|
New-Item -Path "$ghcupPrefix\ghcup" -ItemType 'directory' -ErrorAction SilentlyContinue | Out-Null
|
|
New-Item -Path "$ghcupPrefix\ghcup\bin" -ItemType 'directory' -ErrorAction SilentlyContinue | Out-Null
|
|
Invoke-DownloadWithRetry -Url $ghcupDownloadURL -Path "$ghcupPrefix\ghcup\bin\ghcup.exe"
|
|
|
|
[System.Environment]::SetEnvironmentVariable("GHCUP_INSTALL_BASE_PREFIX", $ghcupPrefix, "Machine")
|
|
[System.Environment]::SetEnvironmentVariable("GHCUP_MSYS2", $msysPath, "Machine")
|
|
[System.Environment]::SetEnvironmentVariable("CABAL_DIR", $cabalDir, "Machine")
|
|
Add-MachinePathItem "$ghcupPrefix\ghcup\bin"
|
|
Add-MachinePathItem "$cabalDir\bin"
|
|
Update-Environment
|
|
|
|
# Get 3 latest versions of GHC
|
|
$Versions = ghcup list -t ghc -r | Where-Object {$_ -notlike "prerelease"}
|
|
$VersionsOutput = [Version[]]($Versions | ForEach-Object{ $_.Split(' ')[1]; })
|
|
$LatestMajorMinor = $VersionsOutput | Group-Object { $_.ToString(2) } | Sort-Object { [Version]$_.Name } | Select-Object -last 3
|
|
$VersionsList = $LatestMajorMinor | ForEach-Object { $_.Group | Select-Object -Last 1 } | Sort-Object
|
|
|
|
# The latest version will be installed as a default
|
|
ForEach ($version in $VersionsList)
|
|
{
|
|
Write-Host "Installing ghc $version..."
|
|
ghcup install ghc $version
|
|
ghcup set ghc $version
|
|
}
|
|
|
|
# Add default version of GHC to path
|
|
$DefaultGhcVersion = $VersionsList | Select-Object -Last 1
|
|
ghcup set ghc $DefaultGhcVersion
|
|
|
|
Write-Host 'Installing cabal...'
|
|
ghcup install cabal latest
|
|
|
|
Invoke-PesterTests -TestFile 'Haskell'
|