module Language.ATS.Package.Upgrade ( upgradeAtsPkg
) where
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.Char (isDigit)
import Data.List (intersperse)
import Data.Semigroup
import Network.HTTP.Client
import Network.HTTP.Client.TLS (tlsManagerSettings)
import System.Info
manufacturer :: String
manufacturer = case os of
"darwin" -> "apple"
_ -> "unknown"
targetArch :: String
targetArch = mconcat . intersperse "-" $ [arch, manufacturer, os]
upgradeAtsPkg :: IO ()
upgradeAtsPkg = do
manager <- newManager tlsManagerSettings
initialRequest <- parseRequest "https://github.com/vmchale/atspkg/releases/latest"
response <- responseBody <$> httpLbs (initialRequest { method = "GET", redirectCount = 0 }) manager
let strVersion = BSL.takeWhile (/='"') . BSL.dropWhile (not . isDigit) . BSL.dropWhile (/='"') $ response
binRequest = "https://github.com/vmchale/atspkg/releases/download/" <> BSL.unpack strVersion <> "/atspkg-" <> targetArch
putStrLn binRequest
followupRequest <- parseRequest binRequest
binBytes <- responseBody <$> httpLbs (followupRequest { method = "GET" }) manager
BSL.writeFile "atspkg" binBytes