summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: eea49517c7115b40d525e334400e79f8c7fec06f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module Main
    ( main
    ) where

import qualified Data.Text.IO as Text.IO
import Data.Maybe (fromMaybe)
import Options.Applicative (execParser)
import SlackBuilder.CommandLine
import SlackBuilder.Config
import SlackBuilder.Trans
import SlackBuilder.Updater
import qualified Toml
import qualified Data.Text as Text
import Control.Monad.Trans.Reader (ReaderT(..))
import SlackBuilder.Download

main :: IO ()
main = do
    programCommand <- execParser slackBuilderParser
    settings <- Toml.decodeFile settingsCodec "config/config.toml"
    latestVersion <- flip runReaderT settings
        $ runSlackBuilderT
        $ executeCommand programCommand

    Text.IO.putStrLn $ fromMaybe "" latestVersion
  where
    executeCommand = \case
        PackagistCommand packagistArguments ->
            latestPackagist packagistArguments
        TextCommand textArguments -> latestText textArguments
        GhCommand ghArguments@GhArguments{ transform }
            -> latestGitHub ghArguments $ chooseTransformFunction transform
        SlackBuildCommand packagePath version ->
            updateSlackBuildVersion packagePath version >> pure Nothing
        CommitCommand packagePath version ->
            commit packagePath version >> pure Nothing
        ExistsCommand urlPath -> pure . Text.pack . show
            <$> remoteFileExists urlPath
        ArchiveCommand repo nameVersion tarball tagPrefix ->
            cloneAndArchive repo nameVersion tarball tagPrefix >> pure Nothing
        DownloadCommand url target -> fmap (Text.pack . show)
            <$> download url target
    chooseTransformFunction (Just "php") = phpTransform
    chooseTransformFunction (Just "rdiff-backup") = Text.stripPrefix "v"
    chooseTransformFunction _ = stripPrefix "v"
    stripPrefix prefix string = Just
        $ fromMaybe string
        $ Text.stripPrefix prefix string
    phpTransform version
        | (majorPrefix, _patchVersion) <- Text.breakOnEnd "." version
        , majorPrefix == "php-8.2." = Just $ Text.drop (Text.length "php-") version
        | otherwise = Nothing