diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/Main.hs | 50 |
1 files changed, 18 insertions, 32 deletions
diff --git a/app/Main.hs b/app/Main.hs index 7766959..faf350c 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -15,28 +15,20 @@ import qualified Toml import qualified Data.ByteString as ByteString import Data.Text (Text) import qualified Data.Text as Text +import qualified Data.Text.Encoding as Text.Encoding import qualified Data.Text.IO as Text.IO import Control.Monad.Trans.Reader (ReaderT(..), asks) import SlackBuilder.Download +import SlackBuilder.Package (Package(..)) import qualified SlackBuilder.Package as Package -import Text.URI (mkURI, URI) +import Text.URI (mkURI) import Text.URI.QQ (uri) import Data.Foldable (for_) import qualified Text.URI as URI -import GHC.Records (HasField(..)) import System.FilePath ((</>), (<.>)) import SlackBuilder.Info import Text.Megaparsec (parse, errorBundlePretty) -data Package = Package - { latest :: Package.Updater - , category :: Text - , name :: Text - , homepage :: Maybe URI - , requires :: [Text] - , reupload :: Bool - } - autoUpdatable :: [Package] autoUpdatable = [ Package @@ -55,7 +47,7 @@ autoUpdatable = in Package.Updater latest' template , category = "development" , name = "universal-ctags" - , homepage = Just [uri|https://ctags.io/|] + , homepage = [uri|https://ctags.io/|] , requires = pure "%README%" , reupload = True } @@ -69,7 +61,7 @@ autoUpdatable = in Package.Updater latest' template , category = "development" , name = "composer" - , homepage = Just [uri|https://getcomposer.org/|] + , homepage = [uri|https://getcomposer.org/|] , requires = mempty , reupload = False } @@ -88,7 +80,7 @@ autoUpdatable = in Package.Updater latest' template , category = "network" , name = "jitsi-meet-desktop" - , homepage = Just [uri|https://jitsi.org/|] + , homepage = [uri|https://jitsi.org/|] , requires = mempty , reupload = False } @@ -110,7 +102,7 @@ autoUpdatable = in Package.Updater latest' template , category = "development" , name = "php82" - , homepage = Just [uri|https://www.php.net/|] + , homepage = [uri|https://www.php.net/|] , requires = ["postgresql"] , reupload = False } @@ -131,23 +123,12 @@ updatePackageIfRequired package@Package{..} version = do infoContents <- liftIO $ ByteString.readFile $ repository' </> packagePath case parse parseInfoFile packagePath infoContents of - Right _parsedInfoFile -> updatePackage package version + Right parsedInfoFile -> updatePackage package parsedInfoFile version Left errorBundle -> liftIO $ putStr $ errorBundlePretty errorBundle -updatePackage :: Package -> Text -> SlackBuilderT () -updatePackage Package{..} version = do - maintainer' <- SlackBuilderT $ asks $ getField @"maintainer" +updatePackage :: Package -> PackageInfo -> Text -> SlackBuilderT () +updatePackage Package{..} info version = do let packagePath = category <> "/" <> name - package' = Package.PackageInfo - { version = version - , requires = requires - , path = Text.unpack packagePath - , homepage = maybe "" URI.render homepage - , maintainer = Package.Maintainer - { name = getField @"name" maintainer' - , email = getField @"email" maintainer' - } - } Package.Updater _ downloadTemplate = latest repository' <- SlackBuilderT $ asks repository @@ -162,9 +143,15 @@ updatePackage Package{..} version = do download' <- handleReupload uri' relativeTarball downloadFileName let infoFilePath = repository' </> Text.unpack packagePath </> (Text.unpack name <.> "info") + package' = info + { version = version + , requires = Text.Encoding.encodeUtf8 <$> requires + , homepage = URI.render homepage + , downloads = [download'] + , checksums = [checksum] + } - liftIO $ Text.IO.writeFile infoFilePath - $ Package.infoTemplate package' [Package.Download download' checksum False] + liftIO $ Text.IO.writeFile infoFilePath $ generate package' updateSlackBuildVersion packagePath version commit packagePath version @@ -176,7 +163,6 @@ updatePackage Package{..} version = do >> liftIO (mkURI $ "https://download.dlackware.com/hosted-sources/" <> name <> "/" <> downloadFileName) | otherwise = pure uri' - main :: IO () main = do programCommand <- execParser slackBuilderParser |
