Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env stack
- -- stack --resolver lts-8.11 --install-ghc runghc --package turtle --package text
- {-
- The MIT License (MIT)
- Copyright (c) 2017 aiya000
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- -}
- {-# LANGUAGE FlexibleInstances #-}
- {-# LANGUAGE OverloadedStrings #-}
- import Control.Monad
- import Data.List (foldl')
- import Turtle
- import qualified Data.Text as T
- import qualified Data.Text.IO as TIO
- main :: IO ()
- main = sh $ do
- (exitCode, out, err) <- procStrictWithErr "stack" ["test"] ""
- let result = out <> err
- if exitCode == ExitSuccess
- then void . notifySend $ "stack test is succeed: " <> result
- else do
- let blobs = cut sections result
- forM_ blobs $ \blob ->
- when (isErrorSection blob) . void $ notifySend blob
- where
- notifySend :: Text -> Shell ExitCode
- notifySend msg = proc "notify-send" ["notify-stack-test", msg] ""
- sections :: Pattern ()
- sections = void $ do
- newline
- spaces
- newline
- isErrorSection :: Text -> Bool
- isErrorSection x =
- let firstLine = head $ T.lines x
- in any (== "error:") $ T.words firstLine
- -- "^.*\.hs:\w+:\w+: error:$"
- errorFormat :: Pattern ()
- errorFormat = do
- skip anyChar
- text ".hs:"
- skip digit
- text ": error:"
- eof
- -- vim:filetype=haskell
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement