module Database.PostgreSQL.Embedded.Download ( downloadPostgres ) where import Data.Conduit.Shell (cd, run, tar, unzip', wget) import Data.Monoid ((<>)) import System.Directory (createDirectoryIfMissing, doesDirectoryExist, getHomeDirectory) import System.FilePath.Posix (()) import Database.PostgreSQL.Embedded.Types data ArchiveType = Zip | Tar deriving (Eq) downloadPostgres :: Os -> Version -> IO FilePath downloadPostgres os_ version_ = do home <- getHomeDirectory let v = value version_ let workdir = home ".postgres-embedded" v let tmp = workdir "postgres.tmp" let dist = workdir "pgsql" createDirectoryIfMissing True workdir exists <- doesDirectoryExist dist case exists of True -> return dist False -> run $ do cd workdir let (aType, suffix) = binaries os_ wget "-O" tmp $ base_download_url <> v <> suffix case aType of Zip -> unzip' "-q" tmp Tar -> tar "-xzf" tmp return dist where binaries :: Os -> (ArchiveType, String) binaries OSX = (Zip, "-osx-binaries.zip") binaries Win = (Zip, "-windows-x64-binaries.zip") binaries Linux = (Tar, "-linux-x64-binaries.tar.gz") base_download_url = "http://get.enterprisedb.com/postgresql/postgresql-"