module Hack.Manager.Travis
( renderTravis
, TravisOpts (..)
)
where
import Hack.Manager.Types
import Control.Monad
import Data.Data
import Data.FileEmbed
import qualified Data.ByteString as BS
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Text.Hastache as H
import qualified Text.Hastache.Context as H
data TravisOpts
= TravisOpts
{ to_ghcRelease :: T.Text
, to_useStack :: Bool
} deriving (Show, Eq, Data, Typeable)
data TravisCtx
= TravisCtx
{ tc_project :: ProjectInfo
, tc_opts :: TravisOpts
} deriving (Show, Eq, Data, Typeable)
stackTemplate :: BS.ByteString
stackTemplate = $(embedFile "templates/travis-stack.mustache")
cabalTemplate :: BS.ByteString
cabalTemplate = $(embedFile "templates/travis-cabal.mustache")
renderTravis :: TravisOpts -> ProjectInfo -> IO T.Text
renderTravis to pinfo =
liftM TL.toStrict $ H.hastacheStr cfg (T.decodeUtf8 tpl) ctx
where
tpl =
if to_useStack to then stackTemplate else cabalTemplate
ctx =
H.mkGenericContext $
TravisCtx
{ tc_project = pinfo
, tc_opts = to
}
cfg =
H.defaultConfig
{ H.muTemplateFileDir = Nothing
, H.muEscapeFunc = H.emptyEscape
}