module Jenkins.Rest
(
Jenkins
, HasConnectInfo(..)
, ConnectInfo(..)
, defaultConnectInfo
, Result(..)
, runJenkins
, runJenkinsThrowing
, get
, post
, post_
, concurrently
, io
, disconnect
, with
, module Jenkins.Rest.Method
, postXML
, concurrentlys
, concurrentlys_
, reload
, restart
, forceRestart
, jenkinsUrl
, jenkinsPort
, jenkinsUser
, jenkinsApiToken
, jenkinsPassword
, _Error
, _Disconnect
, _Result
, Request
, HttpException
) where
import Control.Applicative ((<$))
import Data.Foldable (Foldable, foldr)
import Control.Lens
import Control.Monad.IO.Class (MonadIO(..))
import Data.ByteString.Lazy (ByteString)
import Data.Monoid (mempty)
import Network.HTTP.Conduit (Request, HttpException)
import Prelude hiding (foldr)
import Text.XML (Document, renderLBS, def)
import Jenkins.Rest.Internal
import Jenkins.Rest.Method
import Network.HTTP.Conduit.Lens
get :: Method Complete f -> Jenkins ByteString
get m = liftJ $ Get m id
post :: (forall f. Method Complete f) -> ByteString -> Jenkins ()
post m body = liftJ $ Post m body (\_ -> ())
post_ :: (forall f. Method Complete f) -> Jenkins ()
post_ m = post m mempty
concurrently :: Jenkins a -> Jenkins b -> Jenkins (a, b)
concurrently ja jb = liftJ $ Conc ja jb (,)
io :: MonadIO m => IO a -> m a
io = liftIO
disconnect :: Jenkins a
disconnect = liftJ Dcon
with :: (Request -> Request) -> Jenkins a -> Jenkins a
with f j = liftJ $ With f j id
postXML :: (forall f. Method Complete f) -> Document -> Jenkins ()
postXML m =
with (requestHeaders <>~ [("Content-Type", "text/xml")]) . post m . renderLBS def
concurrentlys :: Foldable f => f (Jenkins a) -> Jenkins [a]
concurrentlys = foldr go (return [])
where
go x xs = do
(y, ys) <- concurrently x xs
return (y : ys)
concurrentlys_ :: Foldable f => f (Jenkins a) -> Jenkins ()
concurrentlys_ = foldr (\x xs -> () <$ concurrently x xs) (return ())
reload :: Jenkins a
reload = do
post_ "reload"
disconnect
restart :: Jenkins a
restart = do
post_ "safeRestart"
disconnect
forceRestart :: Jenkins a
forceRestart = do
post_ "restart"
disconnect