nemesis-titan 2013.6.13.2 → 2013.6.13.3
raw patch · 4 files changed
+65/−35 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- System.Nemesis.Titan: titan_with_label_file_name :: String -> String -> Unit
- System.Nemesis.Titan: titan_with_label_file_name_custom_task :: String -> String -> Unit -> Unit
+ System.Nemesis.Titan: Config :: String -> String -> String -> String -> String -> String -> String -> String -> Config
+ System.Nemesis.Titan: bin_directory :: Config -> String
+ System.Nemesis.Titan: config_directory :: Config -> String
+ System.Nemesis.Titan: data Config
+ System.Nemesis.Titan: defaultConfig :: Config
+ System.Nemesis.Titan: file_name :: Config -> String
+ System.Nemesis.Titan: ghc_arg_string :: Config -> String
+ System.Nemesis.Titan: ghc_default_arg_string :: Config -> String
+ System.Nemesis.Titan: haskell_source_directory :: Config -> String
+ System.Nemesis.Titan: instance Default Config
+ System.Nemesis.Titan: instance Eq Config
+ System.Nemesis.Titan: instance Show Config
+ System.Nemesis.Titan: label :: Config -> String
+ System.Nemesis.Titan: pid_name :: Config -> String
+ System.Nemesis.Titan: titan_with_config :: Config -> Unit
Files
- Nemesis +0/−2
- nemesis-titan.cabal +1/−1
- src/Main.hs +0/−1
- src/System/Nemesis/Titan.hs +64/−31
Nemesis view
@@ -23,5 +23,3 @@ console ["-isrc", "-Wall"] "src/System/Nemesis/Titan" titan "Main.hs"- - titan "Test.hs"
nemesis-titan.cabal view
@@ -1,5 +1,5 @@ Name: nemesis-titan-Version: 2013.6.13.2+Version: 2013.6.13.3 Build-type: Simple Synopsis: A collection of Nemesis tasks to bootstrap a Haskell project with a focus on continuous integration Description:
src/Main.hs view
@@ -2,7 +2,6 @@ import Prelude () import Air.Env-import Air.Extra import System.Nemesis.Titan import Test.Hspec
src/System/Nemesis/Titan.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TemplateHaskell #-} + module System.Nemesis.Titan where import System.Nemesis.Env@@ -7,7 +9,7 @@ import Air.Env import Prelude ()-import Air.TH (here)+import Air.TH (here, mkDefault) import qualified Data.ByteString.Char8 as B import qualified Data.UUID as UUID@@ -20,7 +22,7 @@ import Test.Hspec import Text.StringTemplate-+import Text.Printf angel_template :: StringTemplate String angel_template = newSTMP - [here|@@ -83,44 +85,57 @@ text `shouldSatisfy` (null > not) -titan :: String -> Unit-titan file_name = do- let label = file_name.takeBaseName- titan_with_label_file_name label file_name -titan_with_label_file_name :: String -> String -> Unit-titan_with_label_file_name label file_name = titan_with_label_file_name_custom_task label file_name (return ())+data Config = Config+ {+ pid_name :: String+ , bin_directory :: String+ , config_directory :: String+ , haskell_source_directory :: String+ , label :: String+ , file_name :: String+ , ghc_arg_string :: String+ , ghc_default_arg_string :: String+ }+ deriving (Show, Eq) +mkDefault ''Config -titan_with_label_file_name_custom_task :: String -> String -> Unit -> Unit-titan_with_label_file_name_custom_task label file_name custom_tasks = do- namespace label - do++defaultConfig :: Config+defaultConfig = def+ {+ pid_name = "uuid.txt"+ , bin_directory = ".bin"+ , config_directory = "config"+ , haskell_source_directory = "src"+ , ghc_default_arg_string = "-threaded"+ }++titan_with_config :: Config -> Unit+titan_with_config config = do+ namespace (config.label) - do let - pid_name = "uuid.txt"- bin_directory = ".bin"- config_name = "config"- config_directory = config_name / label- angel_path = config_directory / "Angel.conf"- guard_path = config_directory / "Guardfile"+ _label = config.label+ config_label_directory = config.config_directory / _label+ angel_path = config_label_directory / "Angel.conf"+ guard_path = config_label_directory / "Guardfile" - pid_directory = bin_directory / label- pid_path = pid_directory / pid_name+ pid_directory = config.bin_directory / _label+ pid_path = pid_directory / config.pid_name + haskell_path = config.haskell_source_directory / config.file_name+ desc "Initialize a Titan node" task "init" - io - do- let- haskell_source_directory = "src"- haskell_path = haskell_source_directory / file_name- -- createDirectoryIfMissing True config_directory- createDirectoryIfMissing True haskell_source_directory+ createDirectoryIfMissing True config_label_directory+ createDirectoryIfMissing True (config.haskell_source_directory) let - angel_file_content = render - setAttribute "label" label angel_template- guard_file_content = render - setAttribute "label" label guard_template- haskell_file_content = render - setAttribute "label" label haskell_template+ angel_file_content = render - setAttribute "label" _label angel_template+ guard_file_content = render - setAttribute "label" _label guard_template+ haskell_file_content = render - setAttribute "label" _label haskell_template let { write_if_not_exist file_path str = do@@ -132,6 +147,7 @@ puts - file_path + " already exists!" return () }+ write_if_not_exist angel_path angel_file_content write_if_not_exist guard_path guard_file_content write_if_not_exist haskell_path haskell_file_content@@ -172,7 +188,17 @@ desc "Compile the binary" task "compile" - do bin <- get_bin- sh - "ghc --make -isrc -threaded src/" + file_name + " -o " + bin+ let { cmd =+ printf "ghc --make -i%s %s %s %s -o %s" + (config.haskell_source_directory)+ (config.ghc_default_arg_string)+ (config.ghc_arg_string)+ haskell_path+ bin+ }+ + -- puts cmd+ sh cmd desc "Start the process" task "run" - do@@ -188,7 +214,14 @@ task "guard" - do sh - "guard --no-bundler-warning -G " + guard_path - custom_tasks+++titan :: String -> Unit+titan _file_name = do+ let _label = _file_name.takeBaseName+ titan_with_config defaultConfig {file_name = _file_name, label = _label}++ -- Helpers