@@ -18,7 +18,7 @@ module Language.PureScript.Publish
18 , getGitWorkingTreeStatus
18 , getGitWorkingTreeStatus
19 , checkCleanWorkingTree
19 , checkCleanWorkingTree
20 , getVersionFromGitTag
20 , getVersionFromGitTag
21− , getBowerInfo
21+ , getBowerRepositoryInfo
22 , getModulesAndBookmarks
22 , getModulesAndBookmarks
23 , getResolvedDependencies
23 , getResolvedDependencies
@@ -127,19 +127,24 @@ otherError = throwError . OtherError
127catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
127catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
128catchLeft a f = either f pure a
128catchLeft a f = either f pure a
130+unlessM :: Monad m => m Bool -> m () -> m ()
131+unlessM cond act = cond >>= flip unless act
130preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
133preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
131preparePackage' opts = do
134preparePackage' opts = do
132− exists <- liftIO (doesFileExist "bower.json")
135+ unlessM (liftIO (doesFileExist "bower.json")) (userError BowerJSONNotFound)
133− unless exists (userError BowerJSONNotFound)
135 checkCleanWorkingTree opts
136 checkCleanWorkingTree opts
137 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
138 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
138 >>= flip catchLeft (userError . CouldntDecodeBowerJSON)
139 >>= flip catchLeft (userError . CouldntDecodeBowerJSON)
140+ unlessM (liftIO (doesFileExist "LICENSE")) (userError LicenseNotFound)
139 (pkgVersionTag, pkgVersion) <- publishGetVersion opts
142 (pkgVersionTag, pkgVersion) <- publishGetVersion opts
140− pkgGithub <- getBowerInfo pkgMeta
143+ pkgGithub <- getBowerRepositoryInfo pkgMeta
141 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
144 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
146+ unless (bowerLicenseExists pkgMeta) (userError NoLicenseSpecified)
143 let declaredDeps = map fst (bowerDependencies pkgMeta ++
148 let declaredDeps = map fst (bowerDependencies pkgMeta ++
144 bowerDevDependencies pkgMeta)
149 bowerDevDependencies pkgMeta)
145 pkgResolvedDependencies <- getResolvedDependencies declaredDeps
150 pkgResolvedDependencies <- getResolvedDependencies declaredDeps
@@ -199,8 +204,8 @@ getVersionFromGitTag = do
199 dropPrefix prefix str =
204 dropPrefix prefix str =
200 fromMaybe str (stripPrefix prefix str)
205 fromMaybe str (stripPrefix prefix str)
202−getBowerInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
207+getBowerRepositoryInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
203−getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
208+getBowerRepositoryInfo = either (userError . BadRepositoryField) return . tryExtract
205 tryExtract pkgMeta =
210 tryExtract pkgMeta =
206 case bowerRepository pkgMeta of
211 case bowerRepository pkgMeta of
@@ -210,6 +215,9 @@ getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
210 (Left (BadRepositoryType repositoryType))
215 (Left (BadRepositoryType repositoryType))
211 maybe (Left NotOnGithub) Right (extractGithub repositoryUrl)
216 maybe (Left NotOnGithub) Right (extractGithub repositoryUrl)
218+bowerLicenseExists :: PackageMeta -> Bool
219+bowerLicenseExists = any (not . null) . bowerLicense
213extractGithub :: String -> Maybe (D.GithubUser, D.GithubRepo)
221extractGithub :: String -> Maybe (D.GithubUser, D.GithubRepo)
214extractGithub = stripGitHubPrefixes
222extractGithub = stripGitHubPrefixes
215 >>> fmap (splitOn "/")
223 >>> fmap (splitOn "/")