Move packagist check to a Haskell binary
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -14,7 +14,6 @@ | |||||||
| *.lz | *.lz | ||||||
| *.pk3 | *.pk3 | ||||||
| *.run | *.run | ||||||
| *.Z |  | ||||||
| *.deb | *.deb | ||||||
| *.jar | *.jar | ||||||
| *~ | *~ | ||||||
| @@ -26,3 +25,4 @@ | |||||||
| /vendor/ | /vendor/ | ||||||
| /.bundle/ | /.bundle/ | ||||||
| /pkg/ | /pkg/ | ||||||
|  | /dist-newstyle/ | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | # Revision history for slackbuilder | ||||||
|  |  | ||||||
|  | ## 0.1.0.0 -- YYYY-mm-dd | ||||||
|  |  | ||||||
|  | * First version. Released on an unsuspecting world. | ||||||
							
								
								
									
										46
									
								
								app/Main.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								app/Main.hs
									
									
									
									
									
										Normal 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 | ||||||
| @@ -77,12 +77,7 @@ module SlackBuilder | |||||||
|     end |     end | ||||||
|  |  | ||||||
|     def latest |     def latest | ||||||
|       full_name = [@vendor, @name].join '/' |       `./bin/slackbuilder #{@vendor} #{@name}`.strip | ||||||
|       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'] |  | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								slackbuilder.cabal
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								slackbuilder.cabal
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user