purescript-0.10.0: psc-publish/Main.hs
module Main where
import Data.Version (Version(..), showVersion)
import qualified Data.Aeson as A
import qualified Data.ByteString.Lazy.Char8 as BL
import Data.Monoid ((<>))
import Options.Applicative (Parser, ParseError (..))
import qualified Options.Applicative as Opts
import System.IO (hSetEncoding, stderr, stdout, utf8)
import qualified Paths_purescript as Paths
import Language.PureScript.Publish
import Language.PureScript.Publish.ErrorsWarnings
dryRun :: Parser Bool
dryRun = Opts.switch $
Opts.long "dry-run"
<> Opts.help "Produce no output, and don't require a tagged version to be checked out."
dryRunOptions :: PublishOptions
dryRunOptions = defaultPublishOptions
{ publishGetVersion = return dummyVersion
, publishWorkingTreeDirty = warn DirtyWorkingTree_Warn
}
where dummyVersion = ("0.0.0", Version [0,0,0] [])
main :: IO ()
main = do
hSetEncoding stdout utf8
hSetEncoding stderr utf8
Opts.execParser opts >>= publish
where
opts = Opts.info (version <*> Opts.helper <*> dryRun) infoModList
infoModList = Opts.fullDesc <> headerInfo <> footerInfo
headerInfo = Opts.header "psc-publish - Generates documentation packages for upload to http://pursuit.purescript.org"
footerInfo = Opts.footer $ "psc-publish " ++ showVersion Paths.version
version :: Parser (a -> a)
version = Opts.abortOption (InfoMsg (showVersion Paths.version)) $
Opts.long "version" <> Opts.help "Show the version number" <> Opts.hidden
publish :: Bool -> IO ()
publish isDryRun =
if isDryRun
then do
_ <- unsafePreparePackage dryRunOptions
putStrLn "Dry run completed, no errors."
else do
pkg <- unsafePreparePackage defaultPublishOptions
BL.putStrLn (A.encode pkg)