module Main (main) where import Utils.ThankYouStars.GitHub import Utils.ThankYouStars.Package import Control.Exception ( SomeException, catch ) import Data.Maybe ( catMaybes ) import qualified Data.Set as S import System.Exit ( die ) import System.Directory ( getHomeDirectory ) import System.FilePath ( joinPath, (<.>) ) main :: IO () main = do homeDir <- getHomeDirectory thisPkg <- getThisPackageName let tokenFile = joinPath [homeDir, ".thank-you-stars.json"] cabalFile = unPackageName thisPkg <.> "cabal" eToken <- readToken tokenFile case eToken of Left _ -> do die ("Cannot parse " ++ show tokenFile ++ " into a token") Right token -> do desc <- readCabalFile cabalFile db <- readHackage let pkgs = S.delete thisPkg $ allBuildDepends desc mRepos = S.map (flip lookupRepo $ db) pkgs repos = catMaybes $ S.toList mRepos mapM_ (starAction token) repos starAction :: Token -> GitHubRepo -> IO () starAction token ghr = do eResult <- starRepo token ghr case eResult of Left _ -> putStrLn $ "Error " ++ show ghr Right () -> putStrLn $ "Starred! " ++ show ghr