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

Safe HaskellSafe
LanguageHaskell98

BuildBox.Build

Contents

Description

Defines the main Build monad and common utils.

Synopsis

Documentation

data BuildState Source #

Global builder configuration.

Constructors

BuildState 

Fields

buildStateDefault :: FilePath -> BuildState Source #

The default build config.

type Build a = 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.

runBuildPrint :: FilePath -> Build a -> IO (Maybe a) Source #

Like runBuild, but report whether it succeeded to the console. If it succeeded then return Just the result, else Nothing.

successfully :: IO a -> IO () Source #

Discard the resulting value of a compuation. Used like successfully . runBuild ...

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.

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 :: (MonadThrow m, Exception e) => e -> m a Source #

Alias for throwM from Control.Monad.Catch.

catch :: MonadCatch m => forall e a. Exception e => m a -> (e -> m a) -> m a #

Provide a handler for exceptions thrown during execution of the first action. Note that type of the type of the argument to the handler will constrain which exceptions are caught. See Control.Exception's catch.

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.

whenM :: Monad m => m Bool -> m () -> m () Source #

Like when, but with teh monadz.

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.

outBlank :: Build () Source #

Print a blank line to stdout

outLine :: Build () Source #

Print a ----- line to stdout

outLINE :: Build () Source #

Print a ===== line to stdout

logSystem :: String -> Build () Source #

Log a system command to the handle in our BuildConfig, if any.