{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveDataTypeable #-} 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 }