diff --git a/.gitignore b/.gitignore index 49d3d54..2ded37a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ *.lz *.pk3 *.run -*.Z *.deb *.jar *~ @@ -26,3 +25,4 @@ /vendor/ /.bundle/ /pkg/ +/dist-newstyle/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6e8504c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for slackbuilder + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/app/Main.hs b/app/Main.hs new file mode 100644 index 0000000..75a4396 --- /dev/null +++ b/app/Main.hs @@ -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 diff --git a/lib/up2date.rb b/lib/up2date.rb index 3387941..322cb9c 100644 --- a/lib/up2date.rb +++ b/lib/up2date.rb @@ -77,12 +77,7 @@ module SlackBuilder end def latest - full_name = [@vendor, @name].join '/' - uri = URI "https://repo.packagist.org/p2/#{full_name}.json" - response = Net::HTTP.get uri, { - 'content-type' => 'application/json' - } - JSON.parse(response)['packages'][full_name].first['version'] + `./bin/slackbuilder #{@vendor} #{@name}`.strip end end diff --git a/slackbuilder.cabal b/slackbuilder.cabal new file mode 100644 index 0000000..66418de --- /dev/null +++ b/slackbuilder.cabal @@ -0,0 +1,40 @@ +cabal-version: 2.4 +name: slackbuilder +version: 0.1.0.0 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +bug-reports: https://git.caraus.tech/OSS/slackbuilder/issues + +license: MPL-2.0 +license-files: LICENSE +copyright: (c) 2023 Eugen Wissner + +author: Eugen Wissner +maintainer: belka@caraus.de + +category: Build +extra-source-files: CHANGELOG.md + +executable slackbuilder + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + default-extensions: + OverloadedStrings + TemplateHaskell + build-depends: + aeson ^>= 2.2.0, + base ^>= 4.16.4.0, + req ^>=3.13, + text ^>= 2.0, + unordered-containers ^>= 0.2.19, + vector ^>= 0.13.0 + hs-source-dirs: app + default-language: Haskell2010