{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : Nix.JenkinsPlugins2Nix.Types
-- Copyright : (c) 2017 Mateusz Kowalczyk
-- License : BSD3
--
-- @jenkinsPlugins2nix@ entry point.
module Main (main) where
import Data.Monoid ((<>))
import qualified Data.Text as Text
import Nix.JenkinsPlugins2Nix
import Nix.JenkinsPlugins2Nix.Types
import System.Environment
import System.Exit
import System.IO
import qualified Text.PrettyPrint.ANSI.Leijen as Pretty
usage :: Handle -> IO ()
usage h = do
pName <- getProgName
hPutStrLn h $
pName <> ": PLUGIN_NAME{:PLUGIN_VERSION} [PLUGIN_NAME{:PLUGIN_VERSION} ...]"
main :: IO ()
main = do
getArgs >>= \case
[] -> do
usage stderr
exitFailure
[v] | v == "-h" || v == "--help" -> do
usage stdout
exitSuccess
plugins -> do
mkExprsFor (map parseRequestedPlugin plugins) >>= \case
Left err -> do
hPutStrLn stderr err
exitFailure
Right p -> do
Pretty.putDoc p
exitSuccess
where
parseRequestedPlugin :: String -> RequestedPlugin
parseRequestedPlugin p = case break (== ':') p of
(n, ':' : ver) -> RequestedPlugin
{ requested_name = Text.pack n
, requested_version = Just (Text.pack ver)
}
_ -> RequestedPlugin
{ requested_name = Text.pack p
, requested_version = Nothing
}