packages feed

hpc-coveralls-0.1.0: src/HpcCoverallsMain.hs

module Main where

import Data.Aeson
import Trace.Hpc.Coveralls
import Trace.Hpc.Coveralls.Curl
import System.Environment (getArgs, getEnv, getEnvironment)
import System.Exit (exitSuccess)
import qualified Data.ByteString.Lazy.Char8 as BSL

getServiceAndJobID :: IO (String, String)
getServiceAndJobID = do
    env <- getEnvironment
    case lookup "TRAVIS" env of
        Just _ -> do
            jobId <- getEnv "TRAVIS_JOB_ID"
            return ("travis-ci", jobId)
        _ -> error "Unsupported CI service."

writeJson :: String -> Value -> IO ()
writeJson filePath = BSL.writeFile filePath . encode

main :: IO ()
main = do
    args <- getArgs
    case args of
        ["--help"] -> usage >> exitSuccess
        ["-h"] -> usage >> exitSuccess
        [testName] -> do
            (serviceName, jobId) <- getServiceAndJobID
            coverallsJson <- generateCoverallsFromTix serviceName jobId testName
            let filePath = serviceName ++ "-" ++ jobId ++ ".json"
            writeJson filePath coverallsJson
            response <- postJson filePath "https://coveralls.io/api/v1/jobs"
            putStrLn response >> exitSuccess
        _ -> usage >> exitSuccess
    where
        usage = putStrLn "Usage: hpc-coveralls [testName]"