summaryrefslogtreecommitdiff
path: root/app/SlackBuilder/Updater.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/SlackBuilder/Updater.hs')
-rw-r--r--app/SlackBuilder/Updater.hs24
1 files changed, 17 insertions, 7 deletions
diff --git a/app/SlackBuilder/Updater.hs b/app/SlackBuilder/Updater.hs
index 0e927e2..ec96018 100644
--- a/app/SlackBuilder/Updater.hs
+++ b/app/SlackBuilder/Updater.hs
@@ -29,8 +29,11 @@ import Network.HTTP.Req
)
import Text.URI (mkURI)
import SlackBuilder.CommandLine
+import SlackBuilder.Trans
import qualified Data.Aeson.KeyMap as KeyMap
import GHC.Records (HasField(..))
+import Control.Monad.Trans.Reader (ReaderT(..), asks)
+import Control.Monad.IO.Class (MonadIO(..))
newtype PackagistPackage = PackagistPackage
{ version :: Text
@@ -86,7 +89,7 @@ data GhQuery = GhQuery
$(deriveJSON defaultOptions ''GhQuery)
-latestPackagist :: PackagistArguments -> IO (Maybe Text)
+latestPackagist :: PackagistArguments -> SlackBuilderT (Maybe Text)
latestPackagist PackagistArguments{..} = do
packagistResponse <- runReq defaultHttpConfig $
let uri = https "repo.packagist.org" /: "p2"
@@ -99,9 +102,9 @@ latestPackagist PackagistArguments{..} = do
pure $ HashMap.lookup fullName packagistPackages
>>= fmap (version . fst) . Vector.uncons
-latestText :: TextArguments -> IO (Maybe Text)
+latestText :: TextArguments -> SlackBuilderT (Maybe Text)
latestText (TextArguments textArguments) = do
- uri <- useHttpsURI <$> mkURI textArguments
+ uri <- liftIO $ useHttpsURI <$> mkURI textArguments
packagistResponse <- traverse (runReq defaultHttpConfig) $ go . fst <$> uri
pure $ Text.strip . Text.Encoding.decodeASCII . responseBody
@@ -109,8 +112,12 @@ latestText (TextArguments textArguments) = do
where
go uri = req GET uri NoReqBody bsResponse mempty
-latestGitHub :: Settings -> GhArguments -> (Text -> Maybe Text) -> IO (Maybe Text)
-latestGitHub Settings{..} GhArguments{..} versionTransform = do
+latestGitHub
+ :: GhArguments
+ -> (Text -> Maybe Text)
+ -> SlackBuilderT (Maybe Text)
+latestGitHub GhArguments{..} versionTransform = do
+ ghToken' <- SlackBuilderT $ asks ghToken
ghResponse <- runReq defaultHttpConfig $
let uri = https "api.github.com" /: "graphql"
query = GhQuery
@@ -122,10 +129,13 @@ latestGitHub Settings{..} GhArguments{..} versionTransform = do
}
authorizationHeader = header "authorization"
$ Text.Encoding.encodeUtf8
- $ "Bearer " <> ghToken
+ $ "Bearer " <> ghToken'
in req POST uri (ReqBodyJson query) jsonResponse
$ authorizationHeader <> header "User-Agent" "SlackBuilder"
- let ghNodes = nodes $ refs $ repository $ responseBody ghResponse
+ let ghNodes = nodes
+ $ refs
+ $ (getField @"repository" :: GhData -> GhRepository)
+ $ responseBody ghResponse
refs' = Vector.reverse
$ Vector.catMaybes
$ versionTransform . getField @"name" <$> ghNodes