packages feed

appc-0.0.2: src/Main.hs

{-# LANGUAGE RecordWildCards #-}

module Main where


import Data.Aeson
import qualified Data.ByteString.Lazy as LBS
import Data.SemVer
import Data.Monoid
import Options.Applicative
import System.Exit

import Data.AppContainer
import Data.AppContainer.Types



main :: IO ()
main = run =<< execParser
    (parseOptions `withInfo` "AppContainer tool")


run :: Options -> IO ()
run (Options (VerifyImageManifest path)) = do
    ok <- verifyImageManifest path
    if ok
        then exitSuccess
        else exitFailure


run (Options (VerifyContainerRuntimeManifest path)) = do
    ok <- verifyContainerRuntimeManifest path
    if ok
        then exitSuccess
        else exitFailure


run (Options (BuildImage path output)) = do
    buildImage path output


data Command
    = VerifyImageManifest !String
    | VerifyContainerRuntimeManifest !String
    | BuildImage !String !String

data Options = Options !Command

parseOptions :: Parser Options
parseOptions = Options <$> parseCommand

parseCommand :: Parser Command
parseCommand = subparser $ mconcat
    [ command "verify-image-manifest"
        (parseVerifyImageManifest `withInfo` "Verify an image manifest")
    , command "verify-container-runtime-manifest"
        (parseVerifyContainerRuntimeManifest `withInfo` "Verify a container runtime manifest")
    , command "build-image"
        (parseBuildImage `withInfo` "Build an image")
    ]

parseVerifyImageManifest :: Parser Command
parseVerifyImageManifest = VerifyImageManifest
    <$> argument str (metavar "PATH")

parseVerifyContainerRuntimeManifest :: Parser Command
parseVerifyContainerRuntimeManifest = VerifyContainerRuntimeManifest
    <$> argument str (metavar "PATH")

parseBuildImage :: Parser Command
parseBuildImage = BuildImage
    <$> argument str (metavar "PATH")
    <*> argument str (metavar "OUTPUT")

withInfo :: Parser a -> String -> ParserInfo a
withInfo opts desc = info (helper <*> opts) $ progDesc desc