Move packagist check to a Haskell binary

This commit is contained in:
2023-08-04 21:33:21 +02:00
parent 1bc410d86d
commit 028f64d25a
5 changed files with 93 additions and 7 deletions

46
app/Main.hs Normal file
View File

@ -0,0 +1,46 @@
module Main
( main
) where
import Data.Aeson.TH (defaultOptions, deriveJSON)
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import Data.Text (Text)
import qualified Data.Text.IO as Text.IO
import Data.Vector (Vector)
import qualified Data.Vector as Vector
import Network.HTTP.Req
( runReq
, defaultHttpConfig
, req
, GET(..)
, https
, jsonResponse
, NoReqBody(..)
, (/:)
, responseBody
)
import Data.Maybe (fromMaybe)
newtype PackagistPackage = PackagistPackage
{ version :: Text
} deriving (Eq, Show)
$(deriveJSON defaultOptions ''PackagistPackage)
newtype PackagistResponse = PackagistResponse
{ packages :: HashMap Text (Vector PackagistPackage)
} deriving (Eq, Show)
$(deriveJSON defaultOptions ''PackagistResponse)
main :: IO ()
main = do
packagistResponse <- runReq defaultHttpConfig $
let uri = https "repo.packagist.org" /: "p2" /: "composer" /: "composer.json"
in req GET uri NoReqBody jsonResponse mempty
let packagistPackages = packages $ responseBody packagistResponse
Text.IO.putStrLn $ fromMaybe ""
$ HashMap.lookup "composer/composer" packagistPackages
>>= fmap (version . fst) . Vector.uncons