summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: 6901fa6aec7451938009f16dc1fceff8375bd9df (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
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.Updater
import qualified Toml
import qualified Data.Text as Text

main :: IO ()
main = do
    programCommand <- execParser slackBuilderParser
    settings <- Toml.decodeFile settingsCodec "config/config.toml"
    latestVersion <- case programCommand of
        PackagistCommand packagistArguments ->
            latestPackagist packagistArguments
        TextCommand textArguments -> latestText textArguments
        GhCommand ghArguments@GhArguments{ transform } ->
            latestGitHub settings ghArguments $ chooseTransformFunction transform

    Text.IO.putStrLn $ fromMaybe "" latestVersion
  where
    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