buildbox-2.1.6.1: Rehackable components for writing buildbots and test harnesses.

Safe HaskellNone
LanguageHaskell98

BuildBox

Contents

Synopsis

Documentation

type Build a = ErrorT BuildError (StateT BuildState IO) a Source

The builder monad encapsulates and IO action that can fail with an error, and also read some global configuration info.

Building

runBuild :: FilePath -> Build a -> IO (Either BuildError a) Source

Run a build command. The first argument is a directory that can be used for temporary files (like "/tmp")

runBuildWithState :: BuildState -> Build a -> IO (Maybe a) Source

Like runBuild but also takes a BuildState.

Errors

data BuildError Source

The errors we recognise.

Constructors

ErrorOther String

Some generic error

ErrorSystemCmdFailed

Some system command fell over, and it barfed out the given stdout and stderr.

ErrorIOError IOError

Some miscellanous IO action failed.

forall prop . Show prop => ErrorCheckFailed Bool prop

Some property check was supposed to return the given boolean value, but it didn't.

ErrorNeeds FilePath

A build command needs the following file to continue. This can be used for writing make-like bots.

throw :: BuildError -> Build a Source

Throw an error in the build monad.

catch :: Build a -> (BuildError -> Build a) -> Build a Source

Run a build command, catching any exceptions it sends.

needs :: FilePath -> Build () Source

Throw a needs error saying we needs the given file. A catcher could then usefully create the file, or defer the compuation until it has been created.

Utils

io :: IO a -> Build a Source

Lift an IO action into the build monad. If the action throws any exceptions they get caught and turned into ErrorIOError exceptions in our Build monad.

Output

out :: Pretty a => a -> Build () Source

Print some text to stdout.

outLn :: Pretty a => a -> Build () Source

Print some text to stdout followed by a newline.