@@ -17,7 +17,7 @@ module Language.PureScript.Publish
1717 , getGitWorkingTreeStatus
1818 , checkCleanWorkingTree
1919 , getVersionFromGitTag
20− , getBowerInfo
20+ , getBowerRepositoryInfo
2121 , getModulesAndBookmarks
2222 , getResolvedDependencies
2323 ) where
@@ -121,19 +121,24 @@ otherError = throwError . OtherError
121121catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
122122catchLeft a f = either f pure a
123123
124+unlessM :: Monad m => m Bool -> m () -> m ()
125+unlessM cond act = cond >>= flip unless act
126+
124127preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
125128preparePackage' opts = do
126− exists <- liftIO (doesFileExist "bower.json")
127− unless exists (userError BowerJSONNotFound)
128−
129+ unlessM (liftIO (doesFileExist "bower.json")) (userError BowerJSONNotFound)
129130 checkCleanWorkingTree opts
130131
131132 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
132133 >>= flip catchLeft (userError . CouldntDecodeBowerJSON)
134+ unlessM (liftIO (doesFileExist "LICENSE")) (userError LicenseNotFound)
135+
133136 (pkgVersionTag, pkgVersion) <- publishGetVersion opts
134− pkgGithub <- getBowerInfo pkgMeta
137+ pkgGithub <- getBowerRepositoryInfo pkgMeta
135138 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
136139
140+ unless (bowerLicenseExists pkgMeta) (userError NoLicenseSpecified)
141+
137142 let declaredDeps = map fst (bowerDependencies pkgMeta ++
138143 bowerDevDependencies pkgMeta)
139144 pkgResolvedDependencies <- getResolvedDependencies declaredDeps
@@ -193,8 +198,8 @@ getVersionFromGitTag = do
193198 dropPrefix prefix str =
194199 fromMaybe str (stripPrefix prefix str)
195200
196−getBowerInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
197−getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
201+getBowerRepositoryInfo :: PackageMeta -> PrepareM (D.GithubUser, D.GithubRepo)
202+getBowerRepositoryInfo = either (userError . BadRepositoryField) return . tryExtract
198203 where
199204 tryExtract pkgMeta =
200205 case bowerRepository pkgMeta of
@@ -204,6 +209,9 @@ getBowerInfo = either (userError . BadRepositoryField) return . tryExtract
204209 (Left (BadRepositoryType repositoryType))
205210 maybe (Left NotOnGithub) Right (extractGithub repositoryUrl)
206211
212+bowerLicenseExists :: PackageMeta -> Bool
213+bowerLicenseExists = any (not . null) . bowerLicense
214+
207215extractGithub :: String -> Maybe (D.GithubUser, D.GithubRepo)
208216extractGithub = stripGitHubPrefixes
209217 >>> fmap (splitOn "/")