diff options
Diffstat (limited to 'app/SlackBuilder/Updater.hs')
| -rw-r--r-- | app/SlackBuilder/Updater.hs | 24 |
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 |
