Files
tempered/app/Main.hs
Chris Penner 7490795203 Add haddocks
2017-04-22 16:53:21 -06:00

34 lines
1.0 KiB
Haskell

module Main where
import System.Environment
import System.Directory
import Data.Foldable
import qualified Data.Map as M
import Control.Monad.Reader
import Tempered.Options
import Tempered.Parser
import Tempered.Template
-- | Run tempered on cmdline args.
main :: IO ()
main = do
envVars <- getEnvVars
filenames <- getArgs
templates <- traverse (templateFromFile >=> handleTemplateError) filenames
runReaderT (renderOutput templates) envVars
where
renderOutput = traverse_ (interpTemplate >=> liftIO . putStr)
-- | Combine local and global environment variables
getEnvVars :: IO EnvVars
getEnvVars = do
cwd <- getCurrentDirectory
globalEnvVars <- getEnvironment
localEnvVars <- getProjectOptions cwd
envTemplates <- traverse (handleTemplateError . parseTemplate "env.yaml") localEnvVars
interpolatedLocalEnvVars <- runReaderT (traverse interpTemplate envTemplates) mempty
-- Precedence to local env vars; last in list has precedence
return (globalEnvVars ++ M.toList interpolatedLocalEnvVars)