@@ -18,7 +18,7 @@ module Language.PureScript.Publish
1818 , getGitWorkingTreeStatus
1919 , checkCleanWorkingTree
2020 , getVersionFromGitTag
21− , getBowerInfo
21+ , getBowerRepositoryInfo
2222 , getModulesAndBookmarks
2323 , getResolvedDependencies
2424 ) where
@@ -127,19 +127,24 @@ otherError = throwError . OtherError
127127catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
128128catchLeft a f = either f pure a
129129
130+unlessM :: Monad m => m Bool -> m () -> m ()
131+unlessM cond act = cond >>= flip unless act
132+
130133preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
131134preparePackage' opts = do
132− exists <- liftIO (doesFileExist "bower.json")
133− unless exists (userError BowerJSONNotFound)
134−
135+ unlessM (liftIO (doesFileExist "bower.json")) (userError BowerJSONNotFound)
135136 checkCleanWorkingTree opts
136137
137138 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
138139 >>= flip catchLeft (userError . CouldntDecodeBowerJSON)
140+ unlessM (liftIO (doesFileExist "LICENSE")) (userError LicenseNotFound)
141+
139142 (pkgVersionTag, pkgVersion) <- publishGetVersion opts
140− pkgGithub <- getBowerInfo pkgMeta
143+ pkgGithub <- getBowerRepositoryInfo pkgMeta
141144 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
142145
146+ unless (bowerLicenseExists pkgMeta) (userError NoLicenseSpecified)
147+
143148 let declaredDeps = map fst (bowerDependencies pkgMeta ++
144149 bowerDevDependencies pkgMeta)
145150 pkgResolvedDependencies <- getResolvedDependencies declaredDeps
@@ -199,8 +204,8 @@ getVersionFromGitTag = do
199204 dropPrefix prefix str =
200205 fromMaybe str (stripPrefix prefix str)
201206
202−getBowerInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
203−getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
207+getBowerRepositoryInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
208+getBowerRepositoryInfo = either (userError . BadRepositoryField) return . tryExtract
204209 where
205210 tryExtract pkgMeta =
206211 case bowerRepository pkgMeta of
@@ -210,6 +215,9 @@ getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
210215 (Left (BadRepositoryType repositoryType))
211216 maybe (Left NotOnGithub) Right (extractGithub repositoryUrl)
212217
218+bowerLicenseExists :: PackageMeta -> Bool
219+bowerLicenseExists = any (not . null) . bowerLicense
220+
213221extractGithub :: String -> Maybe (D.GithubUser, D.GithubRepo)
214222extractGithub = stripGitHubPrefixes
215223 >>> fmap (splitOn "/")