summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2023-08-04 21:33:21 +0200
committerEugen Wissner <belka@caraus.de>2023-08-04 21:33:21 +0200
commit028f64d25a93e0430f22240024e255eec12bfb09 (patch)
tree8782148d6eedf7558b3af2c75ba8410207340ea6
parent1bc410d86d0dcdb1fcb2eab74b0ace2b6781b0ff (diff)
downloadslackbuilder-028f64d25a93e0430f22240024e255eec12bfb09.tar.gz
Move packagist check to a Haskell binary
-rw-r--r--.gitignore2
-rw-r--r--CHANGELOG.md5
-rw-r--r--app/Main.hs46
-rw-r--r--lib/up2date.rb7
-rw-r--r--slackbuilder.cabal40
5 files changed, 93 insertions, 7 deletions
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