summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: 76c985fb7568dedf3b96101318e0fa67ab0d052a (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
53
54
55
56
57
58
59
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
import Text.URI (mkURI)

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
            | Just uri <- mkURI url -> fmap (Text.pack . show)
                <$> download uri target
            | otherwise -> pure Nothing
        CloneCommand repo tarball tagPrefix -> fmap (Text.pack . show)
            <$> clone repo tarball tagPrefix
        DownloadAndDeployCommand uri tarball -> fmap (Text.pack . show)
            <$> downloadAndDeploy uri tarball
    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