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