git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Add --dry-run option to psc-publish
commit20209ff21bd405edacd3a21fa19048a3f13c6719 authorHarry Garrood <harry@garrood.me> dateSat 25 Jul 2015, 18:49 (11 years ago) parent0444d2f
2 files changed+39−15
psc-publish/Main.hs+19−9 src/Language/PureScript/Publish.hs+20−6
psc-publish/Main.hs+19−9
@@ -1,19 +1,24 @@
11
22module Main where
33
4−import Data.Version (showVersion)
4+import Data.Version (Version(..), showVersion)
55import qualified Data.Aeson as A
66import qualified Data.ByteString.Lazy.Char8 as BL
77
88import Options.Applicative hiding (str)
99
1010import qualified Paths_purescript as Paths
11−import Language.PureScript.Publish (preparePackage)
11+import Language.PureScript.Publish
12+
13+dryRun :: Parser Bool
14+dryRun = switch $
15+ long "dry-run"
16+ <> help "Produce no output, and don't require a tagged version to be checked out."
1217
1318main :: IO ()
14−main = execParser opts >> publish
19+main = execParser opts >>= publish
1520 where
16− opts = info (version <*> helper) infoModList
21+ opts = info (version <*> helper <*> dryRun) infoModList
1722 infoModList = fullDesc <> headerInfo <> footerInfo
1823 headerInfo = header "psc-publish - Generates documentation packages for upload to http://pursuit.purescript.org"
1924 footerInfo = footer $ "psc-publish " ++ showVersion Paths.version
@@ -21,8 +26,13 @@ main = execParser opts >> publish
2126 version :: Parser (a -> a)
2227 version = abortOption (InfoMsg (showVersion Paths.version)) $ long "version" <> help "Show the version number" <> hidden
2328
24−publish :: IO ()
25−publish = do
26− pkg <- preparePackage
27− BL.putStrLn (A.encode pkg)
28−
29+publish :: Bool -> IO ()
30+publish isDryRun =
31+ if isDryRun
32+ then do
33+ let dummyVersion = ("0.0.0", Version [0,0,0] [])
34+ _ <- preparePackage $ defaultPublishOptions { publishGetVersion = return dummyVersion }
35+ putStrLn "Dry run completed, no errors."
36+ else do
37+ pkg <- preparePackage defaultPublishOptions
38+ BL.putStrLn (A.encode pkg)
src/Language/PureScript/Publish.hs+20−6
@@ -5,8 +5,11 @@
55
66module Language.PureScript.Publish
77 ( preparePackage
8+ , preparePackage'
89 , PrepareM()
910 , runPrepareM
11+ , PublishOptions(..)
12+ , defaultPublishOptions
1013 , getVersionFromGitTag
1114 , getBowerInfo
1215 , getModulesAndBookmarks
@@ -49,11 +52,22 @@ import qualified Language.PureScript.Docs as D
4952import Language.PureScript.Publish.Utils
5053import Language.PureScript.Publish.ErrorsWarnings
5154
55+data PublishOptions = PublishOptions
56+ { -- | How to obtain the version tag and version that the data being
57+ -- generated will refer to.
58+ publishGetVersion :: PrepareM (String, Version)
59+ }
60+
61+defaultPublishOptions :: PublishOptions
62+defaultPublishOptions = PublishOptions
63+ { publishGetVersion = getVersionFromGitTag
64+ }
65+
5266-- | Attempt to retrieve package metadata from the current directory.
5367-- Calls exitFailure if no package metadata could be retrieved.
54−preparePackage :: IO D.UploadedPackage
55−preparePackage =
56− runPrepareM preparePackage'
68+preparePackage :: PublishOptions -> IO D.UploadedPackage
69+preparePackage opts =
70+ runPrepareM (preparePackage' opts)
5771 >>= either (\e -> printError e >> exitFailure)
5872 handleWarnings
5973 where
@@ -93,14 +107,14 @@ otherError = throwError . OtherError
93107catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
94108catchLeft a f = either f pure a
95109
96−preparePackage' :: PrepareM D.UploadedPackage
97−preparePackage' = do
110+preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
111+preparePackage' opts = do
98112 exists <- liftIO (doesFileExist "bower.json")
99113 unless exists (userError BowerJSONNotFound)
100114
101115 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
102116 >>= flip catchLeft (userError . CouldntParseBowerJSON)
103− (pkgVersionTag, pkgVersion) <- getVersionFromGitTag
117+ (pkgVersionTag, pkgVersion) <- publishGetVersion opts
104118 pkgGithub <- getBowerInfo pkgMeta
105119 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
106120